import kotlin.time.ExperimentalTime
import kotlin.time.measureTime

class Day24 {
    data class Valley(val blizzards: Map<Point, List<Direction>>, val maxY: Int, val maxX: Int)
    data class Moment(val expedition: Point, val minutesSpent: Int)

    fun parse(input: List<String>): Valley {
        val blizzards = mutableMapOf<Point, List<Direction>>()
        val walls = mutableSetOf<Point>()
        for ((y, line) in input.withIndex()) {
            for ((x, cell) in line.withIndex()) {
                when (cell) {
                    '#' -> walls.add(Point(x, y))
                    '>' -> blizzards[Point(x, y)] = listOf(Direction.Right)
                    '<' -> blizzards[Point(x, y)] = listOf(Direction.Left)
                    '^' -> blizzards[Point(x, y)] = listOf(Direction.Up)
                    'v' -> blizzards[Point(x, y)] = listOf(Direction.Down)
                }
            }
        }

        return Valley(blizzards, input.size - 1, input[0].length - 1)
    }

    fun nextPosition(direction: Direction, position: Point, valley: Valley): Point {
        val d = when (direction) {
            Direction.Up -> Point(0, -1)
            Direction.Down -> Point(0, 1)
            Direction.Left -> Point(-1, 0)
            Direction.Right -> Point(1, 0)
        }

        val newPosition = position.sum(d)
        if (newPosition.x <= 0) {
            return Point(valley.maxX - 1, newPosition.y)
        }
        if (newPosition.x >= valley.maxX) {
            return Point(1, newPosition.y)
        }
        if (newPosition.y <= 0) {
            return Point(newPosition.x, valley.maxY - 1)
        }
        if (newPosition.y >= valley.maxY) {
            return Point(newPosition.x, 1)
        }

        return newPosition
    }

    fun print(valley: Valley) {
        for (y in 0..valley.maxY) {
            for (x in 0..valley.maxX) {
                val point = Point(x, y)
                if (x == 0 || x == valley.maxX || y == 0 || y == valley.maxY) {
                    print('#')
                } else if (point !in valley.blizzards.keys) {
                    print('.')
                } else {
                    val directions = valley.blizzards[point]!!
                    if (directions.size == 1) {
                        when (directions.first()) {
                            Direction.Up -> print('^')
                            Direction.Down -> print('v')
                            Direction.Left -> print('<')
                            Direction.Right -> print('>')
                        }
                    } else {
                        print(directions.size)
                    }
                }
            }
            println()
        }

        println()
    }

    fun next(valley: Valley): Valley {
        val blizzards = valley.blizzards.flatMap { blizzard ->
            blizzard.value.map { direction -> nextPosition(direction, blizzard.key, valley) to direction }
        }.groupBy({ x -> x.first }, { x -> x.second })

        val newValley = Valley(blizzards, valley.maxY, valley.maxX)

        return newValley
    }

    fun getAvailableMoves(current: Point, start: Point, target: Point, valley: Valley): Set<Point> {
        return listOf(
            Point(0, 0), // wait
            Point(0, -1),
            Point(0, 1),
            Point(-1, 0),
            Point(1, 0)
        )
            .map { p -> p.sum(current) }
            .filter { p ->
                (p.x > 0 && p.x < valley.maxX && p.y > 0 && p.y < valley.maxY) ||
                    p == target || p == start
            }
            .filter { p -> !valley.blizzards.containsKey(p) }
            .toSet()
    }

    fun search(start: Point, target: Point, initValleyState: Valley): Pair<Int, Valley> {
        val valleyStates = mutableListOf(initValleyState)

        print(initValleyState)

        val q = ArrayDeque<Moment>()
        val visited = mutableSetOf<Moment>()
        val initMoment = Moment(start, 0)
        q.addLast(initMoment)
        visited.add(initMoment)

        while (q.isNotEmpty()) {
            val moment = q.removeFirst()
            val nextMinute = moment.minutesSpent + 1
            val nextValleyState = if (valleyStates.size > nextMinute) {
                valleyStates[nextMinute]
            } else {
                valleyStates.add(next(valleyStates.last()))
                valleyStates.last()
            }
            val availableMoves = getAvailableMoves(moment.expedition, start, target, nextValleyState)
            if (target in availableMoves) {
                return nextMinute to nextValleyState
            }

            for (move in availableMoves) {
                val nextMoment = Moment(move, nextMinute)
                if (nextMoment !in visited) {
                    visited.add(nextMoment)
                    q.addLast(nextMoment)
                }
            }
        }

        return -1 to initValleyState
    }

    fun part1(input: List<String>): String {
        val valley = parse(input)
        val start = Point(1, 0)
        val target = Point(valley.maxX - 1, valley.maxY)
        val count = search(start, target, valley).first
        return count.toString()
    }

    fun part2(input: List<String>): String {
        val valley = parse(input)
        val start = Point(1, 0)
        val target = Point(valley.maxX - 1, valley.maxY)
        val forward = search(start, target, valley)
        val r1 = forward.first
        println("R1 $r1")
        val reward = search(target, start, forward.second)
        val r2 = reward.first
        println("R2 $r2")
        val again = search(start, target, reward.second)
        val r3 = again.first
        println("R3 $r3")

        return (r1 + r2 + r3).toString()
    }
}

@OptIn(ExperimentalTime::class)
@Suppress("DuplicatedCode")
fun main() {
    val solution = Day24()
    val name = solution.javaClass.name

    val execution = setOf(
        ExecutionMode.Test1,
        ExecutionMode.Test2,
        ExecutionMode.Exec1,
        ExecutionMode.Exec2
    )

    fun test() {
        val expected1 = "18"
        val expected2 = "54"

        val testInput = readInput("${name}_test")
        if (execution.contains(ExecutionMode.Test1)) {
            println("Test part 1")
            assert(solution.part1(testInput), expected1)
            println("> Passed")
        }
        if (execution.contains(ExecutionMode.Test2)) {
            println("Test part 2")
            assert(solution.part2(testInput), expected2)
            println("> Passed")
            println()
        }
        println("=================================")
        println()
    }

    fun run() {
        val input = readInput(name)
        if (execution.contains(ExecutionMode.Exec1)) {
            val elapsed1 = measureTime {
                println("Part 1: " + solution.part1(input))
            }
            println("Elapsed: $elapsed1")
            println()
        }

        if (execution.contains(ExecutionMode.Exec2)) {
            val elapsed2 = measureTime {
                println("Part 2: " + solution.part2(input))
            }
            println("Elapsed: $elapsed2")
            println()
        }
    }

    test()
    run()
}

Compiled from "Day24.kt"
public final class Day24$WhenMappings {
  public static final int[] $EnumSwitchMapping$0;

