fun main() {
    val testInput = readInput("Day22_test")
    val testMap = testInput.subList(0, testInput.size - 2).toMap()
    val testPath = testInput.last().parsePath()
    check(part1(testMap, testPath) == 6032)
    check(part2(testMap, testMap.buildTestCubeAdjacentMap(), testPath) == 5031)

    val input = readInput("Day22")
    val map = input.subList(0, input.size - 2).toMap()
    val path = input.last().parsePath()
    println(part1(map, path))
    println(part2(map, map.buildCubeAdjacentMap(), path))
}

private const val VOID = 0
private const val OPEN = 1
private const val WALL = 2

private const val RIGHT = 0
private const val DOWN = 1
private const val LEFT = 2
private const val UP = 3

private fun part1(map: Matrix, path: List<PathItem>): Int {
    val adjacentMap = map.buildAdjacentMap()
    return solve(map, adjacentMap, path)
}

private fun part2(map: Matrix, adjacentMap: Int3DMatrix, path: List<PathItem>): Int = solve(map, adjacentMap, path)

private fun solve(map: Matrix, adjacentMap: Int3DMatrix, path: List<PathItem>): Int {
    // "You begin the path in the leftmost open tile of the top row of tiles."
    val position = MutableIJ(
        i = 0,
        j = map[0].indexOfFirst { it == OPEN }
    )
    var rotation = RIGHT

    path.forEach { pathItem ->
        when (pathItem) {
            is PathItem.Move -> {
                for (k in 1..pathItem.stepsCount) {
                    val i = adjacentMap[position.i][position.j][rotation * 3]
                    val j = adjacentMap[position.i][position.j][rotation * 3 + 1]

                    if (map[i][j] == WALL) {
                        break
                    }

                    rotation = adjacentMap[position.i][position.j][rotation * 3 + 2]
                    position.i = i
                    position.j = j
                }
            }
            PathItem.RotationLeft -> rotation = if (rotation == RIGHT) UP else rotation - 1
            PathItem.RotationRight -> rotation = if (rotation == UP) RIGHT else rotation + 1
        }
    }

    return 1_000 * (position.i + 1) + 4 * (position.j + 1) + rotation
}

private fun List<String>.toMap(): Matrix {
    val iSize = this.size
    val jSize = this.maxOf { it.length }

    val result = Array(iSize) { i ->
        IntArray(jSize) { j ->
            when (this[i].getOrNull(j)) {
                '.' -> OPEN
                '#' -> WALL
                else -> VOID
            }
        }
    }

    return result
}

private fun Matrix.buildAdjacentMap(): Int3DMatrix {
    return Array(this.size) { i ->
        Array(this[i].size) { j ->
            if (this[i][j] != VOID) {
                var jRight = (j + 1) % this[i].size
                while (this[i][jRight] == VOID) {
                    jRight = (jRight + 1) % this[i].size
                }

                var iDown = (i + 1) % this.size
                while (this[iDown][j] == VOID) {
                    iDown = (iDown + 1) % this.size
                }

                var jLeft = if (j > 0) (j - 1) else this[i].lastIndex
                while (this[i][jLeft] == VOID) {
                    jLeft = if (jLeft > 0) (jLeft - 1) else this[i].lastIndex
                }

                var iUp = if (i > 0) (i - 1) else this.lastIndex
                while (this[iUp][j] == VOID) {
                    iUp = if (iUp > 0) (iUp - 1) else this.lastIndex
                }

                intArrayOf(
                    i, jRight, RIGHT,
                    iDown, j, DOWN,
                    i, jLeft, LEFT,
                    iUp, j, UP
                )
            } else {
                intArrayOf()
            }
        }
    }
}

private fun Matrix.buildCubeAdjacentMap(): Int3DMatrix {
    val result = Array(this.size) { i ->
        Array(this[i].size) { j ->
            if (this[i][j] != VOID) {
                intArrayOf(
                    i, j + 1, RIGHT,
                    i + 1, j, DOWN,
                    i, j - 1, LEFT,
                    i - 1, j, UP
                )
            } else {
                intArrayOf()
            }
        }
    }

    val cubeSize = this.size / 4

    //Link cube edges
    /*
    22221111
    22221111
    22221111
    22221111
    3333
    3333
    3333
    3333
55554444
55554444
55554444
55554444
6666
6666
6666
6666
     */

    //Link 1 <-> 3 edges
    repeat(cubeSize) { delta ->
        result[cubeSize - 1][2 * cubeSize + delta][3 * DOWN] = cubeSize + delta
        result[cubeSize - 1][2 * cubeSize + delta][3 * DOWN + 1] = 2 * cubeSize - 1
        result[cubeSize - 1][2 * cubeSize + delta][3 * DOWN + 2] = LEFT

        result[cubeSize + delta][2 * cubeSize - 1][3 * RIGHT] = cubeSize - 1
        result[cubeSize + delta][2 * cubeSize - 1][3 * RIGHT + 1] = 2 * cubeSize + delta
        result[cubeSize + delta][2 * cubeSize - 1][3 * RIGHT + 2] = UP
    }

    //Link  1 <-> 4 edges
    repeat(cubeSize) { delta ->
        result[cubeSize - delta - 1][3 * cubeSize - 1][3 * RIGHT] = 2 * cubeSize + delta
        result[cubeSize - delta - 1][3 * cubeSize - 1][3 * RIGHT + 1] = 2 * cubeSize - 1
        result[cubeSize - delta - 1][3 * cubeSize - 1][3 * RIGHT + 2] = LEFT

        result[2 * cubeSize + delta][2 * cubeSize - 1][3 * RIGHT] = cubeSize - delta - 1
        result[2 * cubeSize + delta][2 * cubeSize - 1][3 * RIGHT + 1] = 3 * cubeSize - 1
        result[2 * cubeSize + delta][2 * cubeSize - 1][3 * RIGHT + 2] = LEFT
    }

    //Link 1 <-> 6 edges
    repeat(cubeSize) { delta ->
        result[0][2 * cubeSize + delta][3 * UP] = 4 * cubeSize - 1
        result[0][2 * cubeSize + delta][3 * UP + 1] = delta
        result[0][2 * cubeSize + delta][3 * UP + 2] = UP

        result[4 * cubeSize - 1][delta][3 * DOWN] = 0
        result[4 * cubeSize - 1][delta][3 * DOWN + 1] = 2 * cubeSize + delta
        result[4 * cubeSize - 1][delta][3 * DOWN + 2] = DOWN
    }

    //Link 2 <-> 5 edges
    repeat(cubeSize) { delta ->
        result[cubeSize - delta - 1][cubeSize][3 * LEFT] = 2 * cubeSize + delta
        result[cubeSize - delta - 1][cubeSize][3 * LEFT + 1] = 0
        result[cubeSize - delta - 1][cubeSize][3 * LEFT + 2] = RIGHT

        result[2 * cubeSize + delta][0][3 * LEFT] = cubeSize - delta - 1
        result[2 * cubeSize + delta][0][3 * LEFT + 1] = cubeSize
        result[2 * cubeSize + delta][0][3 * LEFT + 2] = RIGHT
    }

    //Link 2 <-> 6 edges
    repeat(cubeSize) { delta ->
        result[0][cubeSize + delta][3 * UP] = 3 * cubeSize + delta
        result[0][cubeSize + delta][3 * UP + 1] = 0
        result[0][cubeSize + delta][3 * UP + 2] = RIGHT

        result[3 * cubeSize + delta][0][3 * LEFT] = 0
        result[3 * cubeSize + delta][0][3 * LEFT + 1] = cubeSize + delta
        result[3 * cubeSize + delta][0][3 * LEFT + 2] = DOWN
    }

    //Link 3 <-> 5 edges
    repeat(cubeSize) { delta ->
        result[2 * cubeSize - delta - 1][cubeSize][3 * LEFT] = 2 * cubeSize
        result[2 * cubeSize - delta - 1][cubeSize][3 * LEFT + 1] = cubeSize - delta - 1
        result[2 * cubeSize - delta - 1][cubeSize][3 * LEFT + 2] = DOWN

        result[2 * cubeSize][cubeSize - delta - 1][3 * UP] = 2 * cubeSize - delta - 1
        result[2 * cubeSize][cubeSize - delta - 1][3 * UP + 1] = cubeSize
        result[2 * cubeSize][cubeSize - delta - 1][3 * UP + 2] = RIGHT
    }

    //Link 4 <-> 6 edges
    repeat(cubeSize) { delta ->
        result[3 * cubeSize - 1][cubeSize + delta][3 * DOWN] = 3 * cubeSize + delta
        result[3 * cubeSize - 1][cubeSize + delta][3 * DOWN + 1] = cubeSize - 1
        result[3 * cubeSize - 1][cubeSize + delta][3 * DOWN + 2] = LEFT

        result[3 * cubeSize + delta][cubeSize - 1][3 * RIGHT] = 3 * cubeSize - 1
        result[3 * cubeSize + delta][cubeSize - 1][3 * RIGHT + 1] = cubeSize + delta
        result[3 * cubeSize + delta][cubeSize - 1][3 * RIGHT + 2] = UP
    }

    return result
}

