val bench = List(
  ArrayDef("mem", 30000),
  Assign("ptr", Num(15000)),
  Assign("ptr", Aop("+", Var("ptr"), Num(1))),
  AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(2))),
  While(
    Bop("!=", Ref("mem", Var("ptr")), Num(0)),
    List(
      Assign("ptr", Aop("-", Var("ptr"), Num(1))),
      AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(13))),
      Assign("ptr", Aop("+", Var("ptr"), Num(1))),
      AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
      Skip
    )
  ),
  Assign("ptr", Aop("-", Var("ptr"), Num(1))),
  While(
    Bop("!=", Ref("mem", Var("ptr")), Num(0)),
    List(
      While(
        Bop("!=", Ref("mem", Var("ptr")), Num(0)),
        List(
          Assign("ptr", Aop("+", Var("ptr"), Num(1))),
          AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(1))),
          Assign("ptr", Aop("+", Var("ptr"), Num(1))),
          AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(1))),
          Assign("ptr", Aop("-", Var("ptr"), Num(2))),
          AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
          Skip
        )
      ),
      Assign("ptr", Aop("+", Var("ptr"), Num(1))),
      While(
        Bop("!=", Ref("mem", Var("ptr")), Num(0)),
        List(
          Assign("ptr", Aop("-", Var("ptr"), Num(1))),
          AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(1))),
          Assign("ptr", Aop("+", Var("ptr"), Num(1))),
          AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
          Skip
        )
      ),
      AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(8))),
      While(
        Bop("!=", Ref("mem", Var("ptr")), Num(0)),
        List(
          Assign("ptr", Aop("+", Var("ptr"), Num(1))),
          AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(8))),
          Assign("ptr", Aop("-", Var("ptr"), Num(1))),
          AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
          Skip
        )
      ),
      Assign("ptr", Aop("+", Var("ptr"), Num(1))),
      Assign("x", Ref("mem", Var("ptr"))),
      Write("x"),
      AssignA("mem", Var("ptr"), Num(0)),
      Assign("ptr", Aop("-", Var("ptr"), Num(2))),
      Assign("ptr", Aop("+", Var("ptr"), Num(1))),
      AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(10))),
      While(
        Bop("!=", Ref("mem", Var("ptr")), Num(0)),
        List(
          Assign("ptr", Aop("+", Var("ptr"), Num(1))),
          AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(10))),
          While(
            Bop("!=", Ref("mem", Var("ptr")), Num(0)),
            List(
              Assign("ptr", Aop("+", Var("ptr"), Num(1))),
              AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(2))),
              AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(8))),
              While(
                Bop("!=", Ref("mem", Var("ptr")), Num(0)),
                List(
                  Assign("ptr", Aop("+", Var("ptr"), Num(1))),
                  AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(10))),
                  While(
                    Bop("!=", Ref("mem", Var("ptr")), Num(0)),
                    List(
                      Assign("ptr", Aop("+", Var("ptr"), Num(1))),
                      AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(10))),
                      While(
                        Bop("!=", Ref("mem", Var("ptr")), Num(0)),
                        List(
                          Assign("ptr", Aop("+", Var("ptr"), Num(1))),
                          AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(10))),
                          While(
                            Bop("!=", Ref("mem", Var("ptr")), Num(0)),
                            List(
                              Assign("ptr", Aop("+", Var("ptr"), Num(1))),
                              AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(1))),
                              AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(9))),
                              AssignA("mem", Var("ptr"), Num(0)),
                              Assign("ptr", Aop("-", Var("ptr"), Num(1))),
                              AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
                              Skip
                            )
                          ),
                          Assign("ptr", Aop("-", Var("ptr"), Num(1))),
                          AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
                          Skip
                        )
                      ),
                      Assign("ptr", Aop("-", Var("ptr"), Num(1))),
                      AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
                      Skip
                    )
                  ),
                  Assign("ptr", Aop("-", Var("ptr"), Num(1))),
                  AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
                  Skip
                )
              ),
              Assign("ptr", Aop("-", Var("ptr"), Num(1))),
              AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
              Skip
            )
          ),
          Assign("ptr", Aop("-", Var("ptr"), Num(1))),
          AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
          Skip
        )
      ),
      Assign("ptr", Aop("-", Var("ptr"), Num(1))),
      AssignA("mem", Var("ptr"), Aop("-", Ref("mem", Var("ptr")), Num(1))),
      Skip
    )
  ),
  AssignA("mem", Var("ptr"), Aop("+", Ref("mem", Var("ptr")), Num(10))),
  Assign("x", Ref("mem", Var("ptr"))),
  Write("x"),
  Skip
)