  static {};
    Code:
       0: invokestatic  #14                 // Method Direction.values:()[LDirection;
       3: arraylength
       4: newarray       int
       6: astore_0
       7: nop
       8: aload_0
       9: getstatic     #18                 // Field Direction.Up:LDirection;
      12: invokevirtual #22                 // Method Direction.ordinal:()I
      15: iconst_1
      16: iastore
      17: goto          21
      20: astore_1
      21: nop
      22: aload_0
      23: getstatic     #25                 // Field Direction.Down:LDirection;
      26: invokevirtual #22                 // Method Direction.ordinal:()I
      29: iconst_2
      30: iastore
      31: goto          35
      34: astore_1
      35: nop
      36: aload_0
      37: getstatic     #28                 // Field Direction.Left:LDirection;
      40: invokevirtual #22                 // Method Direction.ordinal:()I
      43: iconst_3
      44: iastore
      45: goto          49
      48: astore_1
      49: nop
      50: aload_0
      51: getstatic     #31                 // Field Direction.Right:LDirection;
      54: invokevirtual #22                 // Method Direction.ordinal:()I
      57: iconst_4
      58: iastore
      59: goto          63
      62: astore_1
      63: aload_0
      64: putstatic     #35                 // Field $EnumSwitchMapping$0:[I
      67: return
    Exception table:
       from    to  target type
           7    17    20   Class java/lang/NoSuchFieldError
          21    31    34   Class java/lang/NoSuchFieldError
          35    45    48   Class java/lang/NoSuchFieldError
          49    59    62   Class java/lang/NoSuchFieldError
}

Compiled from "Day24.kt"
public final class Day24$Moment {
  private final Point expedition;

  private final int minutesSpent;

  public Day24$Moment(Point, int);
    Code:
       0: aload_1
       1: ldc           #9                  // String expedition
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #18                 // Method java/lang/Object."<init>":()V
      10: aload_0
      11: aload_1
      12: putfield      #21                 // Field expedition:LPoint;
      15: aload_0
      16: iload_2
      17: putfield      #25                 // Field minutesSpent:I
      20: return

  public final Point getExpedition();
    Code:
       0: aload_0
       1: getfield      #21                 // Field expedition:LPoint;
       4: areturn

  public final int getMinutesSpent();
    Code:
       0: aload_0
       1: getfield      #25                 // Field minutesSpent:I
       4: ireturn

  public final Point component1();
    Code:
       0: aload_0
       1: getfield      #21                 // Field expedition:LPoint;
       4: areturn

  public final int component2();
    Code:
       0: aload_0
       1: getfield      #25                 // Field minutesSpent:I
       4: ireturn

  public final Day24$Moment copy(Point, int);
    Code:
       0: aload_1
       1: ldc           #9                  // String expedition
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #2                  // class Day24$Moment
       9: dup
      10: aload_1
      11: iload_2
      12: invokespecial #37                 // Method "<init>":(LPoint;I)V
      15: areturn

  public static Day24$Moment copy$default(Day24$Moment, Point, int, int, java.lang.Object);
    Code:
       0: iload_3
       1: iconst_1
       2: iand
       3: ifeq          11
       6: aload_0
       7: getfield      #21                 // Field expedition:LPoint;
      10: astore_1
      11: iload_3
      12: iconst_2
      13: iand
      14: ifeq          22
      17: aload_0
      18: getfield      #25                 // Field minutesSpent:I
      21: istore_2
      22: aload_0
      23: aload_1
      24: iload_2
      25: invokevirtual #41                 // Method copy:(LPoint;I)LDay24$Moment;
      28: areturn

  public java.lang.String toString();
    Code:
       0: new           #45                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #46                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #48                 // String Moment(expedition=
       9: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #21                 // Field expedition:LPoint;
      16: invokevirtual #55                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      19: ldc           #57                 // String , minutesSpent=
      21: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #25                 // Field minutesSpent:I
      28: invokevirtual #60                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      31: bipush        41
      33: invokevirtual #63                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      36: invokevirtual #65                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      39: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #21                 // Field expedition:LPoint;
       4: invokevirtual #70                 // Method Point.hashCode:()I
       7: istore_1
       8: iload_1
       9: bipush        31
      11: imul
      12: aload_0
      13: getfield      #25                 // Field minutesSpent:I
      16: invokestatic  #75                 // Method java/lang/Integer.hashCode:(I)I
      19: iadd
      20: istore_1
      21: iload_1
      22: ireturn

  public boolean equals(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: if_acmpne     7
       5: iconst_1
       6: ireturn
       7: aload_1
       8: instanceof    #2                  // class Day24$Moment
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Day24$Moment
      20: astore_2
      21: aload_0
      22: getfield      #21                 // Field expedition:LPoint;
      25: aload_2
      26: getfield      #21                 // Field expedition:LPoint;
      29: invokestatic  #83                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      32: ifne          37
      35: iconst_0
      36: ireturn
      37: aload_0
      38: getfield      #25                 // Field minutesSpent:I
      41: aload_2
      42: getfield      #25                 // Field minutesSpent:I
      45: if_icmpeq     50
      48: iconst_0
      49: ireturn
      50: iconst_1
      51: ireturn
}

Compiled from "Day24.kt"
public final class Day24Kt {
  public static final void main();
    Code:
       0: new           #8                  // class Day24
       3: dup
       4: invokespecial #11                 // Method Day24."<init>":()V
       7: astore_0
       8: aload_0
       9: invokevirtual #15                 // Method java/lang/Object.getClass:()Ljava/lang/Class;
      12: invokevirtual #21                 // Method java/lang/Class.getName:()Ljava/lang/String;
      15: astore_1
      16: iconst_4
      17: anewarray     #23                 // class ExecutionMode
      20: astore_3
      21: aload_3
      22: iconst_0
      23: getstatic     #27                 // Field ExecutionMode.Test1:LExecutionMode;
      26: aastore
      27: aload_3
      28: iconst_1
      29: getstatic     #30                 // Field ExecutionMode.Test2:LExecutionMode;
      32: aastore
      33: aload_3
      34: iconst_2
      35: getstatic     #33                 // Field ExecutionMode.Exec1:LExecutionMode;
      38: aastore
      39: aload_3
      40: iconst_3
      41: getstatic     #36                 // Field ExecutionMode.Exec2:LExecutionMode;
      44: aastore
      45: aload_3
      46: invokestatic  #42                 // Method kotlin/collections/SetsKt.setOf:([Ljava/lang/Object;)Ljava/util/Set;
      49: astore_2
      50: aload_1
      51: aload_2
      52: aload_0
      53: invokestatic  #46                 // Method main$test:(Ljava/lang/String;Ljava/util/Set;LDay24;)V
      56: aload_1
      57: aload_2
      58: aload_0
      59: invokestatic  #49                 // Method main$run:(Ljava/lang/String;Ljava/util/Set;LDay24;)V
      62: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #58                 // Method main:()V
       3: return