private fun Matrix.buildTestCubeAdjacentMap(): Int3DMatrix {
    val result = Array(this.size) { i ->
        Array(this[i].size) { j ->
            if (this[i][j] != VOID) {
                intArrayOf(
                    i, j + 1, RIGHT,
                    i + 1, j, DOWN,
                    i, j - 1, LEFT,
                    i - 1, j, UP
                )
            } else {
                intArrayOf()
            }
        }
    }

    val cubeSize = this.size / 3
    val leftTop = cubeSize * 2

    //Link cube edges
    /*
        1111
        1111
        1111
        1111
222233334444
222233334444
222233334444
222233334444
        55556666
        55556666
        55556666
        55556666
     */

    //Link 1 <-> 2
    repeat(cubeSize) { delta ->
        result[0][leftTop + delta][3 * UP] = cubeSize
        result[0][leftTop + delta][3 * UP + 1] = cubeSize - delta - 1
        result[0][leftTop + delta][3 * UP + 2] = DOWN

        result[cubeSize][cubeSize - delta - 1][3 * UP] = 0
        result[cubeSize][cubeSize - delta - 1][3 * UP + 1] = leftTop + delta
        result[cubeSize][cubeSize - delta - 1][3 * UP + 2] = DOWN
    }
    //Link 1 <-> 3
    repeat(cubeSize) { delta ->
        result[delta][leftTop][3 * LEFT] = cubeSize
        result[delta][leftTop][3 * LEFT + 1] = cubeSize + delta
        result[delta][leftTop][3 * LEFT + 2] = DOWN

        result[cubeSize][cubeSize + delta][3 * UP] = delta
        result[cubeSize][cubeSize + delta][3 * UP + 1] = leftTop
        result[cubeSize][cubeSize + delta][3 * UP + 2] = RIGHT
    }
    //Link 1 <-> 6
    repeat(cubeSize) { delta ->
        result[delta][3 * cubeSize - 1][3 * RIGHT] = 3 * cubeSize - delta - 1
        result[delta][3 * cubeSize - 1][3 * RIGHT + 1] = 4 * cubeSize - 1
        result[delta][3 * cubeSize - 1][3 * RIGHT + 2] = LEFT

        result[3 * cubeSize - delta - 1][4 * cubeSize - 1][3 * RIGHT] = delta
        result[3 * cubeSize - delta - 1][4 * cubeSize - 1][3 * RIGHT + 1] = 3 * cubeSize - 1
        result[3 * cubeSize - delta - 1][4 * cubeSize - 1][3 * RIGHT + 2] = LEFT
    }

    //Link 2 <-> 5
    repeat(cubeSize) { delta ->
        result[2 * cubeSize - 1][delta][3 * DOWN] = 3 * cubeSize - 1
        result[2 * cubeSize - 1][delta][3 * DOWN + 1] = 3 * cubeSize - delta - 1
        result[2 * cubeSize - 1][delta][3 * DOWN + 2] = UP

        result[3 * cubeSize - 1][3 * cubeSize - delta - 1][3 * DOWN] = 2 * cubeSize - 1
        result[3 * cubeSize - 1][3 * cubeSize - delta - 1][3 * DOWN + 1] = delta
        result[3 * cubeSize - 1][3 * cubeSize - delta - 1][3 * DOWN + 2] = UP
    }
    //Link 2 <-> 6
    repeat(cubeSize) { delta ->
        result[cubeSize + delta][0][3 * LEFT] = 3 * cubeSize - 1
        result[cubeSize + delta][0][3 * LEFT + 1] = 4 * cubeSize - delta - 1
        result[cubeSize + delta][0][3 * LEFT + 2] = UP

        result[3 * cubeSize - 1][4 * cubeSize - delta - 1][3 * DOWN] = cubeSize + delta
        result[3 * cubeSize - 1][4 * cubeSize - delta - 1][3 * DOWN + 1] = 0
        result[3 * cubeSize - 1][4 * cubeSize - delta - 1][3 * DOWN + 2] = RIGHT
    }

    //Link 3 <-> 5
    repeat(cubeSize) { delta ->
        result[2 * cubeSize - 1][2 * cubeSize - delta - 1][3 * DOWN] = 2 * cubeSize + delta
        result[2 * cubeSize - 1][2 * cubeSize - delta - 1][3 * DOWN + 1] = 2 * cubeSize
        result[2 * cubeSize - 1][2 * cubeSize - delta - 1][3 * DOWN + 2] = RIGHT

        result[2 * cubeSize + delta][2 * cubeSize][3 * LEFT] = 2 * cubeSize - 1
        result[2 * cubeSize + delta][2 * cubeSize][3 * LEFT + 1] = 2 * cubeSize - delta - 1
        result[2 * cubeSize + delta][2 * cubeSize][3 * LEFT + 2] = UP
    }

    //Link 4 <-> 6
    repeat(cubeSize) { delta ->
        result[2 * cubeSize - delta - 1][3 * cubeSize - 1][3 * RIGHT] = 2 * cubeSize
        result[2 * cubeSize - delta - 1][3 * cubeSize - 1][3 * RIGHT + 1] = 3 * cubeSize + delta
        result[2 * cubeSize - delta - 1][3 * cubeSize - 1][3 * RIGHT + 2] = DOWN

        result[2 * cubeSize][3 * cubeSize + delta][3 * UP] = 2 * cubeSize - delta - 1
        result[2 * cubeSize][3 * cubeSize + delta][3 * UP + 1] = 3 * cubeSize - 1
        result[2 * cubeSize][3 * cubeSize + delta][3 * UP + 2] = LEFT
    }

    return result
}

private val PATH_FORMAT = Regex("(R|L|\\d+)")
private fun String.parsePath(): List<PathItem> {
    return PATH_FORMAT.findAll(this)
        .map {
            when (it.value) {
                "R" -> PathItem.RotationRight
                "L" -> PathItem.RotationLeft
                else -> PathItem.Move(it.value.toInt())
            }
        }
        .toList()
}

private sealed interface PathItem {
    class Move(val stepsCount: Int) : PathItem
    object RotationRight : PathItem
    object RotationLeft : PathItem
}

Compiled from "Day22.kt"
public final class Day22Kt {
  private static final int VOID;

  private static final int OPEN;

  private static final int WALL;

  private static final int RIGHT;

  private static final int DOWN;

  private static final int LEFT;

  private static final int UP;

  private static final kotlin.text.Regex PATH_FORMAT;

  public static final void main();
    Code:
       0: ldc           #8                  // String Day22_test
       2: invokestatic  #14                 // Method UtilsKt.readInput:(Ljava/lang/String;)Ljava/util/List;
       5: astore_0
       6: aload_0
       7: iconst_0
       8: aload_0
       9: invokeinterface #20,  1           // InterfaceMethod java/util/List.size:()I
      14: iconst_2
      15: isub
      16: invokeinterface #24,  3           // InterfaceMethod java/util/List.subList:(II)Ljava/util/List;
      21: invokestatic  #28                 // Method toMap:(Ljava/util/List;)[[I
      24: astore_1
      25: aload_0
      26: invokestatic  #34                 // Method kotlin/collections/CollectionsKt.last:(Ljava/util/List;)Ljava/lang/Object;
      29: checkcast     #36                 // class java/lang/String
      32: invokestatic  #39                 // Method parsePath:(Ljava/lang/String;)Ljava/util/List;
      35: astore_2
      36: aload_1
      37: aload_2
      38: invokestatic  #43                 // Method part1:([[ILjava/util/List;)I
      41: sipush        6032
      44: if_icmpne     51
      47: iconst_1
      48: goto          52
      51: iconst_0
      52: ifne          65
      55: new           #45                 // class java/lang/IllegalStateException
      58: dup
      59: ldc           #47                 // String Check failed.
      61: invokespecial #51                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
      64: athrow
      65: aload_1
      66: aload_1
      67: invokestatic  #55                 // Method buildTestCubeAdjacentMap:([[I)[[[I
      70: aload_2
      71: invokestatic  #59                 // Method part2:([[I[[[ILjava/util/List;)I
      74: sipush        5031
      77: if_icmpne     84
      80: iconst_1
      81: goto          85
      84: iconst_0
      85: ifne          98
      88: new           #45                 // class java/lang/IllegalStateException
      91: dup
      92: ldc           #47                 // String Check failed.
      94: invokespecial #51                 // Method java/lang/IllegalStateException."<init>":(Ljava/lang/String;)V
      97: athrow
      98: ldc           #61                 // String Day22
     100: invokestatic  #14                 // Method UtilsKt.readInput:(Ljava/lang/String;)Ljava/util/List;
     103: astore_3
     104: aload_3
     105: iconst_0
     106: aload_3
     107: invokeinterface #20,  1           // InterfaceMethod java/util/List.size:()I
     112: iconst_2
     113: isub
     114: invokeinterface #24,  3           // InterfaceMethod java/util/List.subList:(II)Ljava/util/List;
     119: invokestatic  #28                 // Method toMap:(Ljava/util/List;)[[I
     122: astore        4
     124: aload_3
     125: invokestatic  #34                 // Method kotlin/collections/CollectionsKt.last:(Ljava/util/List;)Ljava/lang/Object;
     128: checkcast     #36                 // class java/lang/String
     131: invokestatic  #39                 // Method parsePath:(Ljava/lang/String;)Ljava/util/List;
     134: astore        5
     136: aload         4
     138: aload         5
     140: invokestatic  #43                 // Method part1:([[ILjava/util/List;)I
     143: istore        6
     145: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
     148: iload         6
     150: invokevirtual #73                 // Method java/io/PrintStream.println:(I)V
     153: aload         4
     155: aload         4
     157: invokestatic  #76                 // Method buildCubeAdjacentMap:([[I)[[[I
     160: aload         5
     162: invokestatic  #59                 // Method part2:([[I[[[ILjava/util/List;)I
     165: istore        6
     167: getstatic     #67                 // Field java/lang/System.out:Ljava/io/PrintStream;
     170: iload         6
     172: invokevirtual #73                 // Method java/io/PrintStream.println:(I)V
     175: return

