Hello, world!

アセンブラとHello, world!を書いた。

compile.rb やばい。適当に書きすぎてわけわからん。

INIT_ENV = [:out, :succ, :ch119, :inp]

class Let
  def initialize(e)
    @e = e
  end
  
  def method_missing(name, *args)
    name = name.to_s
    raise NameError.new("Unknown variable '#{name}'") unless name[/^(.*)=$/]
    puts "\t\#   #{$1} = #{args[0]}"
    @e._alias($1.intern, args[0])
  end
end

class E
  def initialize(env = INIT_ENV, count = "0", ali = {})
    @env = env.dup
    @count = count
    @let = Let.new(self)
    @alias = ali
  end

  def _alias(sym, val)
    @alias[sym] = @alias[val] || val
  end

  def let
    @let
  end

  def abs(arg1, *args, &pr)
    args = [arg1]+args
    n = args.size
    new_name = "_t#{@count.succ!}"
    puts "#{'w'*n}\t\#  let #{new_name} #{args.join(' ')} ="
    E.new(args.reverse+@env, @count, @alias).instance_eval(&pr)
    puts "v"
    @env.unshift(new_name)
    new_name
  end

  def method_missing(name, *args)
    name = @alias[name] || name
    args.each {|arg|
      index = @env.index(name)
      raise NameError.new("Unknown variable '#{name}'") unless index
      pindex = @env.index(arg)
      raise NameError.new("Unknown variable '#{arg}'") unless pindex
      new_name = "_t#{@count.succ!}"
      f = 'W' * (index + 1)
      v = 'w' * (pindex + 1)
      puts "#{f}#{v}\t\#  #{new_name} = #{name} #{arg}"
      name = new_name
      @env.unshift(new_name)
    }
    name
  end
end

def compile(&pr)
  E.new.instance_eval(&pr)
end

hello, worldソース

require 'compile.rb'

compile do
  let.f0 = abs f, x do
    f(f(x))
  end

  let.f1 = abs f, x do
    succ(f0(f,x))
  end

  let.idt = abs x do
  end
  
  #out(f1(f0(f1(f0(f1(f1(f0(f1(idt))))))), ch119))
  "Hello, world!".each_byte do |ch|
    ch = (ch - ?w) & 255
    x = idt
    7.downto(0) do |i|
      if ch[i] == 1
        x = f1(x)
      else
        x = f0(x)
      end
    end
    let.y = x
    out(y(ch119))
  end
end

アセンブル結果

ww	#  let _t1 f x =
WWw	#  _t2 = f x
WWWw	#  _t3 = f _t2
v
	#   f0 = _t1
ww	#  let _t4 f x =
WWWww	#  _t5 = _t1 f
Www	#  _t6 = _t5 x
WWWWWWWw	#  _t7 = succ _t6
v
	#   f1 = _t4
w	#  let _t8 x =
v
	#   idt = _t8
WWw	#  _t9 = _t4 _t8
WWWw	#  _t10 = _t4 _t9
WWWWWw	#  _t11 = _t1 _t10
WWWWWw	#  _t12 = _t4 _t11
WWWWWWWw	#  _t13 = _t1 _t12
WWWWWWWWw	#  _t14 = _t1 _t13
WWWWWWWWWw	#  _t15 = _t1 _t14
WWWWWWWWWw	#  _t16 = _t4 _t15
	#   y = _t16
Wwwwwwwwwwwwwww	#  _t17 = _t16 ch119
WWWWWWWWWWWWWw	#  _t18 = out _t17
WWWWWWWWWWWWwwwwwwwwwww	#  _t19 = _t4 _t8
WWWWWWWWWWWWWw	#  _t20 = _t4 _t19
WWWWWWWWWWWWWWw	#  _t21 = _t4 _t20
WWWWWWWWWWWWWWWWw	#  _t22 = _t1 _t21
WWWWWWWWWWWWWWWWw	#  _t23 = _t4 _t22
WWWWWWWWWWWWWWWWWw	#  _t24 = _t4 _t23
WWWWWWWWWWWWWWWWWWw	#  _t25 = _t4 _t24
WWWWWWWWWWWWWWWWWWWWw	#  _t26 = _t1 _t25
	#   y = _t26