  private static final void main$test(java.lang.String, java.util.Set<? extends ExecutionMode>, Day24);
    Code:
       0: ldc           #63                 // String 18
       2: astore_3
       3: ldc           #65                 // String 54
       5: astore        4
       7: new           #67                 // class java/lang/StringBuilder
      10: dup
      11: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
      14: aload_0
      15: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      18: ldc           #74                 // String _test
      20: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      23: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      26: invokestatic  #83                 // Method UtilsKt.readInput:(Ljava/lang/String;)Ljava/util/List;
      29: astore        5
      31: aload_1
      32: getstatic     #27                 // Field ExecutionMode.Test1:LExecutionMode;
      35: invokeinterface #89,  2           // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
      40: ifeq          71
      43: ldc           #91                 // String Test part 1
      45: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
      48: swap
      49: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      52: aload_2
      53: aload         5
      55: invokevirtual #107                // Method Day24.part1:(Ljava/util/List;)Ljava/lang/String;
      58: aload_3
      59: invokestatic  #111                // Method UtilsKt.assert:(Ljava/lang/Object;Ljava/lang/Object;)V
      62: ldc           #113                // String > Passed
      64: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
      67: swap
      68: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      71: aload_1
      72: getstatic     #30                 // Field ExecutionMode.Test2:LExecutionMode;
      75: invokeinterface #89,  2           // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
      80: ifeq          118
      83: ldc           #115                // String Test part 2
      85: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
      88: swap
      89: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      92: aload_2
      93: aload         5
      95: invokevirtual #118                // Method Day24.part2:(Ljava/util/List;)Ljava/lang/String;
      98: aload         4
     100: invokestatic  #111                // Method UtilsKt.assert:(Ljava/lang/Object;Ljava/lang/Object;)V
     103: ldc           #113                // String > Passed
     105: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     108: swap
     109: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     112: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     115: invokevirtual #120                // Method java/io/PrintStream.println:()V
     118: ldc           #122                // String =================================
     120: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     123: swap
     124: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     127: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     130: invokevirtual #120                // Method java/io/PrintStream.println:()V
     133: return

  private static final void main$run(java.lang.String, java.util.Set<? extends ExecutionMode>, Day24);
    Code:
       0: aload_0
       1: invokestatic  #135                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
       4: aload_0
       5: invokestatic  #83                 // Method UtilsKt.readInput:(Ljava/lang/String;)Ljava/util/List;
       8: astore_3
       9: aload_1
      10: getstatic     #33                 // Field ExecutionMode.Exec1:LExecutionMode;
      13: invokeinterface #89,  2           // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
      18: ifeq          118
      21: iconst_0
      22: istore        6
      24: getstatic     #141                // Field kotlin/time/TimeSource$Monotonic.INSTANCE:Lkotlin/time/TimeSource$Monotonic;
      27: astore        7
      29: iconst_0
      30: istore        8
      32: aload         7
      34: invokevirtual #145                // Method kotlin/time/TimeSource$Monotonic."markNow-z9LOYto":()J
      37: lstore        9
      39: iconst_0
      40: istore        11
      42: new           #67                 // class java/lang/StringBuilder
      45: dup
      46: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
      49: ldc           #147                // String Part 1:
      51: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      54: aload_2
      55: aload_3
      56: invokevirtual #107                // Method Day24.part1:(Ljava/util/List;)Ljava/lang/String;
      59: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      62: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      65: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
      68: swap
      69: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      72: nop
      73: nop
      74: lload         9
      76: invokestatic  #153                // Method kotlin/time/TimeSource$Monotonic$ValueTimeMark."elapsedNow-UwyO8pc":(J)J
      79: nop
      80: lstore        4
      82: new           #67                 // class java/lang/StringBuilder
      85: dup
      86: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
      89: ldc           #155                // String Elapsed:
      91: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      94: lload         4
      96: invokestatic  #161                // Method kotlin/time/Duration."toString-impl":(J)Ljava/lang/String;
      99: invokevirtual #164                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     102: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     105: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     108: swap
     109: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     112: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     115: invokevirtual #120                // Method java/io/PrintStream.println:()V
     118: aload_1
     119: getstatic     #36                 // Field ExecutionMode.Exec2:LExecutionMode;
     122: invokeinterface #89,  2           // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     127: ifeq          227
     130: iconst_0
     131: istore        6
     133: getstatic     #141                // Field kotlin/time/TimeSource$Monotonic.INSTANCE:Lkotlin/time/TimeSource$Monotonic;
     136: astore        7
     138: iconst_0
     139: istore        8
     141: aload         7
     143: invokevirtual #145                // Method kotlin/time/TimeSource$Monotonic."markNow-z9LOYto":()J
     146: lstore        9
     148: iconst_0
     149: istore        11
     151: new           #67                 // class java/lang/StringBuilder
     154: dup
     155: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
     158: ldc           #166                // String Part 2:
     160: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     163: aload_2
     164: aload_3
     165: invokevirtual #118                // Method Day24.part2:(Ljava/util/List;)Ljava/lang/String;
     168: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     171: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     174: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     177: swap
     178: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     181: nop
     182: nop
     183: lload         9
     185: invokestatic  #153                // Method kotlin/time/TimeSource$Monotonic$ValueTimeMark."elapsedNow-UwyO8pc":(J)J
     188: nop
     189: lstore        4
     191: new           #67                 // class java/lang/StringBuilder
     194: dup
     195: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
     198: ldc           #155                // String Elapsed:
     200: invokevirtual #72                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     203: lload         4
     205: invokestatic  #161                // Method kotlin/time/Duration."toString-impl":(J)Ljava/lang/String;
     208: invokevirtual #164                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     211: invokevirtual #77                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     214: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     217: swap
     218: invokevirtual #103                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     221: getstatic     #97                 // Field java/lang/System.out:Ljava/io/PrintStream;
     224: invokevirtual #120                // Method java/io/PrintStream.println:()V
     227: return
}

Compiled from "Day24.kt"
public final class Day24$Valley {
  private final java.util.Map<Point, java.util.List<Direction>> blizzards;

  private final int maxY;

  private final int maxX;

  public Day24$Valley(java.util.Map<Point, ? extends java.util.List<? extends Direction>>, int, int);
    Code:
       0: aload_1
       1: ldc           #10                 // String blizzards
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #19                 // Method java/lang/Object."<init>":()V
      10: aload_0
      11: aload_1
      12: putfield      #22                 // Field blizzards:Ljava/util/Map;
      15: aload_0
      16: iload_2
      17: putfield      #26                 // Field maxY:I
      20: aload_0
      21: iload_3
      22: putfield      #29                 // Field maxX:I
      25: return

  public final java.util.Map<Point, java.util.List<Direction>> getBlizzards();
    Code:
       0: aload_0
       1: getfield      #22                 // Field blizzards:Ljava/util/Map;
       4: areturn

  public final int getMaxY();
    Code:
       0: aload_0
       1: getfield      #26                 // Field maxY:I
       4: ireturn

  public final int getMaxX();
    Code:
       0: aload_0
       1: getfield      #29                 // Field maxX:I
       4: ireturn

  public final java.util.Map<Point, java.util.List<Direction>> component1();
    Code:
       0: aload_0
       1: getfield      #22                 // Field blizzards:Ljava/util/Map;
       4: areturn

  public final int component2();
    Code:
       0: aload_0
       1: getfield      #26                 // Field maxY:I
       4: ireturn

  public final int component3();
    Code:
       0: aload_0
       1: getfield      #29                 // Field maxX:I
       4: ireturn

  public final Day24$Valley copy(java.util.Map<Point, ? extends java.util.List<? extends Direction>>, int, int);
    Code:
       0: aload_1
       1: ldc           #10                 // String blizzards
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #2                  // class Day24$Valley
       9: dup
      10: aload_1
      11: iload_2
      12: iload_3
      13: invokespecial #45                 // Method "<init>":(Ljava/util/Map;II)V
      16: areturn