  private static final int part1(int[][], java.util.List<? extends PathItem>);
    Code:
       0: aload_0
       1: invokestatic  #89                 // Method buildAdjacentMap:([[I)[[[I
       4: astore_2
       5: aload_0
       6: aload_2
       7: aload_1
       8: invokestatic  #92                 // Method solve:([[I[[[ILjava/util/List;)I
      11: ireturn

  private static final int part2(int[][], int[][][], java.util.List<? extends PathItem>);
    Code:
       0: aload_0
       1: aload_1
       2: aload_2
       3: invokestatic  #92                 // Method solve:([[I[[[ILjava/util/List;)I
       6: ireturn

  private static final int solve(int[][], int[][][], java.util.List<? extends PathItem>);
    Code:
       0: iconst_0
       1: aload_0
       2: iconst_0
       3: aaload
       4: astore        4
       6: istore        16
       8: iconst_0
       9: istore        5
      11: iconst_0
      12: istore        6
      14: aload         4
      16: arraylength
      17: istore        7
      19: iload         6
      21: iload         7
      23: if_icmpge     61
      26: aload         4
      28: iload         6
      30: iaload
      31: istore        8
      33: iconst_0
      34: istore        9
      36: iload         8
      38: iconst_1
      39: if_icmpne     46
      42: iconst_1
      43: goto          47
      46: iconst_0
      47: ifeq          55
      50: iload         6
      52: goto          62
      55: iinc          6, 1
      58: goto          19
      61: iconst_m1
      62: istore        17
      64: iload         16
      66: iload         17
      68: istore        18
      70: istore        19
      72: new           #97                 // class MutableIJ
      75: dup
      76: iload         19
      78: iload         18
      80: invokespecial #100                // Method MutableIJ."<init>":(II)V
      83: astore_3
      84: iconst_0
      85: istore        4
      87: aload_2
      88: checkcast     #102                // class java/lang/Iterable
      91: astore        5
      93: iconst_0
      94: istore        6
      96: aload         5
      98: invokeinterface #106,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     103: astore        7
     105: aload         7
     107: invokeinterface #112,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
     112: ifeq          335
     115: aload         7
     117: invokeinterface #116,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     122: astore        8
     124: aload         8
     126: checkcast     #118                // class PathItem
     129: astore        9
     131: iconst_0
     132: istore        10
     134: aload         9
     136: astore        11
     138: aload         11
     140: instanceof    #120                // class PathItem$Move
     143: ifeq          263
     146: iconst_1
     147: istore        12
     149: aload         9
     151: checkcast     #120                // class PathItem$Move
     154: invokevirtual #123                // Method PathItem$Move.getStepsCount:()I
     157: istore        13
     159: iload         12
     161: iload         13
     163: if_icmpgt     330
     166: aload_1
     167: aload_3
     168: invokevirtual #126                // Method MutableIJ.getI:()I
     171: aaload
     172: aload_3
     173: invokevirtual #129                // Method MutableIJ.getJ:()I
     176: aaload
     177: iload         4
     179: iconst_3
     180: imul
     181: iaload
     182: istore        14
     184: aload_1
     185: aload_3
     186: invokevirtual #126                // Method MutableIJ.getI:()I
     189: aaload
     190: aload_3
     191: invokevirtual #129                // Method MutableIJ.getJ:()I
     194: aaload
     195: iload         4
     197: iconst_3
     198: imul
     199: iconst_1
     200: iadd
     201: iaload
     202: istore        15
     204: aload_0
     205: iload         14
     207: aaload
     208: iload         15
     210: iaload
     211: iconst_2
     212: if_icmpne     218
     215: goto          330
     218: aload_1
     219: aload_3
     220: invokevirtual #126                // Method MutableIJ.getI:()I
     223: aaload
     224: aload_3
     225: invokevirtual #129                // Method MutableIJ.getJ:()I
     228: aaload
     229: iload         4
     231: iconst_3
     232: imul
     233: iconst_2
     234: iadd
     235: iaload
     236: istore        4
     238: aload_3
     239: iload         14
     241: invokevirtual #132                // Method MutableIJ.setI:(I)V
     244: aload_3
     245: iload         15
     247: invokevirtual #135                // Method MutableIJ.setJ:(I)V
     250: iload         12
     252: iload         13
     254: if_icmpeq     330
     257: iinc          12, 1
     260: goto          166
     263: aload         11
     265: getstatic     #141                // Field PathItem$RotationLeft.INSTANCE:LPathItem$RotationLeft;
     268: invokestatic  #147                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     271: ifeq          292
     274: iload         4
     276: ifne          283
     279: iconst_3
     280: goto          287
     283: iload         4
     285: iconst_1
     286: isub
     287: istore        4
     289: goto          330
     292: aload         11
     294: getstatic     #152                // Field PathItem$RotationRight.INSTANCE:LPathItem$RotationRight;
     297: invokestatic  #147                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     300: ifeq          322
     303: iload         4
     305: iconst_3
     306: if_icmpne     313
     309: iconst_0
     310: goto          317
     313: iload         4
     315: iconst_1
     316: iadd
     317: istore        4
     319: goto          330
     322: new           #154                // class kotlin/NoWhenBranchMatchedException
     325: dup
     326: invokespecial #156                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     329: athrow
     330: nop
     331: nop
     332: goto          105
     335: nop
     336: sipush        1000
     339: aload_3
     340: invokevirtual #126                // Method MutableIJ.getI:()I
     343: iconst_1
     344: iadd
     345: imul
     346: iconst_4
     347: aload_3
     348: invokevirtual #129                // Method MutableIJ.getJ:()I
     351: iconst_1
     352: iadd
     353: imul
     354: iadd
     355: iload         4
     357: iadd
     358: ireturn