Wwwwwwwwwwwwwwwwwwwwwwwww	#  _t27 = _t26 ch119
WWWWWWWWWWWWWWWWWWWWWWWw	#  _t28 = out _t27
WWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwww	#  _t29 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWw	#  _t30 = _t4 _t29
WWWWWWWWWWWWWWWWWWWWWWWWw	#  _t31 = _t4 _t30
WWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t32 = _t4 _t31
WWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t33 = _t1 _t32
WWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t34 = _t4 _t33
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t35 = _t1 _t34
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t36 = _t4 _t35
	#   y = _t36
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t37 = _t36 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t38 = out _t37
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t39 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t40 = _t4 _t39
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t41 = _t4 _t40
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t42 = _t4 _t41
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t43 = _t1 _t42
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t44 = _t4 _t43
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t45 = _t1 _t44
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t46 = _t4 _t45
	#   y = _t46
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t47 = _t46 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t48 = out _t47
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t49 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t50 = _t4 _t49
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t51 = _t4 _t50
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t52 = _t4 _t51
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t53 = _t4 _t52
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t54 = _t1 _t53
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t55 = _t1 _t54
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t56 = _t1 _t55
	#   y = _t56
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t57 = _t56 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t58 = out _t57
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t59 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t60 = _t1 _t59
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t61 = _t4 _t60
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t62 = _t4 _t61
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t63 = _t1 _t62
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t64 = _t4 _t63
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t65 = _t1 _t64
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t66 = _t4 _t65
	#   y = _t66
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t67 = _t66 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t68 = out _t67
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t69 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t70 = _t1 _t69
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t71 = _t4 _t70
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t72 = _t1 _t71
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t73 = _t4 _t72
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t74 = _t1 _t73
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t75 = _t1 _t74
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t76 = _t4 _t75
	#   y = _t76
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t77 = _t76 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t78 = out _t77
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t79 = _t1 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t80 = _t1 _t79
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t81 = _t1 _t80
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t82 = _t1 _t81
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t83 = _t1 _t82
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t84 = _t1 _t83
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t85 = _t1 _t84
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t86 = _t1 _t85
	#   y = _t86
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t87 = _t86 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t88 = out _t87
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t89 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t90 = _t4 _t89
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t91 = _t4 _t90
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t92 = _t4 _t91
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t93 = _t4 _t92
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t94 = _t1 _t93
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t95 = _t1 _t94
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t96 = _t1 _t95
	#   y = _t96
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t97 = _t96 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t98 = out _t97
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t99 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t100 = _t4 _t99
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t101 = _t4 _t100
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t102 = _t4 _t101
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t103 = _t4 _t102
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t104 = _t1 _t103
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t105 = _t4 _t104
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t106 = _t4 _t105
	#   y = _t106
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t107 = _t106 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t108 = out _t107
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t109 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t110 = _t4 _t109
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t111 = _t4 _t110
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t112 = _t4 _t111
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t113 = _t1 _t112
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t114 = _t4 _t113
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t115 = _t1 _t114
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t116 = _t4 _t115
	#   y = _t116
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t117 = _t116 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t118 = out _t117
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t119 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t120 = _t4 _t119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t121 = _t4 _t120
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t122 = _t1 _t121
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t123 = _t4 _t122
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t124 = _t4 _t123
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t125 = _t1 _t124
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t126 = _t4 _t125
	#   y = _t126
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t127 = _t126 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t128 = out _t127
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t129 = _t4 _t8
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t130 = _t1 _t129
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t131 = _t4 _t130
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t132 = _t1 _t131
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t133 = _t4 _t132
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t134 = _t1 _t133
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t135 = _t4 _t134
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t136 = _t1 _t135
	#   y = _t136
Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww	#  _t137 = _t136 ch119
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw	#  _t138 = out _t137