  public static Day24$Valley copy$default(Day24$Valley, java.util.Map, int, int, int, java.lang.Object);
    Code:
       0: iload         4
       2: iconst_1
       3: iand
       4: ifeq          12
       7: aload_0
       8: getfield      #22                 // Field blizzards:Ljava/util/Map;
      11: astore_1
      12: iload         4
      14: iconst_2
      15: iand
      16: ifeq          24
      19: aload_0
      20: getfield      #26                 // Field maxY:I
      23: istore_2
      24: iload         4
      26: iconst_4
      27: iand
      28: ifeq          36
      31: aload_0
      32: getfield      #29                 // Field maxX:I
      35: istore_3
      36: aload_0
      37: aload_1
      38: iload_2
      39: iload_3
      40: invokevirtual #49                 // Method copy:(Ljava/util/Map;II)LDay24$Valley;
      43: areturn

  public java.lang.String toString();
    Code:
       0: new           #53                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #54                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #56                 // String Valley(blizzards=
       9: invokevirtual #60                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #22                 // Field blizzards:Ljava/util/Map;
      16: invokevirtual #63                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      19: ldc           #65                 // String , maxY=
      21: invokevirtual #60                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #26                 // Field maxY:I
      28: invokevirtual #68                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      31: ldc           #70                 // String , maxX=
      33: invokevirtual #60                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      36: aload_0
      37: getfield      #29                 // Field maxX:I
      40: invokevirtual #68                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      43: bipush        41
      45: invokevirtual #73                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      48: invokevirtual #75                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      51: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #22                 // Field blizzards:Ljava/util/Map;
       4: invokevirtual #78                 // Method java/lang/Object.hashCode:()I
       7: istore_1
       8: iload_1
       9: bipush        31
      11: imul
      12: aload_0
      13: getfield      #26                 // Field maxY:I
      16: invokestatic  #83                 // Method java/lang/Integer.hashCode:(I)I
      19: iadd
      20: istore_1
      21: iload_1
      22: bipush        31
      24: imul
      25: aload_0
      26: getfield      #29                 // Field maxX:I
      29: invokestatic  #83                 // Method java/lang/Integer.hashCode:(I)I
      32: iadd
      33: istore_1
      34: iload_1
      35: ireturn