  private static final int[][] toMap(java.util.List<java.lang.String>);
    Code:
       0: aload_0
       1: invokeinterface #20,  1           // InterfaceMethod java/util/List.size:()I
       6: istore_1
       7: aload_0
       8: checkcast     #102                // class java/lang/Iterable
      11: invokeinterface #106,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      16: astore        4
      18: aload         4
      20: invokeinterface #112,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      25: ifne          36
      28: new           #182                // class java/util/NoSuchElementException
      31: dup
      32: invokespecial #183                // Method java/util/NoSuchElementException."<init>":()V
      35: athrow
      36: aload         4
      38: invokeinterface #116,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      43: checkcast     #36                 // class java/lang/String
      46: astore        5
      48: iconst_0
      49: istore        6
      51: aload         5
      53: invokevirtual #186                // Method java/lang/String.length:()I
      56: istore        5
      58: aload         4
      60: invokeinterface #112,  1          // InterfaceMethod java/util/Iterator.hasNext:()Z
      65: ifeq          104
      68: aload         4
      70: invokeinterface #116,  1          // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      75: checkcast     #36                 // class java/lang/String
      78: astore        6
      80: iconst_0
      81: istore        7
      83: aload         6
      85: invokevirtual #186                // Method java/lang/String.length:()I
      88: istore        6
      90: iload         5
      92: iload         6
      94: if_icmpge     58
      97: iload         6
      99: istore        5
     101: goto          58
     104: iload         5
     106: istore_2
     107: iconst_0
     108: istore        4
     110: iload_1
     111: anewarray     #179                // class "[I"
     114: astore        5
     116: iload         4
     118: iload_1
     119: if_icmpge     247
     122: iload         4
     124: istore        6
     126: aload         5
     128: iload         6
     130: iconst_0
     131: istore        7
     133: iload_2
     134: newarray       int
     136: astore        8
     138: istore        13
     140: astore        12
     142: iload         7
     144: iload_2
     145: if_icmpge     234
     148: iload         7
     150: istore        9
     152: aload         8
     154: iload         9
     156: aload_0
     157: iload         6
     159: invokeinterface #190,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     164: checkcast     #192                // class java/lang/CharSequence
     167: iload         9
     169: invokestatic  #198                // Method kotlin/text/StringsKt.getOrNull:(Ljava/lang/CharSequence;I)Ljava/lang/Character;
     172: astore        10
     174: aload         10
     176: bipush        46
     178: istore        11
     180: dup
     181: ifnonnull     188
     184: pop
     185: goto          200
     188: invokevirtual #204                // Method java/lang/Character.charValue:()C
     191: iload         11
     193: if_icmpne     200
     196: iconst_1
     197: goto          227
     200: aload         10
     202: bipush        35
     204: istore        11
     206: dup
     207: ifnonnull     214
     210: pop
     211: goto          226
     214: invokevirtual #204                // Method java/lang/Character.charValue:()C
     217: iload         11
     219: if_icmpne     226
     222: iconst_2
     223: goto          227
     226: iconst_0
     227: iastore
     228: iinc          7, 1
     231: goto          142
     234: aload         12
     236: iload         13
     238: aload         8
     240: aastore
     241: iinc          4, 1
     244: goto          116
     247: aload         5
     249: astore_3
     250: aload_3
     251: areturn

  private static final int[][][] buildAdjacentMap(int[][]);
    Code:
       0: iconst_0
       1: istore_1
       2: aload_0
       3: checkcast     #212                // class "[Ljava/lang/Object;"
       6: arraylength
       7: istore_2
       8: iload_2
       9: anewarray     #85                 // class "[[I"
      12: astore_3
      13: iload_1
      14: iload_2
      15: if_icmpge     394
      18: iload_1
      19: istore        4
      21: aload_3
      22: iload         4
      24: iconst_0
      25: istore        5
      27: aload_0
      28: iload         4
      30: aaload
      31: arraylength
      32: istore        6
      34: iload         6
      36: anewarray     #179                // class "[I"
      39: astore        7
      41: istore        15
      43: astore        14
      45: iload         5
      47: iload         6
      49: if_icmpge     381
      52: iload         5
      54: istore        8
      56: aload         7
      58: iload         8
      60: aload_0
      61: iload         4
      63: aaload
      64: iload         8
      66: iaload
      67: ifeq          371
      70: iload         8
      72: iconst_1
      73: iadd
      74: aload_0
      75: iload         4
      77: aaload
      78: arraylength
      79: irem
      80: istore        9
      82: istore        17
      84: astore        16
      86: aload_0
      87: iload         4
      89: aaload
      90: iload         9
      92: iaload
      93: ifne          111
      96: iload         9
      98: iconst_1
      99: iadd
     100: aload_0
     101: iload         4
     103: aaload
     104: arraylength
     105: irem
     106: istore        9
     108: goto          86
     111: aload         16
     113: iload         17
     115: iload         4
     117: iconst_1
     118: iadd
     119: aload_0
     120: checkcast     #212                // class "[Ljava/lang/Object;"
     123: arraylength
     124: irem
     125: istore        10
     127: istore        17
     129: astore        16
     131: aload_0
     132: iload         10
     134: aaload
     135: iload         8
     137: iaload
     138: ifne          156
     141: iload         10
     143: iconst_1
     144: iadd
     145: aload_0
     146: checkcast     #212                // class "[Ljava/lang/Object;"
     149: arraylength
     150: irem
     151: istore        10
     153: goto          131
     156: aload         16
     158: iload         17
     160: iload         8
     162: ifle          172
     165: iload         8
     167: iconst_1
     168: isub
     169: goto          179
     172: aload_0
     173: iload         4
     175: aaload
     176: invokestatic  #218                // Method kotlin/collections/ArraysKt.getLastIndex:([I)I
     179: istore        11
     181: istore        17
     183: astore        16
     185: aload_0
     186: iload         4
     188: aaload
     189: iload         11
     191: iaload
     192: ifne          219
     195: iload         11
     197: ifle          207
     200: iload         11
     202: iconst_1
     203: isub
     204: goto          214
     207: aload_0
     208: iload         4
     210: aaload
     211: invokestatic  #218                // Method kotlin/collections/ArraysKt.getLastIndex:([I)I
     214: istore        11
     216: goto          185
     219: aload         16
     221: iload         17
     223: iload         4
     225: ifle          235
     228: iload         4
     230: iconst_1
     231: isub
     232: goto          242
     235: aload_0
     236: checkcast     #212                // class "[Ljava/lang/Object;"
     239: invokestatic  #221                // Method kotlin/collections/ArraysKt.getLastIndex:([Ljava/lang/Object;)I
     242: istore        12
     244: istore        17
     246: astore        16
     248: aload_0
     249: iload         12
     251: aaload
     252: iload         8
     254: iaload
     255: ifne          282
     258: iload         12
     260: ifle          270
     263: iload         12
     265: iconst_1
     266: isub
     267: goto          277
     270: aload_0
     271: checkcast     #212                // class "[Ljava/lang/Object;"
     274: invokestatic  #221                // Method kotlin/collections/ArraysKt.getLastIndex:([Ljava/lang/Object;)I
     277: istore        12
     279: goto          248
     282: aload         16
     284: iload         17
     286: bipush        12
     288: newarray       int
     290: astore        13
     292: aload         13
     294: iconst_0
     295: iload         4
     297: iastore
     298: aload         13
     300: iconst_1
     301: iload         9
     303: iastore
     304: aload         13
     306: iconst_2
     307: iconst_0
     308: iastore
     309: aload         13
     311: iconst_3
     312: iload         10
     314: iastore
     315: aload         13
     317: iconst_4
     318: iload         8
     320: iastore
     321: aload         13
     323: iconst_5
     324: iconst_1
     325: iastore
     326: aload         13
     328: bipush        6
     330: iload         4
     332: iastore
     333: aload         13
     335: bipush        7
     337: iload         11
     339: iastore
     340: aload         13
     342: bipush        8
     344: iconst_2
     345: iastore
     346: aload         13
     348: bipush        9
     350: iload         12
     352: iastore
     353: aload         13
     355: bipush        10
     357: iload         8
     359: iastore
     360: aload         13
     362: bipush        11
     364: iconst_3
     365: iastore
     366: aload         13
     368: goto          374
     371: iconst_0
     372: newarray       int
     374: aastore
     375: iinc          5, 1
     378: goto          45
     381: aload         14
     383: iload         15
     385: aload         7
     387: aastore
     388: iinc          1, 1
     391: goto          13
     394: aload_3
     395: areturn

  private static final int[][][] buildCubeAdjacentMap(int[][]);
    Code:
       0: iconst_0
       1: istore_2
       2: aload_0
       3: checkcast     #212                // class "[Ljava/lang/Object;"
       6: arraylength
       7: istore_3
       8: iload_3
       9: anewarray     #85                 // class "[[I"
      12: astore        4
      14: iload_2
      15: iload_3
      16: if_icmpge     188
      19: iload_2
      20: istore        5
      22: aload         4
      24: iload         5
      26: iconst_0
      27: istore        6
      29: aload_0
      30: iload         5
      32: aaload
      33: arraylength
      34: istore        7
      36: iload         7
      38: anewarray     #179                // class "[I"
      41: astore        8
      43: istore        12
      45: astore        11
      47: iload         6
      49: iload         7
      51: if_icmpge     175
      54: iload         6
      56: istore        9
      58: aload         8
      60: iload         9
      62: aload_0
      63: iload         5
      65: aaload
      66: iload         9
      68: iaload
      69: ifeq          165
      72: bipush        12
      74: newarray       int
      76: astore        10
      78: aload         10
      80: iconst_0
      81: iload         5
      83: iastore
      84: aload         10
      86: iconst_1
      87: iload         9
      89: iconst_1
      90: iadd
      91: iastore
      92: aload         10
      94: iconst_2
      95: iconst_0
      96: iastore
      97: aload         10
      99: iconst_3
     100: iload         5
     102: iconst_1
     103: iadd
     104: iastore
     105: aload         10
     107: iconst_4
     108: iload         9
     110: iastore
     111: aload         10
     113: iconst_5
     114: iconst_1
     115: iastore
     116: aload         10
     118: bipush        6
     120: iload         5
     122: iastore
     123: aload         10
     125: bipush        7
     127: iload         9
     129: iconst_1
     130: isub
     131: iastore
     132: aload         10
     134: bipush        8
     136: iconst_2
     137: iastore
     138: aload         10
     140: bipush        9
     142: iload         5
     144: iconst_1
     145: isub
     146: iastore
     147: aload         10
     149: bipush        10
     151: iload         9
     153: iastore
     154: aload         10
     156: bipush        11
     158: iconst_3
     159: iastore
     160: aload         10
     162: goto          168
     165: iconst_0
     166: newarray       int
     168: aastore
     169: iinc          6, 1
     172: goto          47
     175: aload         11
     177: iload         12
     179: aload         8
     181: aastore
     182: iinc          2, 1
     185: goto          14
     188: aload         4
     190: astore_1
     191: aload_0
     192: checkcast     #212                // class "[Ljava/lang/Object;"
     195: arraylength
     196: iconst_4
     197: idiv
     198: istore_2
     199: iconst_0
     200: istore_3
     201: iload_3
     202: iload_2
     203: if_icmpge     323
     206: iload_3
     207: istore        4
     209: iconst_0
     210: istore        5
     212: aload_1
     213: iload_2
     214: iconst_1
     215: isub
     216: aaload
     217: iconst_2
     218: iload_2
     219: imul
     220: iload         4
     222: iadd
     223: aaload
     224: iconst_3
     225: iload_2
     226: iload         4
     228: iadd
     229: iastore
     230: aload_1
     231: iload_2
     232: iconst_1
     233: isub
     234: aaload
     235: iconst_2
     236: iload_2
     237: imul
     238: iload         4
     240: iadd
     241: aaload
     242: iconst_4
     243: iconst_2
     244: iload_2
     245: imul
     246: iconst_1
     247: isub
     248: iastore
     249: aload_1
     250: iload_2
     251: iconst_1
     252: isub
     253: aaload
     254: iconst_2
     255: iload_2
     256: imul
     257: iload         4
     259: iadd
     260: aaload
     261: iconst_5
     262: iconst_2
     263: iastore
     264: aload_1
     265: iload_2
     266: iload         4
     268: iadd
     269: aaload
     270: iconst_2
     271: iload_2
     272: imul
     273: iconst_1
     274: isub
     275: aaload
     276: iconst_0
     277: iload_2
     278: iconst_1
     279: isub
     280: iastore
     281: aload_1
     282: iload_2
     283: iload         4
     285: iadd
     286: aaload
     287: iconst_2
     288: iload_2
     289: imul
     290: iconst_1
     291: isub
     292: aaload
     293: iconst_1
     294: iconst_2
     295: iload_2
     296: imul
     297: iload         4
     299: iadd
     300: iastore
     301: aload_1
     302: iload_2
     303: iload         4
     305: iadd
     306: aaload
     307: iconst_2
     308: iload_2
     309: imul
     310: iconst_1
     311: isub
     312: aaload
     313: iconst_2
     314: iconst_3
     315: iastore
     316: nop
     317: iinc          3, 1
     320: goto          201
     323: iconst_0
     324: istore_3
     325: iload_3
     326: iload_2
     327: if_icmpge     463
     330: iload_3
     331: istore        4
     333: iconst_0
     334: istore        5
     336: aload_1
     337: iload_2
     338: iload         4
     340: isub
     341: iconst_1
     342: isub
     343: aaload
     344: iconst_3
     345: iload_2
     346: imul
     347: iconst_1
     348: isub
     349: aaload
     350: iconst_0
     351: iconst_2
     352: iload_2
     353: imul
     354: iload         4
     356: iadd
     357: iastore
     358: aload_1
     359: iload_2
     360: iload         4
     362: isub
     363: iconst_1
     364: isub
     365: aaload
     366: iconst_3
     367: iload_2
     368: imul
     369: iconst_1
     370: isub
     371: aaload
     372: iconst_1
     373: iconst_2
     374: iload_2
     375: imul
     376: iconst_1
     377: isub
     378: iastore
     379: aload_1
     380: iload_2
     381: iload         4
     383: isub
     384: iconst_1
     385: isub
     386: aaload
     387: iconst_3
     388: iload_2
     389: imul
     390: iconst_1
     391: isub
     392: aaload
     393: iconst_2
     394: iconst_2
     395: iastore
     396: aload_1
     397: iconst_2
     398: iload_2
     399: imul
     400: iload         4
     402: iadd
     403: aaload
     404: iconst_2
     405: iload_2
     406: imul
     407: iconst_1
     408: isub
     409: aaload
     410: iconst_0
     411: iload_2
     412: iload         4
     414: isub
     415: iconst_1
     416: isub
     417: iastore
     418: aload_1
     419: iconst_2
     420: iload_2
     421: imul
     422: iload         4
     424: iadd
     425: aaload
     426: iconst_2
     427: iload_2
     428: imul
     429: iconst_1
     430: isub
     431: aaload
     432: iconst_1
     433: iconst_3
     434: iload_2
     435: imul
     436: iconst_1
     437: isub
     438: iastore
     439: aload_1
     440: iconst_2
     441: iload_2
     442: imul
     443: iload         4
     445: iadd
     446: aaload
     447: iconst_2
     448: iload_2
     449: imul
     450: iconst_1
     451: isub
     452: aaload
     453: iconst_2
     454: iconst_2
     455: iastore
     456: nop
     457: iinc          3, 1
     460: goto          325
     463: iconst_0
     464: istore_3
     465: iload_3
     466: iload_2
     467: if_icmpge     574
     470: iload_3
     471: istore        4
     473: iconst_0
     474: istore        5
     476: aload_1
     477: iconst_0
     478: aaload
     479: iconst_2
     480: iload_2
     481: imul
     482: iload         4
     484: iadd
     485: aaload
     486: bipush        9
     488: iconst_4
     489: iload_2
     490: imul
     491: iconst_1
     492: isub
     493: iastore
     494: aload_1
     495: iconst_0
     496: aaload
     497: iconst_2
     498: iload_2
     499: imul
     500: iload         4
     502: iadd
     503: aaload
     504: bipush        10
     506: iload         4
     508: iastore
     509: aload_1
     510: iconst_0
     511: aaload
     512: iconst_2
     513: iload_2
     514: imul
     515: iload         4
     517: iadd
     518: aaload
     519: bipush        11
     521: iconst_3
     522: iastore
     523: aload_1
     524: iconst_4
     525: iload_2
     526: imul
     527: iconst_1
     528: isub
     529: aaload
     530: iload         4
     532: aaload
     533: iconst_3
     534: iconst_0
     535: iastore
     536: aload_1
     537: iconst_4
     538: iload_2
     539: imul
     540: iconst_1
     541: isub
     542: aaload
     543: iload         4
     545: aaload
     546: iconst_4
     547: iconst_2
     548: iload_2
     549: imul
     550: iload         4
     552: iadd
     553: iastore
     554: aload_1
     555: iconst_4
     556: iload_2
     557: imul
     558: iconst_1
     559: isub
     560: aaload
     561: iload         4
     563: aaload
     564: iconst_5
     565: iconst_1
     566: iastore
     567: nop
     568: iinc          3, 1
     571: goto          465
     574: iconst_0
     575: istore_3
     576: iload_3
     577: iload_2
     578: if_icmpge     688
     581: iload_3
     582: istore        4
     584: iconst_0
     585: istore        5
     587: aload_1
     588: iload_2
     589: iload         4
     591: isub
     592: iconst_1
     593: isub
     594: aaload
     595: iload_2
     596: aaload
     597: bipush        6
     599: iconst_2
     600: iload_2
     601: imul
     602: iload         4
     604: iadd
     605: iastore
     606: aload_1
     607: iload_2
     608: iload         4
     610: isub
     611: iconst_1
     612: isub
     613: aaload
     614: iload_2
     615: aaload
     616: bipush        7
     618: iconst_0
     619: iastore
     620: aload_1
     621: iload_2
     622: iload         4
     624: isub
     625: iconst_1
     626: isub
     627: aaload
     628: iload_2
     629: aaload
     630: bipush        8
     632: iconst_0
     633: iastore
     634: aload_1
     635: iconst_2
     636: iload_2
     637: imul
     638: iload         4
     640: iadd
     641: aaload
     642: iconst_0
     643: aaload
     644: bipush        6
     646: iload_2
     647: iload         4
     649: isub
     650: iconst_1
     651: isub
     652: iastore
     653: aload_1
     654: iconst_2
     655: iload_2
     656: imul
     657: iload         4
     659: iadd
     660: aaload
     661: iconst_0
     662: aaload
     663: bipush        7
     665: iload_2
     666: iastore
     667: aload_1
     668: iconst_2
     669: iload_2
     670: imul
     671: iload         4
     673: iadd
     674: aaload
     675: iconst_0
     676: aaload
     677: bipush        8
     679: iconst_0
     680: iastore
     681: nop
     682: iinc          3, 1
     685: goto          576
     688: iconst_0
     689: istore_3
     690: iload_3
     691: iload_2
     692: if_icmpge     794
     695: iload_3
     696: istore        4
     698: iconst_0
     699: istore        5
     701: aload_1
     702: iconst_0
     703: aaload
     704: iload_2
     705: iload         4
     707: iadd
     708: aaload
     709: bipush        9
     711: iconst_3
     712: iload_2
     713: imul
     714: iload         4
     716: iadd
     717: iastore
     718: aload_1
     719: iconst_0
     720: aaload
     721: iload_2
     722: iload         4
     724: iadd
     725: aaload
     726: bipush        10
     728: iconst_0
     729: iastore
     730: aload_1
     731: iconst_0
     732: aaload
     733: iload_2
     734: iload         4
     736: iadd
     737: aaload
     738: bipush        11
     740: iconst_0
     741: iastore
     742: aload_1
     743: iconst_3
     744: iload_2
     745: imul
     746: iload         4
     748: iadd
     749: aaload
     750: iconst_0
     751: aaload
     752: bipush        6
     754: iconst_0
     755: iastore
     756: aload_1
     757: iconst_3
     758: iload_2
     759: imul
     760: iload         4
     762: iadd
     763: aaload
     764: iconst_0
     765: aaload
     766: bipush        7
     768: iload_2
     769: iload         4
     771: iadd
     772: iastore
     773: aload_1
     774: iconst_3
     775: iload_2
     776: imul
     777: iload         4
     779: iadd
     780: aaload
     781: iconst_0
     782: aaload
     783: bipush        8
     785: iconst_1
     786: iastore
     787: nop
     788: iinc          3, 1
     791: goto          690
     794: iconst_0
     795: istore_3
     796: iload_3
     797: iload_2
     798: if_icmpge     924
     801: iload_3
     802: istore        4
     804: iconst_0
     805: istore        5
     807: aload_1
     808: iconst_2
     809: iload_2
     810: imul
     811: iload         4
     813: isub
     814: iconst_1
     815: isub
     816: aaload
     817: iload_2
     818: aaload
     819: bipush        6
     821: iconst_2
     822: iload_2
     823: imul
     824: iastore
     825: aload_1
     826: iconst_2
     827: iload_2
     828: imul
     829: iload         4
     831: isub
     832: iconst_1
     833: isub
     834: aaload
     835: iload_2
     836: aaload
     837: bipush        7
     839: iload_2
     840: iload         4
     842: isub
     843: iconst_1
     844: isub
     845: iastore
     846: aload_1
     847: iconst_2
     848: iload_2
     849: imul
     850: iload         4
     852: isub
     853: iconst_1
     854: isub
     855: aaload
     856: iload_2
     857: aaload
     858: bipush        8
     860: iconst_1
     861: iastore
     862: aload_1
     863: iconst_2
     864: iload_2
     865: imul
     866: aaload
     867: iload_2
     868: iload         4
     870: isub
     871: iconst_1
     872: isub
     873: aaload
     874: bipush        9
     876: iconst_2
     877: iload_2
     878: imul
     879: iload         4
     881: isub
     882: iconst_1
     883: isub
     884: iastore
     885: aload_1
     886: iconst_2
     887: iload_2
     888: imul
     889: aaload
     890: iload_2
     891: iload         4
     893: isub
     894: iconst_1
     895: isub
     896: aaload
     897: bipush        10
     899: iload_2
     900: iastore
     901: aload_1
     902: iconst_2
     903: iload_2
     904: imul
     905: aaload
     906: iload_2
     907: iload         4
     909: isub
     910: iconst_1
     911: isub
     912: aaload
     913: bipush        11
     915: iconst_0
     916: iastore
     917: nop
     918: iinc          3, 1
     921: goto          796
     924: iconst_0
     925: istore_3
     926: iload_3
     927: iload_2
     928: if_icmpge     1048
     931: iload_3
     932: istore        4
     934: iconst_0
     935: istore        5
     937: aload_1
     938: iconst_3
     939: iload_2
     940: imul
     941: iconst_1
     942: isub
     943: aaload
     944: iload_2
     945: iload         4
     947: iadd
     948: aaload
     949: iconst_3
     950: iconst_3
     951: iload_2
     952: imul
     953: iload         4
     955: iadd
     956: iastore
     957: aload_1
     958: iconst_3
     959: iload_2
     960: imul
     961: iconst_1
     962: isub
     963: aaload
     964: iload_2
     965: iload         4
     967: iadd
     968: aaload
     969: iconst_4
     970: iload_2
     971: iconst_1
     972: isub
     973: iastore
     974: aload_1
     975: iconst_3
     976: iload_2
     977: imul
     978: iconst_1
     979: isub
     980: aaload
     981: iload_2
     982: iload         4
     984: iadd
     985: aaload
     986: iconst_5
     987: iconst_2
     988: iastore
     989: aload_1
     990: iconst_3
     991: iload_2
     992: imul
     993: iload         4
     995: iadd
     996: aaload
     997: iload_2
     998: iconst_1
     999: isub
    1000: aaload
    1001: iconst_0
    1002: iconst_3
    1003: iload_2
    1004: imul
    1005: iconst_1
    1006: isub
    1007: iastore
    1008: aload_1
    1009: iconst_3
    1010: iload_2
    1011: imul
    1012: iload         4
    1014: iadd
    1015: aaload
    1016: iload_2
    1017: iconst_1
    1018: isub
    1019: aaload
    1020: iconst_1
    1021: iload_2
    1022: iload         4
    1024: iadd
    1025: iastore
    1026: aload_1
    1027: iconst_3
    1028: iload_2
    1029: imul
    1030: iload         4
    1032: iadd
    1033: aaload
    1034: iload_2
    1035: iconst_1
    1036: isub
    1037: aaload
    1038: iconst_2
    1039: iconst_3
    1040: iastore
    1041: nop
    1042: iinc          3, 1
    1045: goto          926
    1048: aload_1
    1049: areturn