  public boolean equals(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: if_acmpne     7
       5: iconst_1
       6: ireturn
       7: aload_1
       8: instanceof    #2                  // class Day24$Valley
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Day24$Valley
      20: astore_2
      21: aload_0
      22: getfield      #22                 // Field blizzards:Ljava/util/Map;
      25: aload_2
      26: getfield      #22                 // Field blizzards:Ljava/util/Map;
      29: invokestatic  #91                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      32: ifne          37
      35: iconst_0
      36: ireturn
      37: aload_0
      38: getfield      #26                 // Field maxY:I
      41: aload_2
      42: getfield      #26                 // Field maxY:I
      45: if_icmpeq     50
      48: iconst_0
      49: ireturn
      50: aload_0
      51: getfield      #29                 // Field maxX:I
      54: aload_2
      55: getfield      #29                 // Field maxX:I
      58: if_icmpeq     63
      61: iconst_0
      62: ireturn
      63: iconst_1
      64: ireturn
}

Compiled from "Day24.kt"
public final class Day24 {
  public Day24();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final Day24$Valley parse(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #24                 // class java/util/LinkedHashMap
       9: dup
      10: invokespecial #25                 // Method java/util/LinkedHashMap."<init>":()V
      13: checkcast     #27                 // class java/util/Map
      16: astore_2
      17: new           #29                 // class java/util/LinkedHashSet
      20: dup
      21: invokespecial #30                 // Method java/util/LinkedHashSet."<init>":()V
      24: checkcast     #32                 // class java/util/Set
      27: astore_3
      28: aload_1
      29: checkcast     #34                 // class java/lang/Iterable
      32: invokeinterface #38,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      37: astore        4
      39: iconst_0
      40: istore        5
      42: aload         4
      44: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      49: ifeq          288
      52: iload         5
      54: istore        6
      56: iload         5
      58: iconst_1
      59: iadd
      60: istore        5
      62: aload         4
      64: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      69: checkcast     #50                 // class java/lang/String
      72: astore        7
      74: iconst_0
      75: istore        8
      77: aload         7
      79: invokevirtual #54                 // Method java/lang/String.length:()I
      82: istore        9
      84: iload         8
      86: iload         9
      88: if_icmpge     42
      91: iload         8
      93: istore        10
      95: aload         7
      97: iload         8
      99: invokevirtual #58                 // Method java/lang/String.charAt:(I)C
     102: istore        11
     104: iload         11
     106: lookupswitch  { // 5
                    35: 156
                    60: 204
                    62: 177
                    94: 231
                   118: 258
               default: 282
          }
     156: aload_3
     157: new           #60                 // class Point
     160: dup
     161: iload         10
     163: iload         6
     165: invokespecial #63                 // Method Point."<init>":(II)V
     168: invokeinterface #67,  2           // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
     173: pop
     174: goto          282
     177: aload_2
     178: new           #60                 // class Point
     181: dup
     182: iload         10
     184: iload         6
     186: invokespecial #63                 // Method Point."<init>":(II)V
     189: getstatic     #73                 // Field Direction.Right:LDirection;
     192: invokestatic  #79                 // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     195: invokeinterface #83,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     200: pop
     201: goto          282
     204: aload_2
     205: new           #60                 // class Point
     208: dup
     209: iload         10
     211: iload         6
     213: invokespecial #63                 // Method Point."<init>":(II)V
     216: getstatic     #86                 // Field Direction.Left:LDirection;
     219: invokestatic  #79                 // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     222: invokeinterface #83,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     227: pop
     228: goto          282
     231: aload_2
     232: new           #60                 // class Point
     235: dup
     236: iload         10
     238: iload         6
     240: invokespecial #63                 // Method Point."<init>":(II)V
     243: getstatic     #89                 // Field Direction.Up:LDirection;
     246: invokestatic  #79                 // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     249: invokeinterface #83,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     254: pop
     255: goto          282
     258: aload_2
     259: new           #60                 // class Point
     262: dup
     263: iload         10
     265: iload         6
     267: invokespecial #63                 // Method Point."<init>":(II)V
     270: getstatic     #92                 // Field Direction.Down:LDirection;
     273: invokestatic  #79                 // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     276: invokeinterface #83,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     281: pop
     282: iinc          8, 1
     285: goto          84
     288: new           #94                 // class Day24$Valley
     291: dup
     292: aload_2
     293: aload_1
     294: invokeinterface #99,  1           // InterfaceMethod java/util/List.size:()I
     299: iconst_1
     300: isub
     301: aload_1
     302: iconst_0
     303: invokeinterface #103,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     308: checkcast     #50                 // class java/lang/String
     311: invokevirtual #54                 // Method java/lang/String.length:()I
     314: iconst_1
     315: isub
     316: invokespecial #106                // Method Day24$Valley."<init>":(Ljava/util/Map;II)V
     319: areturn

  public final Point nextPosition(Direction, Point, Day24$Valley);
    Code:
       0: aload_1
       1: ldc           #122                // String direction
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #124                // String position
       9: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_3
      13: ldc           #126                // String valley
      15: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      18: aload_1
      19: getstatic     #132                // Field Day24$WhenMappings.$EnumSwitchMapping$0:[I
      22: swap
      23: invokevirtual #135                // Method Direction.ordinal:()I
      26: iaload
      27: tableswitch   { // 1 to 4
                     1: 56
                     2: 68
                     3: 80
                     4: 92
               default: 104
          }
      56: new           #60                 // class Point
      59: dup
      60: iconst_0
      61: iconst_m1
      62: invokespecial #63                 // Method Point."<init>":(II)V
      65: goto          112
      68: new           #60                 // class Point
      71: dup
      72: iconst_0
      73: iconst_1
      74: invokespecial #63                 // Method Point."<init>":(II)V
      77: goto          112
      80: new           #60                 // class Point
      83: dup
      84: iconst_m1
      85: iconst_0
      86: invokespecial #63                 // Method Point."<init>":(II)V
      89: goto          112
      92: new           #60                 // class Point
      95: dup
      96: iconst_1
      97: iconst_0
      98: invokespecial #63                 // Method Point."<init>":(II)V
     101: goto          112
     104: new           #137                // class kotlin/NoWhenBranchMatchedException
     107: dup
     108: invokespecial #138                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     111: athrow
     112: astore        4
     114: aload_2
     115: aload         4
     117: invokevirtual #142                // Method Point.sum:(LPoint;)LPoint;
     120: astore        5
     122: aload         5
     124: invokevirtual #145                // Method Point.getX:()I
     127: ifgt          149
     130: new           #60                 // class Point
     133: dup
     134: aload_3
     135: invokevirtual #148                // Method Day24$Valley.getMaxX:()I
     138: iconst_1
     139: isub
     140: aload         5
     142: invokevirtual #151                // Method Point.getY:()I
     145: invokespecial #63                 // Method Point."<init>":(II)V
     148: areturn
     149: aload         5
     151: invokevirtual #145                // Method Point.getX:()I
     154: aload_3
     155: invokevirtual #148                // Method Day24$Valley.getMaxX:()I
     158: if_icmplt     175
     161: new           #60                 // class Point
     164: dup
     165: iconst_1
     166: aload         5
     168: invokevirtual #151                // Method Point.getY:()I
     171: invokespecial #63                 // Method Point."<init>":(II)V
     174: areturn
     175: aload         5
     177: invokevirtual #151                // Method Point.getY:()I
     180: ifgt          202
     183: new           #60                 // class Point
     186: dup
     187: aload         5
     189: invokevirtual #145                // Method Point.getX:()I
     192: aload_3
     193: invokevirtual #154                // Method Day24$Valley.getMaxY:()I
     196: iconst_1
     197: isub
     198: invokespecial #63                 // Method Point."<init>":(II)V
     201: areturn
     202: aload         5
     204: invokevirtual #151                // Method Point.getY:()I
     207: aload_3
     208: invokevirtual #154                // Method Day24$Valley.getMaxY:()I
     211: if_icmplt     228
     214: new           #60                 // class Point
     217: dup
     218: aload         5
     220: invokevirtual #145                // Method Point.getX:()I
     223: iconst_1
     224: invokespecial #63                 // Method Point."<init>":(II)V
     227: areturn
     228: aload         5
     230: areturn

  public final void print(Day24$Valley);
    Code:
       0: aload_1
       1: ldc           #126                // String valley
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: iconst_0
       7: istore_2
       8: aload_1
       9: invokevirtual #154                // Method Day24$Valley.getMaxY:()I
      12: istore_3
      13: iload_2
      14: iload_3
      15: if_icmpgt     315
      18: iconst_0
      19: istore        4
      21: aload_1
      22: invokevirtual #148                // Method Day24$Valley.getMaxX:()I
      25: istore        5
      27: iload         4
      29: iload         5
      31: if_icmpgt     298
      34: new           #60                 // class Point
      37: dup
      38: iload         4
      40: iload_2
      41: invokespecial #63                 // Method Point."<init>":(II)V
      44: astore        6
      46: iload         4
      48: ifeq          72
      51: iload         4
      53: aload_1
      54: invokevirtual #148                // Method Day24$Valley.getMaxX:()I
      57: if_icmpeq     72
      60: iload_2
      61: ifeq          72
      64: iload_2
      65: aload_1
      66: invokevirtual #154                // Method Day24$Valley.getMaxY:()I
      69: if_icmpne     87
      72: bipush        35
      74: istore        7
      76: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
      79: iload         7
      81: invokevirtual #171                // Method java/io/PrintStream.print:(C)V
      84: goto          285
      87: aload_1
      88: invokevirtual #175                // Method Day24$Valley.getBlizzards:()Ljava/util/Map;
      91: invokeinterface #179,  1          // InterfaceMethod java/util/Map.keySet:()Ljava/util/Set;
      96: aload         6
      98: invokeinterface #182,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     103: ifne          121
     106: bipush        46
     108: istore        7
     110: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     113: iload         7
     115: invokevirtual #171                // Method java/io/PrintStream.print:(C)V
     118: goto          285
     121: aload_1
     122: invokevirtual #175                // Method Day24$Valley.getBlizzards:()Ljava/util/Map;
     125: aload         6
     127: invokeinterface #185,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     132: dup
     133: invokestatic  #189                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     136: checkcast     #96                 // class java/util/List
     139: astore        7
     141: aload         7
     143: invokeinterface #99,  1           // InterfaceMethod java/util/List.size:()I
     148: iconst_1
     149: if_icmpne     268
     152: aload         7
     154: invokestatic  #193                // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
     157: checkcast     #69                 // class Direction
     160: getstatic     #132                // Field Day24$WhenMappings.$EnumSwitchMapping$0:[I
     163: swap
     164: invokevirtual #135                // Method Direction.ordinal:()I
     167: iaload
     168: tableswitch   { // 1 to 4
                     1: 200
                     2: 215
                     3: 230
                     4: 245
               default: 260
          }
     200: bipush        94
     202: istore        9
     204: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     207: iload         9
     209: invokevirtual #171                // Method java/io/PrintStream.print:(C)V
     212: goto          285
     215: bipush        118
     217: istore        9
     219: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     222: iload         9
     224: invokevirtual #171                // Method java/io/PrintStream.print:(C)V
     227: goto          285
     230: bipush        60
     232: istore        9
     234: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     237: iload         9
     239: invokevirtual #171                // Method java/io/PrintStream.print:(C)V
     242: goto          285
     245: bipush        62
     247: istore        9
     249: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     252: iload         9
     254: invokevirtual #171                // Method java/io/PrintStream.print:(C)V
     257: goto          285
     260: new           #137                // class kotlin/NoWhenBranchMatchedException
     263: dup
     264: invokespecial #138                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     267: athrow
     268: aload         7
     270: invokeinterface #99,  1           // InterfaceMethod java/util/List.size:()I
     275: istore        8
     277: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     280: iload         8
     282: invokevirtual #196                // Method java/io/PrintStream.print:(I)V
     285: iload         4
     287: iload         5
     289: if_icmpeq     298
     292: iinc          4, 1
     295: goto          34
     298: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     301: invokevirtual #199                // Method java/io/PrintStream.println:()V
     304: iload_2
     305: iload_3
     306: if_icmpeq     315
     309: iinc          2, 1
     312: goto          18
     315: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     318: invokevirtual #199                // Method java/io/PrintStream.println:()V
     321: return

  public final Day24$Valley next(Day24$Valley);
    Code:
       0: aload_1
       1: ldc           #126                // String valley
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: invokevirtual #175                // Method Day24$Valley.getBlizzards:()Ljava/util/Map;
      10: astore_3
      11: iconst_0
      12: istore        4
      14: aload_3
      15: astore        5
      17: new           #204                // class java/util/ArrayList
      20: dup
      21: invokespecial #205                // Method java/util/ArrayList."<init>":()V
      24: checkcast     #207                // class java/util/Collection
      27: astore        6
      29: iconst_0
      30: istore        7
      32: aload         5
      34: invokeinterface #210,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
      39: invokeinterface #211,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
      44: astore        8
      46: aload         8
      48: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      53: ifeq          215
      56: aload         8
      58: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      63: checkcast     #213                // class java/util/Map$Entry
      66: astore        9
      68: aload         9
      70: astore        10
      72: iconst_0
      73: istore        11
      75: aload         10
      77: invokeinterface #216,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
      82: checkcast     #34                 // class java/lang/Iterable
      85: astore        12
      87: iconst_0
      88: istore        13
      90: aload         12
      92: astore        14
      94: new           #204                // class java/util/ArrayList
      97: dup
      98: aload         12
     100: bipush        10
     102: invokestatic  #220                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     105: invokespecial #222                // Method java/util/ArrayList."<init>":(I)V
     108: checkcast     #207                // class java/util/Collection
     111: astore        15
     113: iconst_0
     114: istore        16
     116: aload         14
     118: invokeinterface #38,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     123: astore        17
     125: aload         17
     127: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     132: ifeq          192
     135: aload         17
     137: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     142: astore        18
     144: aload         15
     146: aload         18
     148: checkcast     #69                 // class Direction
     151: astore        19
     153: astore        20
     155: iconst_0
     156: istore        21
     158: aload_0
     159: aload         19
     161: aload         10
     163: invokeinterface #225,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     168: checkcast     #60                 // class Point
     171: aload_1
     172: invokevirtual #227                // Method nextPosition:(LDirection;LPoint;LDay24$Valley;)LPoint;
     175: aload         19
     177: invokestatic  #233                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     180: aload         20
     182: swap
     183: invokeinterface #234,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     188: pop
     189: goto          125
     192: aload         15
     194: checkcast     #96                 // class java/util/List
     197: nop
     198: checkcast     #34                 // class java/lang/Iterable
     201: nop
     202: astore        10
     204: aload         6
     206: aload         10
     208: invokestatic  #238                // Method kotlin/collections/CollectionsKt.addAll:(Ljava/util/Collection;Ljava/lang/Iterable;)Z
     211: pop
     212: goto          46
     215: aload         6
     217: checkcast     #96                 // class java/util/List
     220: nop
     221: checkcast     #34                 // class java/lang/Iterable
     224: astore_3
     225: nop
     226: iconst_0
     227: istore        4
     229: aload_3
     230: astore        5
     232: new           #24                 // class java/util/LinkedHashMap
     235: dup
     236: invokespecial #25                 // Method java/util/LinkedHashMap."<init>":()V
     239: checkcast     #27                 // class java/util/Map
     242: astore        6
     244: iconst_0
     245: istore        7
     247: aload         5
     249: invokeinterface #38,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     254: astore        8
     256: aload         8
     258: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     263: ifeq          392
     266: aload         8
     268: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     273: astore        9
     275: aload         9
     277: checkcast     #240                // class kotlin/Pair
     280: astore        10
     282: iconst_0
     283: istore        11
     285: aload         10
     287: invokevirtual #243                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     290: checkcast     #60                 // class Point
     293: astore        12
     295: aload         6
     297: astore        13
     299: iconst_0
     300: istore        14
     302: aload         13
     304: aload         12
     306: invokeinterface #185,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     311: astore        15
     313: aload         15
     315: ifnonnull     350
     318: iconst_0
     319: istore        16
     321: new           #204                // class java/util/ArrayList
     324: dup
     325: invokespecial #205                // Method java/util/ArrayList."<init>":()V
     328: checkcast     #96                 // class java/util/List
     331: astore        16
     333: aload         13
     335: aload         12
     337: aload         16
     339: invokeinterface #83,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     344: pop
     345: aload         16
     347: goto          352
     350: aload         15
     352: nop
     353: checkcast     #96                 // class java/util/List
     356: astore        10
     358: aload         10
     360: aload         9
     362: checkcast     #240                // class kotlin/Pair
     365: astore        11
     367: astore        22
     369: iconst_0
     370: istore        17
     372: aload         11
     374: invokevirtual #246                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     377: checkcast     #69                 // class Direction
     380: aload         22
     382: swap
     383: invokeinterface #247,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     388: pop
     389: goto          256
     392: aload         6
     394: nop
     395: astore_2
     396: new           #94                 // class Day24$Valley
     399: dup
     400: aload_2
     401: aload_1
     402: invokevirtual #154                // Method Day24$Valley.getMaxY:()I
     405: aload_1
     406: invokevirtual #148                // Method Day24$Valley.getMaxX:()I
     409: invokespecial #106                // Method Day24$Valley."<init>":(Ljava/util/Map;II)V
     412: astore_3
     413: aload_3
     414: areturn

  public final java.util.Set<Point> getAvailableMoves(Point, Point, Point, Day24$Valley);
    Code:
       0: aload_1
       1: ldc_w         #285                // String current
       4: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_2
       8: ldc_w         #287                // String start
      11: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      14: aload_3
      15: ldc_w         #289                // String target
      18: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      21: aload         4
      23: ldc           #126                // String valley
      25: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      28: iconst_5
      29: anewarray     #60                 // class Point
      32: astore        5
      34: aload         5
      36: iconst_0
      37: new           #60                 // class Point
      40: dup
      41: iconst_0
      42: iconst_0
      43: invokespecial #63                 // Method Point."<init>":(II)V
      46: aastore
      47: aload         5
      49: iconst_1
      50: new           #60                 // class Point
      53: dup
      54: iconst_0
      55: iconst_m1
      56: invokespecial #63                 // Method Point."<init>":(II)V
      59: aastore
      60: aload         5
      62: iconst_2
      63: new           #60                 // class Point
      66: dup
      67: iconst_0
      68: iconst_1
      69: invokespecial #63                 // Method Point."<init>":(II)V
      72: aastore
      73: aload         5
      75: iconst_3
      76: new           #60                 // class Point
      79: dup
      80: iconst_m1
      81: iconst_0
      82: invokespecial #63                 // Method Point."<init>":(II)V
      85: aastore
      86: aload         5
      88: iconst_4
      89: new           #60                 // class Point
      92: dup
      93: iconst_1
      94: iconst_0
      95: invokespecial #63                 // Method Point."<init>":(II)V
      98: aastore
      99: aload         5
     101: invokestatic  #292                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
     104: checkcast     #34                 // class java/lang/Iterable
     107: astore        5
     109: nop
     110: iconst_0
     111: istore        6
     113: aload         5
     115: astore        7
     117: new           #204                // class java/util/ArrayList
     120: dup
     121: aload         5
     123: bipush        10
     125: invokestatic  #220                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     128: invokespecial #222                // Method java/util/ArrayList."<init>":(I)V
     131: checkcast     #207                // class java/util/Collection
     134: astore        8
     136: iconst_0
     137: istore        9
     139: aload         7
     141: invokeinterface #38,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     146: astore        10
     148: aload         10
     150: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     155: ifeq          199
     158: aload         10
     160: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     165: astore        11
     167: aload         8
     169: aload         11
     171: checkcast     #60                 // class Point
     174: astore        12
     176: astore        14
     178: iconst_0
     179: istore        13
     181: aload         12
     183: aload_1
     184: invokevirtual #142                // Method Point.sum:(LPoint;)LPoint;
     187: aload         14
     189: swap
     190: invokeinterface #234,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     195: pop
     196: goto          148
     199: aload         8
     201: checkcast     #96                 // class java/util/List
     204: nop
     205: checkcast     #34                 // class java/lang/Iterable
     208: astore        5
     210: nop
     211: iconst_0
     212: istore        6
     214: aload         5
     216: astore        7
     218: new           #204                // class java/util/ArrayList
     221: dup
     222: invokespecial #205                // Method java/util/ArrayList."<init>":()V
     225: checkcast     #207                // class java/util/Collection
     228: astore        8
     230: iconst_0
     231: istore        9
     233: aload         7
     235: invokeinterface #38,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     240: astore        10
     242: aload         10
     244: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     249: ifeq          352
     252: aload         10
     254: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     259: astore        11
     261: aload         11
     263: checkcast     #60                 // class Point
     266: astore        12
     268: iconst_0
     269: istore        13
     271: aload         12
     273: invokevirtual #145                // Method Point.getX:()I
     276: ifle          313
     279: aload         12
     281: invokevirtual #145                // Method Point.getX:()I
     284: aload         4
     286: invokevirtual #148                // Method Day24$Valley.getMaxX:()I
     289: if_icmpge     313
     292: aload         12
     294: invokevirtual #151                // Method Point.getY:()I
     297: ifle          313
     300: aload         12
     302: invokevirtual #151                // Method Point.getY:()I
     305: aload         4
     307: invokevirtual #154                // Method Day24$Valley.getMaxY:()I
     310: if_icmplt     331
     313: aload         12
     315: aload_3
     316: invokestatic  #296                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     319: ifne          331
     322: aload         12
     324: aload_2
     325: invokestatic  #296                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     328: ifeq          335
     331: iconst_1
     332: goto          336
     335: iconst_0
     336: ifeq          242
     339: aload         8
     341: aload         11
     343: invokeinterface #234,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     348: pop
     349: goto          242
     352: aload         8
     354: checkcast     #96                 // class java/util/List
     357: nop
     358: checkcast     #34                 // class java/lang/Iterable
     361: astore        5
     363: nop
     364: iconst_0
     365: istore        6
     367: aload         5
     369: astore        7
     371: new           #204                // class java/util/ArrayList
     374: dup
     375: invokespecial #205                // Method java/util/ArrayList."<init>":()V
     378: checkcast     #207                // class java/util/Collection
     381: astore        8
     383: iconst_0
     384: istore        9
     386: aload         7
     388: invokeinterface #38,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     393: astore        10
     395: aload         10
     397: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     402: ifeq          460
     405: aload         10
     407: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     412: astore        11
     414: aload         11
     416: checkcast     #60                 // class Point
     419: astore        12
     421: iconst_0
     422: istore        13
     424: aload         4
     426: invokevirtual #175                // Method Day24$Valley.getBlizzards:()Ljava/util/Map;
     429: aload         12
     431: invokeinterface #299,  2          // InterfaceMethod java/util/Map.containsKey:(Ljava/lang/Object;)Z
     436: ifne          443
     439: iconst_1
     440: goto          444
     443: iconst_0
     444: ifeq          395
     447: aload         8
     449: aload         11
     451: invokeinterface #234,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     456: pop
     457: goto          395
     460: aload         8
     462: checkcast     #96                 // class java/util/List
     465: nop
     466: checkcast     #34                 // class java/lang/Iterable
     469: invokestatic  #303                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     472: areturn

  public final kotlin.Pair<java.lang.Integer, Day24$Valley> search(Point, Point, Day24$Valley);
    Code:
       0: aload_1
       1: ldc_w         #287                // String start
       4: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_2
       8: ldc_w         #289                // String target
      11: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      14: aload_3
      15: ldc_w         #316                // String initValleyState
      18: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      21: iconst_1
      22: anewarray     #94                 // class Day24$Valley
      25: astore        5
      27: aload         5
      29: iconst_0
      30: aload_3
      31: aastore
      32: aload         5
      34: invokestatic  #319                // Method kotlin/collections/CollectionsKt.mutableListOf:([Ljava/lang/Object;)Ljava/util/List;
      37: astore        4
      39: aload_0
      40: aload_3
      41: invokevirtual #321                // Method print:(LDay24$Valley;)V
      44: new           #323                // class kotlin/collections/ArrayDeque
      47: dup
      48: invokespecial #324                // Method kotlin/collections/ArrayDeque."<init>":()V
      51: astore        5
      53: new           #29                 // class java/util/LinkedHashSet
      56: dup
      57: invokespecial #30                 // Method java/util/LinkedHashSet."<init>":()V
      60: checkcast     #32                 // class java/util/Set
      63: astore        6
      65: new           #326                // class Day24$Moment
      68: dup
      69: aload_1
      70: iconst_0
      71: invokespecial #329                // Method Day24$Moment."<init>":(LPoint;I)V
      74: astore        7
      76: aload         5
      78: aload         7
      80: invokevirtual #332                // Method kotlin/collections/ArrayDeque.addLast:(Ljava/lang/Object;)V
      83: aload         6
      85: aload         7
      87: invokeinterface #67,  2           // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
      92: pop
      93: aload         5
      95: checkcast     #207                // class java/util/Collection
      98: invokeinterface #335,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     103: ifne          110
     106: iconst_1
     107: goto          111
     110: iconst_0
     111: ifeq          303
     114: aload         5
     116: invokevirtual #338                // Method kotlin/collections/ArrayDeque.removeFirst:()Ljava/lang/Object;
     119: checkcast     #326                // class Day24$Moment
     122: astore        8
     124: aload         8
     126: invokevirtual #341                // Method Day24$Moment.getMinutesSpent:()I
     129: iconst_1
     130: iadd
     131: istore        9
     133: aload         4
     135: invokeinterface #99,  1           // InterfaceMethod java/util/List.size:()I
     140: iload         9
     142: if_icmple     160
     145: aload         4
     147: iload         9
     149: invokeinterface #103,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     154: checkcast     #94                 // class Day24$Valley
     157: goto          188
     160: aload         4
     162: aload_0
     163: aload         4
     165: invokestatic  #344                // Method kotlin/collections/CollectionsKt.last:(Ljava/util/List;)Ljava/lang/Object;
     168: checkcast     #94                 // class Day24$Valley
     171: invokevirtual #346                // Method next:(LDay24$Valley;)LDay24$Valley;
     174: invokeinterface #247,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     179: pop
     180: aload         4
     182: invokestatic  #344                // Method kotlin/collections/CollectionsKt.last:(Ljava/util/List;)Ljava/lang/Object;
     185: checkcast     #94                 // class Day24$Valley
     188: astore        10
     190: aload_0
     191: aload         8
     193: invokevirtual #350                // Method Day24$Moment.getExpedition:()LPoint;
     196: aload_1
     197: aload_2
     198: aload         10
     200: invokevirtual #352                // Method getAvailableMoves:(LPoint;LPoint;LPoint;LDay24$Valley;)Ljava/util/Set;
     203: astore        11
     205: aload         11
     207: aload_2
     208: invokeinterface #182,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     213: ifeq          227
     216: iload         9
     218: invokestatic  #358                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     221: aload         10
     223: invokestatic  #233                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     226: areturn
     227: aload         11
     229: invokeinterface #211,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
     234: astore        12
     236: aload         12
     238: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     243: ifeq          93
     246: aload         12
     248: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     253: checkcast     #60                 // class Point
     256: astore        13
     258: new           #326                // class Day24$Moment
     261: dup
     262: aload         13
     264: iload         9
     266: invokespecial #329                // Method Day24$Moment."<init>":(LPoint;I)V
     269: astore        14
     271: aload         6
     273: aload         14
     275: invokeinterface #182,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     280: ifne          236
     283: aload         6
     285: aload         14
     287: invokeinterface #67,  2           // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
     292: pop
     293: aload         5
     295: aload         14
     297: invokevirtual #332                // Method kotlin/collections/ArrayDeque.addLast:(Ljava/lang/Object;)V
     300: goto          236
     303: iconst_m1
     304: invokestatic  #358                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     307: aload_3
     308: invokestatic  #233                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     311: areturn

  public final java.lang.String part1(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: aload_1
       8: invokevirtual #375                // Method parse:(Ljava/util/List;)LDay24$Valley;
      11: astore_2
      12: new           #60                 // class Point
      15: dup
      16: iconst_1
      17: iconst_0
      18: invokespecial #63                 // Method Point."<init>":(II)V
      21: astore_3
      22: new           #60                 // class Point
      25: dup
      26: aload_2
      27: invokevirtual #148                // Method Day24$Valley.getMaxX:()I
      30: iconst_1
      31: isub
      32: aload_2
      33: invokevirtual #154                // Method Day24$Valley.getMaxY:()I
      36: invokespecial #63                 // Method Point."<init>":(II)V
      39: astore        4
      41: aload_0
      42: aload_3
      43: aload         4
      45: aload_2
      46: invokevirtual #377                // Method search:(LPoint;LPoint;LDay24$Valley;)Lkotlin/Pair;
      49: invokevirtual #243                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      52: checkcast     #379                // class java/lang/Number
      55: invokevirtual #382                // Method java/lang/Number.intValue:()I
      58: istore        5
      60: iload         5
      62: invokestatic  #385                // Method java/lang/String.valueOf:(I)Ljava/lang/String;
      65: areturn

  public final java.lang.String part2(java.util.List<java.lang.String>);
    Code:
       0: aload_1
       1: ldc           #16                 // String input
       3: invokestatic  #22                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: aload_1
       8: invokevirtual #375                // Method parse:(Ljava/util/List;)LDay24$Valley;
      11: astore_2
      12: new           #60                 // class Point
      15: dup
      16: iconst_1
      17: iconst_0
      18: invokespecial #63                 // Method Point."<init>":(II)V
      21: astore_3
      22: new           #60                 // class Point
      25: dup
      26: aload_2
      27: invokevirtual #148                // Method Day24$Valley.getMaxX:()I
      30: iconst_1
      31: isub
      32: aload_2
      33: invokevirtual #154                // Method Day24$Valley.getMaxY:()I
      36: invokespecial #63                 // Method Point."<init>":(II)V
      39: astore        4
      41: aload_0
      42: aload_3
      43: aload         4
      45: aload_2
      46: invokevirtual #377                // Method search:(LPoint;LPoint;LDay24$Valley;)Lkotlin/Pair;
      49: astore        5
      51: aload         5
      53: invokevirtual #243                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
      56: checkcast     #379                // class java/lang/Number
      59: invokevirtual #382                // Method java/lang/Number.intValue:()I
      62: istore        6
      64: new           #389                // class java/lang/StringBuilder
      67: dup
      68: invokespecial #390                // Method java/lang/StringBuilder."<init>":()V
      71: ldc_w         #392                // String R1
      74: invokevirtual #396                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      77: iload         6
      79: invokevirtual #399                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      82: invokevirtual #403                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      85: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
      88: swap
      89: invokevirtual #405                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      92: aload_0
      93: aload         4
      95: aload_3
      96: aload         5
      98: invokevirtual #246                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     101: checkcast     #94                 // class Day24$Valley
     104: invokevirtual #377                // Method search:(LPoint;LPoint;LDay24$Valley;)Lkotlin/Pair;
     107: astore        7
     109: aload         7
     111: invokevirtual #243                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     114: checkcast     #379                // class java/lang/Number
     117: invokevirtual #382                // Method java/lang/Number.intValue:()I
     120: istore        8
     122: new           #389                // class java/lang/StringBuilder
     125: dup
     126: invokespecial #390                // Method java/lang/StringBuilder."<init>":()V
     129: ldc_w         #407                // String R2
     132: invokevirtual #396                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     135: iload         8
     137: invokevirtual #399                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     140: invokevirtual #403                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     143: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     146: swap
     147: invokevirtual #405                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     150: aload_0
     151: aload_3
     152: aload         4
     154: aload         7
     156: invokevirtual #246                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     159: checkcast     #94                 // class Day24$Valley
     162: invokevirtual #377                // Method search:(LPoint;LPoint;LDay24$Valley;)Lkotlin/Pair;
     165: astore        9
     167: aload         9
     169: invokevirtual #243                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     172: checkcast     #379                // class java/lang/Number
     175: invokevirtual #382                // Method java/lang/Number.intValue:()I
     178: istore        10
     180: new           #389                // class java/lang/StringBuilder
     183: dup
     184: invokespecial #390                // Method java/lang/StringBuilder."<init>":()V
     187: ldc_w         #409                // String R3
     190: invokevirtual #396                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     193: iload         10
     195: invokevirtual #399                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     198: invokevirtual #403                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     201: getstatic     #166                // Field java/lang/System.out:Ljava/io/PrintStream;
     204: swap
     205: invokevirtual #405                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     208: iload         6
     210: iload         8
     212: iadd
     213: iload         10
     215: iadd
     216: invokestatic  #385                // Method java/lang/String.valueOf:(I)Ljava/lang/String;
     219: areturn
}