  private static final int[][][] buildTestCubeAdjacentMap(int[][]);
    Code:
       0: iconst_0
       1: istore_2
       2: aload_0
       3: checkcast     #212                // class "[Ljava/lang/Object;"
       6: arraylength
       7: istore_3
       8: iload_3
       9: anewarray     #85                 // class "[[I"
      12: astore        4
      14: iload_2
      15: iload_3
      16: if_icmpge     188
      19: iload_2
      20: istore        5
      22: aload         4
      24: iload         5
      26: iconst_0
      27: istore        6
      29: aload_0
      30: iload         5
      32: aaload
      33: arraylength
      34: istore        7
      36: iload         7
      38: anewarray     #179                // class "[I"
      41: astore        8
      43: istore        12
      45: astore        11
      47: iload         6
      49: iload         7
      51: if_icmpge     175
      54: iload         6
      56: istore        9
      58: aload         8
      60: iload         9
      62: aload_0
      63: iload         5
      65: aaload
      66: iload         9
      68: iaload
      69: ifeq          165
      72: bipush        12
      74: newarray       int
      76: astore        10
      78: aload         10
      80: iconst_0
      81: iload         5
      83: iastore
      84: aload         10
      86: iconst_1
      87: iload         9
      89: iconst_1
      90: iadd
      91: iastore
      92: aload         10
      94: iconst_2
      95: iconst_0
      96: iastore
      97: aload         10
      99: iconst_3
     100: iload         5
     102: iconst_1
     103: iadd
     104: iastore
     105: aload         10
     107: iconst_4
     108: iload         9
     110: iastore
     111: aload         10
     113: iconst_5
     114: iconst_1
     115: iastore
     116: aload         10
     118: bipush        6
     120: iload         5
     122: iastore
     123: aload         10
     125: bipush        7
     127: iload         9
     129: iconst_1
     130: isub
     131: iastore
     132: aload         10
     134: bipush        8
     136: iconst_2
     137: iastore
     138: aload         10
     140: bipush        9
     142: iload         5
     144: iconst_1
     145: isub
     146: iastore
     147: aload         10
     149: bipush        10
     151: iload         9
     153: iastore
     154: aload         10
     156: bipush        11
     158: iconst_3
     159: iastore
     160: aload         10
     162: goto          168
     165: iconst_0
     166: newarray       int
     168: aastore
     169: iinc          6, 1
     172: goto          47
     175: aload         11
     177: iload         12
     179: aload         8
     181: aastore
     182: iinc          2, 1
     185: goto          14
     188: aload         4
     190: astore_1
     191: aload_0
     192: checkcast     #212                // class "[Ljava/lang/Object;"
     195: arraylength
     196: iconst_3
     197: idiv
     198: istore_2
     199: iload_2
     200: iconst_2
     201: imul
     202: istore_3
     203: iconst_0
     204: istore        4
     206: iload         4
     208: iload_2
     209: if_icmpge     312
     212: iload         4
     214: istore        5
     216: iconst_0
     217: istore        6
     219: aload_1
     220: iconst_0
     221: aaload
     222: iload_3
     223: iload         5
     225: iadd
     226: aaload
     227: bipush        9
     229: iload_2
     230: iastore
     231: aload_1
     232: iconst_0
     233: aaload
     234: iload_3
     235: iload         5
     237: iadd
     238: aaload
     239: bipush        10
     241: iload_2
     242: iload         5
     244: isub
     245: iconst_1
     246: isub
     247: iastore
     248: aload_1
     249: iconst_0
     250: aaload
     251: iload_3
     252: iload         5
     254: iadd
     255: aaload
     256: bipush        11
     258: iconst_1
     259: iastore
     260: aload_1
     261: iload_2
     262: aaload
     263: iload_2
     264: iload         5
     266: isub
     267: iconst_1
     268: isub
     269: aaload
     270: bipush        9
     272: iconst_0
     273: iastore
     274: aload_1
     275: iload_2
     276: aaload
     277: iload_2
     278: iload         5
     280: isub
     281: iconst_1
     282: isub
     283: aaload
     284: bipush        10
     286: iload_3
     287: iload         5
     289: iadd
     290: iastore
     291: aload_1
     292: iload_2
     293: aaload
     294: iload_2
     295: iload         5
     297: isub
     298: iconst_1
     299: isub
     300: aaload
     301: bipush        11
     303: iconst_1
     304: iastore
     305: nop
     306: iinc          4, 1
     309: goto          206
     312: iconst_0
     313: istore        4
     315: iload         4
     317: iload_2
     318: if_icmpge     405
     321: iload         4
     323: istore        5
     325: iconst_0
     326: istore        6
     328: aload_1
     329: iload         5
     331: aaload
     332: iload_3
     333: aaload
     334: bipush        6
     336: iload_2
     337: iastore
     338: aload_1
     339: iload         5
     341: aaload
     342: iload_3
     343: aaload
     344: bipush        7
     346: iload_2
     347: iload         5
     349: iadd
     350: iastore
     351: aload_1
     352: iload         5
     354: aaload
     355: iload_3
     356: aaload
     357: bipush        8
     359: iconst_1
     360: iastore
     361: aload_1
     362: iload_2
     363: aaload
     364: iload_2
     365: iload         5
     367: iadd
     368: aaload
     369: bipush        9
     371: iload         5
     373: iastore
     374: aload_1
     375: iload_2
     376: aaload
     377: iload_2
     378: iload         5
     380: iadd
     381: aaload
     382: bipush        10
     384: iload_3
     385: iastore
     386: aload_1
     387: iload_2
     388: aaload
     389: iload_2
     390: iload         5
     392: iadd
     393: aaload
     394: bipush        11
     396: iconst_0
     397: iastore
     398: nop
     399: iinc          4, 1
     402: goto          315
     405: iconst_0
     406: istore        4
     408: iload         4
     410: iload_2
     411: if_icmpge     540
     414: iload         4
     416: istore        5
     418: iconst_0
     419: istore        6
     421: aload_1
     422: iload         5
     424: aaload
     425: iconst_3
     426: iload_2
     427: imul
     428: iconst_1
     429: isub
     430: aaload
     431: iconst_0
     432: iconst_3
     433: iload_2
     434: imul
     435: iload         5
     437: isub
     438: iconst_1
     439: isub
     440: iastore
     441: aload_1
     442: iload         5
     444: aaload
     445: iconst_3
     446: iload_2
     447: imul
     448: iconst_1
     449: isub
     450: aaload
     451: iconst_1
     452: iconst_4
     453: iload_2
     454: imul
     455: iconst_1
     456: isub
     457: iastore
     458: aload_1
     459: iload         5
     461: aaload
     462: iconst_3
     463: iload_2
     464: imul
     465: iconst_1
     466: isub
     467: aaload
     468: iconst_2
     469: iconst_2
     470: iastore
     471: aload_1
     472: iconst_3
     473: iload_2
     474: imul
     475: iload         5
     477: isub
     478: iconst_1
     479: isub
     480: aaload
     481: iconst_4
     482: iload_2
     483: imul
     484: iconst_1
     485: isub
     486: aaload
     487: iconst_0
     488: iload         5
     490: iastore
     491: aload_1
     492: iconst_3
     493: iload_2
     494: imul
     495: iload         5
     497: isub
     498: iconst_1
     499: isub
     500: aaload
     501: iconst_4
     502: iload_2
     503: imul
     504: iconst_1
     505: isub
     506: aaload
     507: iconst_1
     508: iconst_3
     509: iload_2
     510: imul
     511: iconst_1
     512: isub
     513: iastore
     514: aload_1
     515: iconst_3
     516: iload_2
     517: imul
     518: iload         5
     520: isub
     521: iconst_1
     522: isub
     523: aaload
     524: iconst_4
     525: iload_2
     526: imul
     527: iconst_1
     528: isub
     529: aaload
     530: iconst_2
     531: iconst_2
     532: iastore
     533: nop
     534: iinc          4, 1
     537: goto          408
     540: iconst_0
     541: istore        4
     543: iload         4
     545: iload_2
     546: if_icmpge     675
     549: iload         4
     551: istore        5
     553: iconst_0
     554: istore        6
     556: aload_1
     557: iconst_2
     558: iload_2
     559: imul
     560: iconst_1
     561: isub
     562: aaload
     563: iload         5
     565: aaload
     566: iconst_3
     567: iconst_3
     568: iload_2
     569: imul
     570: iconst_1
     571: isub
     572: iastore
     573: aload_1
     574: iconst_2
     575: iload_2
     576: imul
     577: iconst_1
     578: isub
     579: aaload
     580: iload         5
     582: aaload
     583: iconst_4
     584: iconst_3
     585: iload_2
     586: imul
     587: iload         5
     589: isub
     590: iconst_1
     591: isub
     592: iastore
     593: aload_1
     594: iconst_2
     595: iload_2
     596: imul
     597: iconst_1
     598: isub
     599: aaload
     600: iload         5
     602: aaload
     603: iconst_5
     604: iconst_3
     605: iastore
     606: aload_1
     607: iconst_3
     608: iload_2
     609: imul
     610: iconst_1
     611: isub
     612: aaload
     613: iconst_3
     614: iload_2
     615: imul
     616: iload         5
     618: isub
     619: iconst_1
     620: isub
     621: aaload
     622: iconst_3
     623: iconst_2
     624: iload_2
     625: imul
     626: iconst_1
     627: isub
     628: iastore
     629: aload_1
     630: iconst_3
     631: iload_2
     632: imul
     633: iconst_1
     634: isub
     635: aaload
     636: iconst_3
     637: iload_2
     638: imul
     639: iload         5
     641: isub
     642: iconst_1
     643: isub
     644: aaload
     645: iconst_4
     646: iload         5
     648: iastore
     649: aload_1
     650: iconst_3
     651: iload_2
     652: imul
     653: iconst_1
     654: isub
     655: aaload
     656: iconst_3
     657: iload_2
     658: imul
     659: iload         5
     661: isub
     662: iconst_1
     663: isub
     664: aaload
     665: iconst_5
     666: iconst_3
     667: iastore
     668: nop
     669: iinc          4, 1
     672: goto          543
     675: iconst_0
     676: istore        4
     678: iload         4
     680: iload_2
     681: if_icmpge     805
     684: iload         4
     686: istore        5
     688: iconst_0
     689: istore        6
     691: aload_1
     692: iload_2
     693: iload         5
     695: iadd
     696: aaload
     697: iconst_0
     698: aaload
     699: bipush        6
     701: iconst_3
     702: iload_2
     703: imul
     704: iconst_1
     705: isub
     706: iastore
     707: aload_1
     708: iload_2
     709: iload         5
     711: iadd
     712: aaload
     713: iconst_0
     714: aaload
     715: bipush        7
     717: iconst_4
     718: iload_2
     719: imul
     720: iload         5
     722: isub
     723: iconst_1
     724: isub
     725: iastore
     726: aload_1
     727: iload_2
     728: iload         5
     730: iadd
     731: aaload
     732: iconst_0
     733: aaload
     734: bipush        8
     736: iconst_3
     737: iastore
     738: aload_1
     739: iconst_3
     740: iload_2
     741: imul
     742: iconst_1
     743: isub
     744: aaload
     745: iconst_4
     746: iload_2
     747: imul
     748: iload         5
     750: isub
     751: iconst_1
     752: isub
     753: aaload
     754: iconst_3
     755: iload_2
     756: iload         5
     758: iadd
     759: iastore
     760: aload_1
     761: iconst_3
     762: iload_2
     763: imul
     764: iconst_1
     765: isub
     766: aaload
     767: iconst_4
     768: iload_2
     769: imul
     770: iload         5
     772: isub
     773: iconst_1
     774: isub
     775: aaload
     776: iconst_4
     777: iconst_0
     778: iastore
     779: aload_1
     780: iconst_3
     781: iload_2
     782: imul
     783: iconst_1
     784: isub
     785: aaload
     786: iconst_4
     787: iload_2
     788: imul
     789: iload         5
     791: isub
     792: iconst_1
     793: isub
     794: aaload
     795: iconst_5
     796: iconst_0
     797: iastore
     798: nop
     799: iinc          4, 1
     802: goto          678
     805: iconst_0
     806: istore        4
     808: iload         4
     810: iload_2
     811: if_icmpge     951
     814: iload         4
     816: istore        5
     818: iconst_0
     819: istore        6
     821: aload_1
     822: iconst_2
     823: iload_2
     824: imul
     825: iconst_1
     826: isub
     827: aaload
     828: iconst_2
     829: iload_2
     830: imul
     831: iload         5
     833: isub
     834: iconst_1
     835: isub
     836: aaload
     837: iconst_3
     838: iconst_2
     839: iload_2
     840: imul
     841: iload         5
     843: iadd
     844: iastore
     845: aload_1
     846: iconst_2
     847: iload_2
     848: imul
     849: iconst_1
     850: isub
     851: aaload
     852: iconst_2
     853: iload_2
     854: imul
     855: iload         5
     857: isub
     858: iconst_1
     859: isub
     860: aaload
     861: iconst_4
     862: iconst_2
     863: iload_2
     864: imul
     865: iastore
     866: aload_1
     867: iconst_2
     868: iload_2
     869: imul
     870: iconst_1
     871: isub
     872: aaload
     873: iconst_2
     874: iload_2
     875: imul
     876: iload         5
     878: isub
     879: iconst_1
     880: isub
     881: aaload
     882: iconst_5
     883: iconst_0
     884: iastore
     885: aload_1
     886: iconst_2
     887: iload_2
     888: imul
     889: iload         5
     891: iadd
     892: aaload
     893: iconst_2
     894: iload_2
     895: imul
     896: aaload
     897: bipush        6
     899: iconst_2
     900: iload_2
     901: imul
     902: iconst_1
     903: isub
     904: iastore
     905: aload_1
     906: iconst_2
     907: iload_2
     908: imul
     909: iload         5
     911: iadd
     912: aaload
     913: iconst_2
     914: iload_2
     915: imul
     916: aaload
     917: bipush        7
     919: iconst_2
     920: iload_2
     921: imul
     922: iload         5
     924: isub
     925: iconst_1
     926: isub
     927: iastore
     928: aload_1
     929: iconst_2
     930: iload_2
     931: imul
     932: iload         5
     934: iadd
     935: aaload
     936: iconst_2
     937: iload_2
     938: imul
     939: aaload
     940: bipush        8
     942: iconst_3
     943: iastore
     944: nop
     945: iinc          4, 1
     948: goto          808
     951: iconst_0
     952: istore        4
     954: iload         4
     956: iload_2
     957: if_icmpge     1097
     960: iload         4
     962: istore        5
     964: iconst_0
     965: istore        6
     967: aload_1
     968: iconst_2
     969: iload_2
     970: imul
     971: iload         5
     973: isub
     974: iconst_1
     975: isub
     976: aaload
     977: iconst_3
     978: iload_2
     979: imul
     980: iconst_1
     981: isub
     982: aaload
     983: iconst_0
     984: iconst_2
     985: iload_2
     986: imul
     987: iastore
     988: aload_1
     989: iconst_2
     990: iload_2
     991: imul
     992: iload         5
     994: isub
     995: iconst_1
     996: isub
     997: aaload
     998: iconst_3
     999: iload_2
    1000: imul
    1001: iconst_1
    1002: isub
    1003: aaload
    1004: iconst_1
    1005: iconst_3
    1006: iload_2
    1007: imul
    1008: iload         5
    1010: iadd
    1011: iastore
    1012: aload_1
    1013: iconst_2
    1014: iload_2
    1015: imul
    1016: iload         5
    1018: isub
    1019: iconst_1
    1020: isub
    1021: aaload
    1022: iconst_3
    1023: iload_2
    1024: imul
    1025: iconst_1
    1026: isub
    1027: aaload
    1028: iconst_2
    1029: iconst_1
    1030: iastore
    1031: aload_1
    1032: iconst_2
    1033: iload_2
    1034: imul
    1035: aaload
    1036: iconst_3
    1037: iload_2
    1038: imul
    1039: iload         5
    1041: iadd
    1042: aaload
    1043: bipush        9
    1045: iconst_2
    1046: iload_2
    1047: imul
    1048: iload         5
    1050: isub
    1051: iconst_1
    1052: isub
    1053: iastore
    1054: aload_1
    1055: iconst_2
    1056: iload_2
    1057: imul
    1058: aaload
    1059: iconst_3
    1060: iload_2
    1061: imul
    1062: iload         5
    1064: iadd
    1065: aaload
    1066: bipush        10
    1068: iconst_3
    1069: iload_2
    1070: imul
    1071: iconst_1
    1072: isub
    1073: iastore
    1074: aload_1
    1075: iconst_2
    1076: iload_2
    1077: imul
    1078: aaload
    1079: iconst_3
    1080: iload_2
    1081: imul
    1082: iload         5
    1084: iadd
    1085: aaload
    1086: bipush        11
    1088: iconst_2
    1089: iastore
    1090: nop
    1091: iinc          4, 1
    1094: goto          954
    1097: aload_1
    1098: areturn

  private static final java.util.List<PathItem> parsePath(java.lang.String);
    Code:
       0: getstatic     #250                // Field PATH_FORMAT:Lkotlin/text/Regex;
       3: aload_0
       4: checkcast     #192                // class java/lang/CharSequence
       7: iconst_0
       8: iconst_2
       9: aconst_null
      10: invokestatic  #256                // Method kotlin/text/Regex.findAll$default:(Lkotlin/text/Regex;Ljava/lang/CharSequence;IILjava/lang/Object;)Lkotlin/sequences/Sequence;
      13: invokedynamic #275,  0            // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function1;
      18: invokestatic  #280                // Method kotlin/sequences/SequencesKt.map:(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
      21: invokestatic  #284                // Method kotlin/sequences/SequencesKt.toList:(Lkotlin/sequences/Sequence;)Ljava/util/List;
      24: areturn

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

  private static final PathItem parsePath$lambda$17(kotlin.text.MatchResult);
    Code:
       0: aload_0
       1: ldc_w         #291                // String it
       4: invokestatic  #295                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: invokeinterface #301,  1          // InterfaceMethod kotlin/text/MatchResult.getValue:()Ljava/lang/String;
      13: astore_1
      14: aload_1
      15: ldc_w         #303                // String R
      18: invokestatic  #147                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      21: ifeq          33
      24: getstatic     #152                // Field PathItem$RotationRight.INSTANCE:LPathItem$RotationRight;
      27: checkcast     #118                // class PathItem
      30: goto          71
      33: aload_1
      34: ldc_w         #305                // String L
      37: invokestatic  #147                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      40: ifeq          52
      43: getstatic     #141                // Field PathItem$RotationLeft.INSTANCE:LPathItem$RotationLeft;
      46: checkcast     #118                // class PathItem
      49: goto          71
      52: new           #120                // class PathItem$Move
      55: dup
      56: aload_0
      57: invokeinterface #301,  1          // InterfaceMethod kotlin/text/MatchResult.getValue:()Ljava/lang/String;
      62: invokestatic  #311                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
      65: invokespecial #313                // Method PathItem$Move."<init>":(I)V
      68: checkcast     #118                // class PathItem
      71: areturn

  static {};
    Code:
       0: new           #252                // class kotlin/text/Regex
       3: dup
       4: ldc_w         #317                // String (R|L|\\d+)
       7: invokespecial #318                // Method kotlin/text/Regex."<init>":(Ljava/lang/String;)V
      10: putstatic     #250                // Field PATH_FORMAT:Lkotlin/text/Regex;
      13: return
}