package dynamicprogramming

private var memo: Array<Array<Boolean?>>? = null

fun isPalindrome(s: String, i: Int, j: Int): Boolean {
    if (memo!![i][j] != null) {
        return memo!![i][j]!!
    }
    if (i == j) {
        memo!![i][j] = true
        return true
    }
    if (i == j - 1) {
        memo!![i][j] = s[i] == s[j]
        return s[i] == s[j]
    }

    val res = s[i] == s[j] && isPalindrome(s, i + 1, j - 1)
    memo!![i][j] = res
    return res
}

// O(N^2)
fun longestPalindrome(s: String): String {
    memo = Array(s.length) {Array<Boolean?>(s.length) {null} }

    var ti = s.lastIndex
    var tj = 0

    for (i in s.indices) {
        for (j in i..s.lastIndex) {
            if (isPalindrome(s, i, j) && j - i > tj - ti) {
                ti = i
                tj = j
            }
        }
    }

    return s.substring(ti, tj + 1)
}

fun main() {
    println(longestPalindrome("ac"))
}

Compiled from "LongestPalindromicSubstring.kt"
public final class dynamicprogramming.LongestPalindromicSubstringKt {
  private static java.lang.Boolean[][] memo;

  public static final boolean isPalindrome(java.lang.String, int, int);
    Code:
       0: aload_0
       1: ldc           #9                  // String s
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: getstatic     #19                 // Field memo:[[Ljava/lang/Boolean;
       9: dup
      10: invokestatic  #23                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      13: iload_1
      14: aaload
      15: iload_2
      16: aaload
      17: ifnull        39
      20: getstatic     #19                 // Field memo:[[Ljava/lang/Boolean;
      23: dup
      24: invokestatic  #23                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      27: iload_1
      28: aaload
      29: iload_2
      30: aaload
      31: dup
      32: invokestatic  #23                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      35: invokevirtual #29                 // Method java/lang/Boolean.booleanValue:()Z
      38: ireturn
      39: iload_1
      40: iload_2
      41: if_icmpne     61
      44: getstatic     #19                 // Field memo:[[Ljava/lang/Boolean;
      47: dup
      48: invokestatic  #23                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      51: iload_1
      52: aaload
      53: iload_2
      54: iconst_1
      55: invokestatic  #33                 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
      58: aastore
      59: iconst_1
      60: ireturn
      61: iload_1
      62: iload_2
      63: iconst_1
      64: isub
      65: if_icmpne     119
      68: getstatic     #19                 // Field memo:[[Ljava/lang/Boolean;
      71: dup
      72: invokestatic  #23                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      75: iload_1
      76: aaload
      77: iload_2
      78: aload_0
      79: iload_1
      80: invokevirtual #39                 // Method java/lang/String.charAt:(I)C
      83: aload_0
      84: iload_2
      85: invokevirtual #39                 // Method java/lang/String.charAt:(I)C
      88: if_icmpne     95
      91: iconst_1
      92: goto          96
      95: iconst_0
      96: invokestatic  #33                 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
      99: aastore
     100: aload_0
     101: iload_1
     102: invokevirtual #39                 // Method java/lang/String.charAt:(I)C
     105: aload_0
     106: iload_2
     107: invokevirtual #39                 // Method java/lang/String.charAt:(I)C
     110: if_icmpne     117
     113: iconst_1
     114: goto          118
     117: iconst_0
     118: ireturn
     119: aload_0
     120: iload_1
     121: invokevirtual #39                 // Method java/lang/String.charAt:(I)C
     124: aload_0
     125: iload_2
     126: invokevirtual #39                 // Method java/lang/String.charAt:(I)C
     129: if_icmpne     149
     132: aload_0
     133: iload_1
     134: iconst_1
     135: iadd
     136: iload_2
     137: iconst_1
     138: isub
     139: invokestatic  #41                 // Method isPalindrome:(Ljava/lang/String;II)Z
     142: ifeq          149
     145: iconst_1
     146: goto          150
     149: iconst_0
     150: istore_3
     151: getstatic     #19                 // Field memo:[[Ljava/lang/Boolean;
     154: dup
     155: invokestatic  #23                 // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     158: iload_1
     159: aaload
     160: iload_2
     161: iload_3
     162: invokestatic  #33                 // Method java/lang/Boolean.valueOf:(Z)Ljava/lang/Boolean;
     165: aastore
     166: iload_3
     167: ireturn

  public static final java.lang.String longestPalindrome(java.lang.String);
    Code:
       0: aload_0
       1: ldc           #9                  // String s
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: iconst_0
       7: istore_1
       8: aload_0
       9: invokevirtual #55                 // Method java/lang/String.length:()I
      12: istore_2
      13: iload_2
      14: anewarray     #49                 // class "[Ljava/lang/Boolean;"
      17: astore_3
      18: iload_1
      19: iload_2
      20: if_icmpge     85
      23: iload_1
      24: istore        4
      26: aload_3
      27: iload         4
      29: iconst_0
      30: istore        5
      32: aload_0
      33: invokevirtual #55                 // Method java/lang/String.length:()I
      36: istore        6
      38: iload         6
      40: anewarray     #25                 // class java/lang/Boolean
      43: astore        7
      45: istore        10
      47: astore        9
      49: iload         5
      51: iload         6
      53: if_icmpge     72
      56: iload         5
      58: istore        8
      60: aload         7
      62: iload         8
      64: aconst_null
      65: aastore
      66: iinc          5, 1
      69: goto          49
      72: aload         9
      74: iload         10
      76: aload         7
      78: aastore
      79: iinc          1, 1
      82: goto          18
      85: aload_3
      86: putstatic     #19                 // Field memo:[[Ljava/lang/Boolean;
      89: aload_0
      90: checkcast     #57                 // class java/lang/CharSequence
      93: invokestatic  #63                 // Method kotlin/text/StringsKt.getLastIndex:(Ljava/lang/CharSequence;)I
      96: istore_1
      97: iconst_0
      98: istore_2
      99: iconst_0
     100: istore_3
     101: aload_0
     102: checkcast     #57                 // class java/lang/CharSequence
     105: invokeinterface #64,  1           // InterfaceMethod java/lang/CharSequence.length:()I
     110: istore        4
     112: iload_3
     113: iload         4
     115: if_icmpge     181
     118: iload_3
     119: istore        5
     121: aload_0
     122: checkcast     #57                 // class java/lang/CharSequence
     125: invokestatic  #63                 // Method kotlin/text/StringsKt.getLastIndex:(Ljava/lang/CharSequence;)I
     128: istore        6
     130: iload         5
     132: iload         6
     134: if_icmpgt     175
     137: aload_0
     138: iload_3
     139: iload         5
     141: invokestatic  #41                 // Method isPalindrome:(Ljava/lang/String;II)Z
     144: ifeq          162
     147: iload         5
     149: iload_3
     150: isub
     151: iload_2
     152: iload_1
     153: isub
     154: if_icmple     162
     157: iload_3
     158: istore_1
     159: iload         5
     161: istore_2
     162: iload         5
     164: iload         6
     166: if_icmpeq     175
     169: iinc          5, 1
     172: goto          137
     175: iinc          3, 1
     178: goto          112
     181: aload_0
     182: iload_1
     183: iload_2
     184: iconst_1
     185: iadd
     186: invokevirtual #68                 // Method java/lang/String.substring:(II)Ljava/lang/String;
     189: dup
     190: ldc           #70                 // String substring(...)
     192: invokestatic  #73                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
     195: areturn

  public static final void main();
    Code:
       0: ldc           #80                 // String ac
       2: invokestatic  #82                 // Method longestPalindrome:(Ljava/lang/String;)Ljava/lang/String;
       5: getstatic     #88                 // Field java/lang/System.out:Ljava/io/PrintStream;
       8: swap
       9: invokevirtual #93                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      12: return

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

  static {};
    Code:
       0: return
}


package dynamicprogramming

fun processSubarray(a: Int, b: Int, negatives: Int, nums: IntArray): Int {
    if (a > b) {
        return 0
    }
    if (a == b) {
        return nums[a]
    }

    var i = a
    var j = b
    var leftProd = 1
    var rightProd = 1

    if (negatives % 2 == 1) {
        while (nums[i] > 0) {
            leftProd *= nums[i]
            i++
        }
        while (nums[j] > 0) {
            rightProd *= nums[j]
            j--
        }

        if (i == j) {
            return maxOf(leftProd, rightProd)
        }

        return if (-leftProd * nums[i] > -rightProd * nums[j]) {
            for (k in i..j - 1) {
                leftProd *= nums[k]
            }
            leftProd
        } else {
            for (k in j downTo i + 1) {
                rightProd *= nums[k]
            }
            rightProd
        }
    } else {
        var prod = 1
        for (k in a..b) {
            prod *= nums[k]
        }
        return prod
    }
}

fun maxProduct(nums: IntArray): Int {

    var maxProd = Int.MIN_VALUE

    var begin = 0
    var negatives = 0
    for (i in nums.indices) {
        if (nums[i] < 0) {
            negatives++
        }
        if (nums[i] == 0) {
            val prod = processSubarray(begin, i - 1, negatives, nums)
            maxProd = maxOf(prod, maxProd, 0)
            negatives = 0
            begin = i + 1
        }
    }

    val prod = processSubarray(begin, nums.lastIndex, negatives, nums)
    maxProd = maxOf(prod, maxProd)

    return maxProd
}

fun main() {
    println(maxProduct(intArrayOf(2,3,-2,4)))
}

Compiled from "MaximumProductSubarray.kt"
public final class dynamicprogramming.MaximumProductSubarrayKt {
  public static final int processSubarray(int, int, int, int[]);
    Code:
       0: aload_3
       1: ldc           #9                  // String nums
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: iload_0
       7: iload_1
       8: if_icmple     13
      11: iconst_0
      12: ireturn
      13: iload_0
      14: iload_1
      15: if_icmpne     22
      18: aload_3
      19: iload_0
      20: iaload
      21: ireturn
      22: iload_0
      23: istore        4
      25: iload_1
      26: istore        5
      28: iconst_1
      29: istore        6
      31: iconst_1
      32: istore        7
      34: iload_2
      35: iconst_2
      36: irem
      37: iconst_1
      38: if_icmpne     205
      41: aload_3
      42: iload         4
      44: iaload
      45: ifle          63
      48: iload         6
      50: aload_3
      51: iload         4
      53: iaload
      54: imul
      55: istore        6
      57: iinc          4, 1
      60: goto          41
      63: aload_3
      64: iload         5
      66: iaload
      67: ifle          85
      70: iload         7
      72: aload_3
      73: iload         5
      75: iaload
      76: imul
      77: istore        7
      79: iinc          5, -1
      82: goto          63
      85: iload         4
      87: iload         5
      89: if_icmpne     100
      92: iload         6
      94: iload         7
      96: invokestatic  #21                 // Method java/lang/Math.max:(II)I
      99: ireturn
     100: iload         6
     102: ineg
     103: aload_3
     104: iload         4
     106: iaload
     107: imul
     108: iload         7
     110: ineg
     111: aload_3
     112: iload         5
     114: iaload
     115: imul
     116: if_icmple     163
     119: iload         4
     121: istore        8
     123: iload         5
     125: iconst_1
     126: isub
     127: istore        9
     129: iload         8
     131: iload         9
     133: if_icmpgt     158
     136: iload         6
     138: aload_3
     139: iload         8
     141: iaload
     142: imul
     143: istore        6
     145: iload         8
     147: iload         9
     149: if_icmpeq     158
     152: iinc          8, 1
     155: goto          136
     158: iload         6
     160: goto          204
     163: iload         5
     165: istore        8
     167: iload         4
     169: iconst_1
     170: iadd
     171: istore        9
     173: iload         9
     175: iload         8
     177: if_icmpgt     202
     180: iload         7
     182: aload_3
     183: iload         8
     185: iaload
     186: imul
     187: istore        7
     189: iload         8
     191: iload         9
     193: if_icmpeq     202
     196: iinc          8, -1
     199: goto          180
     202: iload         7
     204: ireturn
     205: iconst_1
     206: istore        8
     208: iload_0
     209: istore        9
     211: iload         9
     213: iload_1
     214: if_icmpgt     238
     217: iload         8
     219: aload_3
     220: iload         9
     222: iaload
     223: imul
     224: istore        8
     226: iload         9
     228: iload_1
     229: if_icmpeq     238
     232: iinc          9, 1
     235: goto          217
     238: iload         8
     240: ireturn

  public static final int maxProduct(int[]);
    Code:
       0: aload_0
       1: ldc           #9                  // String nums
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: ldc           #36                 // int -2147483648
       8: istore_1
       9: iconst_0
      10: istore_2
      11: iconst_0
      12: istore_3
      13: iconst_0
      14: istore        4
      16: aload_0
      17: arraylength
      18: istore        5
      20: iload         4
      22: iload         5
      24: if_icmpge     80
      27: aload_0
      28: iload         4
      30: iaload
      31: ifge          37
      34: iinc          3, 1
      37: aload_0
      38: iload         4
      40: iaload
      41: ifne          74
      44: iload_2
      45: iload         4
      47: iconst_1
      48: isub
      49: iload_3
      50: aload_0
      51: invokestatic  #38                 // Method processSubarray:(III[I)I
      54: istore        6
      56: iload         6
      58: iload_1
      59: iconst_0
      60: invokestatic  #21                 // Method java/lang/Math.max:(II)I
      63: invokestatic  #21                 // Method java/lang/Math.max:(II)I
      66: istore_1
      67: iconst_0
      68: istore_3
      69: iload         4
      71: iconst_1
      72: iadd
      73: istore_2
      74: iinc          4, 1
      77: goto          20
      80: iload_2
      81: aload_0
      82: invokestatic  #43                 // Method kotlin/collections/ArraysKt.getLastIndex:([I)I
      85: iload_3
      86: aload_0
      87: invokestatic  #38                 // Method processSubarray:(III[I)I
      90: istore        4
      92: iload         4
      94: iload_1
      95: invokestatic  #21                 // Method java/lang/Math.max:(II)I
      98: istore_1
      99: iload_1
     100: ireturn

  public static final void main();
    Code:
       0: iconst_4
       1: newarray       int
       3: astore_0
       4: aload_0
       5: iconst_0
       6: iconst_2
       7: iastore
       8: aload_0
       9: iconst_1
      10: iconst_3
      11: iastore
      12: aload_0
      13: iconst_2
      14: bipush        -2
      16: iastore
      17: aload_0
      18: iconst_3
      19: iconst_4
      20: iastore
      21: aload_0
      22: invokestatic  #49                 // Method maxProduct:([I)I
      25: istore_0
      26: getstatic     #55                 // Field java/lang/System.out:Ljava/io/PrintStream;
      29: iload_0
      30: invokevirtual #61                 // Method java/io/PrintStream.println:(I)V
      33: return

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


package arraysandstrings

fun isValid(arr: IntArray): Boolean {
    var hour = arr[0] * 10 + arr[1]
    var minute = arr[2] * 10 + arr[3]
    return hour < 24 && minute < 60
}

fun totalMinutes(arr: IntArray): Int {
    var hour = arr[0] * 10 + arr[1]
    var minute = arr[2] * 10 + arr[3]
    return  hour * 60 + minute
}

fun diff(minutes1: Int, minutes2: Int): Int {
    return when {
            minutes2 > minutes1 -> minutes2 - minutes1
            minutes2 > minutes1 -> 60*24 - minutes1 + minutes2
        else -> 60*24
    }
}

var base: Int = 0
var baseArr: IntArray = intArrayOf()
var minDiff = 60*24 + 1
var res: IntArray = intArrayOf()

fun Char.digitToInt() = this.toInt() - '0'.toInt()

fun traverse(arr: IntArray, start: Int) {
    if (start > arr.lastIndex) {
        if (isValid(arr)) {
            val curDiff = diff(base, totalMinutes(arr))
            if (curDiff in 1 until minDiff) {
                minDiff = curDiff
                res = arr
            }
            //println(arr.contentToString())
        }
        return
    }

    for (j in baseArr.indices) {
        val newArr = arr.clone()
        newArr[start] = baseArr[j]
        traverse(newArr, start + 1)
    }
}

fun nextClosestTime(time: String): String {
    val arr = intArrayOf(
        time[0].digitToInt(),
        time[1].digitToInt(),
        time[3].digitToInt(),
        time[4].digitToInt())

    base = totalMinutes(arr)
    baseArr = arr.clone()
    traverse(arr, 0)
    return "${res[0]}${res[1]}:${res[2]}${res[3]}"
}

fun main() {
    println(nextClosestTime("19:34"))
}

Compiled from "NextClosestTime.kt"
public final class arraysandstrings.NextClosestTimeKt {
  private static int base;

  private static int[] baseArr;

  private static int minDiff;

  private static int[] res;

  public static final boolean isValid(int[]);
    Code:
       0: aload_0
       1: ldc           #9                  // String arr
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: iconst_0
       8: iaload
       9: bipush        10
      11: imul
      12: aload_0
      13: iconst_1
      14: iaload
      15: iadd
      16: istore_1
      17: aload_0
      18: iconst_2
      19: iaload
      20: bipush        10
      22: imul
      23: aload_0
      24: iconst_3
      25: iaload
      26: iadd
      27: istore_2
      28: iload_1
      29: bipush        24
      31: if_icmpge     44
      34: iload_2
      35: bipush        60
      37: if_icmpge     44
      40: iconst_1
      41: goto          45
      44: iconst_0
      45: ireturn

  public static final int totalMinutes(int[]);
    Code:
       0: aload_0
       1: ldc           #9                  // String arr
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: iconst_0
       8: iaload
       9: bipush        10
      11: imul
      12: aload_0
      13: iconst_1
      14: iaload
      15: iadd
      16: istore_1
      17: aload_0
      18: iconst_2
      19: iaload
      20: bipush        10
      22: imul
      23: aload_0
      24: iconst_3
      25: iaload
      26: iadd
      27: istore_2
      28: iload_1
      29: bipush        60
      31: imul
      32: iload_2
      33: iadd
      34: ireturn

  public static final int diff(int, int);
    Code:
       0: nop
       1: iload_1
       2: iload_0
       3: if_icmple     12
       6: iload_1
       7: iload_0
       8: isub
       9: goto          30
      12: iload_1
      13: iload_0
      14: if_icmple     27
      17: sipush        1440
      20: iload_0
      21: isub
      22: iload_1
      23: iadd
      24: goto          30
      27: sipush        1440
      30: ireturn

  public static final int getBase();
    Code:
       0: getstatic     #30                 // Field base:I
       3: ireturn

  public static final void setBase(int);
    Code:
       0: iload_0
       1: putstatic     #30                 // Field base:I
       4: return

  public static final int[] getBaseArr();
    Code:
       0: getstatic     #38                 // Field baseArr:[I
       3: areturn

  public static final void setBaseArr(int[]);
    Code:
       0: aload_0
       1: ldc           #41                 // String <set-?>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: putstatic     #38                 // Field baseArr:[I
      10: return

  public static final int getMinDiff();
    Code:
       0: getstatic     #45                 // Field minDiff:I
       3: ireturn

  public static final void setMinDiff(int);
    Code:
       0: iload_0
       1: putstatic     #45                 // Field minDiff:I
       4: return

  public static final int[] getRes();
    Code:
       0: getstatic     #50                 // Field res:[I
       3: areturn

  public static final void setRes(int[]);
    Code:
       0: aload_0
       1: ldc           #41                 // String <set-?>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: putstatic     #50                 // Field res:[I
      10: return

  public static final int digitToInt(char);
    Code:
       0: iload_0
       1: bipush        48
       3: isub
       4: ireturn

  public static final void traverse(int[], int);
    Code:
       0: aload_0
       1: ldc           #9                  // String arr
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: iload_1
       7: aload_0
       8: invokestatic  #62                 // Method kotlin/collections/ArraysKt.getLastIndex:([I)I
      11: if_icmple     65
      14: aload_0
      15: invokestatic  #64                 // Method isValid:([I)Z
      18: ifeq          64
      21: getstatic     #30                 // Field base:I
      24: aload_0
      25: invokestatic  #66                 // Method totalMinutes:([I)I
      28: invokestatic  #68                 // Method diff:(II)I
      31: istore_2
      32: iconst_1
      33: iload_2
      34: if_icmpgt     52
      37: iload_2
      38: getstatic     #45                 // Field minDiff:I
      41: if_icmpge     48
      44: iconst_1
      45: goto          53
      48: iconst_0
      49: goto          53
      52: iconst_0
      53: ifeq          64
      56: iload_2
      57: putstatic     #45                 // Field minDiff:I
      60: aload_0
      61: putstatic     #50                 // Field res:[I
      64: return
      65: iconst_0
      66: istore_2
      67: getstatic     #38                 // Field baseArr:[I
      70: arraylength
      71: istore_3
      72: iload_2
      73: iload_3
      74: if_icmpge     109
      77: aload_0
      78: invokevirtual #72                 // Method java/lang/Object.clone:()Ljava/lang/Object;
      81: checkcast     #73                 // class "[I"
      84: astore        4
      86: aload         4
      88: iload_1
      89: getstatic     #38                 // Field baseArr:[I
      92: iload_2
      93: iaload
      94: iastore
      95: aload         4
      97: iload_1
      98: iconst_1
      99: iadd
     100: invokestatic  #75                 // Method traverse:([II)V
     103: iinc          2, 1
     106: goto          72
     109: return

  public static final java.lang.String nextClosestTime(java.lang.String);
    Code:
       0: aload_0
       1: ldc           #83                 // String time
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: iconst_4
       7: newarray       int
       9: astore_2
      10: aload_2
      11: iconst_0
      12: aload_0
      13: iconst_0
      14: invokevirtual #89                 // Method java/lang/String.charAt:(I)C
      17: invokestatic  #91                 // Method digitToInt:(C)I
      20: iastore
      21: aload_2
      22: iconst_1
      23: aload_0
      24: iconst_1
      25: invokevirtual #89                 // Method java/lang/String.charAt:(I)C
      28: invokestatic  #91                 // Method digitToInt:(C)I
      31: iastore
      32: aload_2
      33: iconst_2
      34: aload_0
      35: iconst_3
      36: invokevirtual #89                 // Method java/lang/String.charAt:(I)C
      39: invokestatic  #91                 // Method digitToInt:(C)I
      42: iastore
      43: aload_2
      44: iconst_3
      45: aload_0
      46: iconst_4
      47: invokevirtual #89                 // Method java/lang/String.charAt:(I)C
      50: invokestatic  #91                 // Method digitToInt:(C)I
      53: iastore
      54: aload_2
      55: astore_1
      56: aload_1
      57: invokestatic  #66                 // Method totalMinutes:([I)I
      60: putstatic     #30                 // Field base:I
      63: aload_1
      64: invokevirtual #72                 // Method java/lang/Object.clone:()Ljava/lang/Object;
      67: checkcast     #73                 // class "[I"
      70: putstatic     #38                 // Field baseArr:[I
      73: aload_1
      74: iconst_0
      75: invokestatic  #75                 // Method traverse:([II)V
      78: new           #93                 // class java/lang/StringBuilder
      81: dup
      82: invokespecial #97                 // Method java/lang/StringBuilder."<init>":()V
      85: getstatic     #50                 // Field res:[I
      88: iconst_0
      89: iaload
      90: invokevirtual #101                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      93: getstatic     #50                 // Field res:[I
      96: iconst_1
      97: iaload
      98: invokevirtual #101                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     101: bipush        58
     103: invokevirtual #104                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
     106: getstatic     #50                 // Field res:[I
     109: iconst_2
     110: iaload
     111: invokevirtual #101                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     114: getstatic     #50                 // Field res:[I
     117: iconst_3
     118: iaload
     119: invokevirtual #101                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     122: invokevirtual #108                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     125: areturn

  public static final void main();
    Code:
       0: ldc           #112                // String 19:34
       2: invokestatic  #114                // Method nextClosestTime:(Ljava/lang/String;)Ljava/lang/String;
       5: getstatic     #120                // Field java/lang/System.out:Ljava/io/PrintStream;
       8: swap
       9: invokevirtual #126                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      12: return

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

  static {};
    Code:
       0: iconst_0
       1: newarray       int
       3: putstatic     #38                 // Field baseArr:[I
       6: sipush        1441
       9: putstatic     #45                 // Field minDiff:I
      12: iconst_0
      13: newarray       int
      15: putstatic     #50                 // Field res:[I
      18: return
}


package arraysandstrings

import java.util.PriorityQueue

fun mincostToHireWorkers(quality: IntArray, wage: IntArray, k: Int): Double {
    val x = wage.indices.sortedWith {a, b ->
            val ra = wage[a].toDouble() / quality[a].toDouble()
            val rb = wage[b].toDouble() / quality[b].toDouble()
            if (ra < rb) -1 else 1
        }

    val pq = PriorityQueue<Int>(k) {a, b -> b - a}

    var minGroupPay = Double.MAX_VALUE
    var sum = 0

    for (i in x.indices) {
        val cost = wage[x[i]].toDouble() / quality[x[i]].toDouble()
        pq.add(quality[x[i]])
        sum += quality[x[i]]
        if (pq.size > k) {
            sum -= pq.poll()
        }
        if (pq.size == k) {
            minGroupPay = minOf(sum.toDouble() * cost, minGroupPay)
        }
    }
    return minGroupPay
}

fun main() {
    println(mincostToHireWorkers(intArrayOf(10,20,5), intArrayOf(70,50,30), 2))
}

Compiled from "MinimumCostToHireKWorkers.kt"
public final class arraysandstrings.MinimumCostToHireKWorkersKt {
  public static final double mincostToHireWorkers(int[], int[], int);
    Code:
       0: aload_0
       1: ldc           #9                  // String quality
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #17                 // String wage
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_1
      13: invokestatic  #23                 // Method kotlin/collections/ArraysKt.getIndices:([I)Lkotlin/ranges/IntRange;
      16: checkcast     #25                 // class java/lang/Iterable
      19: aload_1
      20: aload_0
      21: invokedynamic #45,  0             // InvokeDynamic #0:invoke:([I[I)Lkotlin/jvm/functions/Function2;
      26: invokedynamic #56,  0             // InvokeDynamic #1:compare:(Lkotlin/jvm/functions/Function2;)Ljava/util/Comparator;
      31: invokestatic  #62                 // Method kotlin/collections/CollectionsKt.sortedWith:(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List;
      34: astore_3
      35: new           #64                 // class java/util/PriorityQueue
      38: dup
      39: iload_2
      40: invokedynamic #72,  0             // InvokeDynamic #2:invoke:()Lkotlin/jvm/functions/Function2;
      45: invokedynamic #77,  0             // InvokeDynamic #3:compare:(Lkotlin/jvm/functions/Function2;)Ljava/util/Comparator;
      50: invokespecial #81                 // Method java/util/PriorityQueue."<init>":(ILjava/util/Comparator;)V
      53: astore        4
      55: ldc2_w        #82                 // double 1.7976931348623157E308d
      58: dstore        5
      60: iconst_0
      61: istore        7
      63: iconst_0
      64: istore        8
      66: aload_3
      67: checkcast     #85                 // class java/util/Collection
      70: invokeinterface #89,  1           // InterfaceMethod java/util/Collection.size:()I
      75: istore        9
      77: iload         8
      79: iload         9
      81: if_icmpge     226
      84: aload_1
      85: aload_3
      86: iload         8
      88: invokeinterface #95,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      93: checkcast     #97                 // class java/lang/Number
      96: invokevirtual #100                // Method java/lang/Number.intValue:()I
      99: iaload
     100: i2d
     101: aload_0
     102: aload_3
     103: iload         8
     105: invokeinterface #95,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     110: checkcast     #97                 // class java/lang/Number
     113: invokevirtual #100                // Method java/lang/Number.intValue:()I
     116: iaload
     117: i2d
     118: ddiv
     119: dstore        10
     121: aload         4
     123: aload_0
     124: aload_3
     125: iload         8
     127: invokeinterface #95,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     132: checkcast     #97                 // class java/lang/Number
     135: invokevirtual #100                // Method java/lang/Number.intValue:()I
     138: iaload
     139: invokestatic  #106                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     142: invokevirtual #110                // Method java/util/PriorityQueue.add:(Ljava/lang/Object;)Z
     145: pop
     146: iload         7
     148: aload_0
     149: aload_3
     150: iload         8
     152: invokeinterface #95,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     157: checkcast     #97                 // class java/lang/Number
     160: invokevirtual #100                // Method java/lang/Number.intValue:()I
     163: iaload
     164: iadd
     165: istore        7
     167: aload         4
     169: invokevirtual #111                // Method java/util/PriorityQueue.size:()I
     172: iload_2
     173: if_icmple     198
     176: iload         7
     178: aload         4
     180: invokevirtual #115                // Method java/util/PriorityQueue.poll:()Ljava/lang/Object;
     183: dup
     184: ldc           #117                // String poll(...)
     186: invokestatic  #120                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
     189: checkcast     #97                 // class java/lang/Number
     192: invokevirtual #100                // Method java/lang/Number.intValue:()I
     195: isub
     196: istore        7
     198: aload         4
     200: invokevirtual #111                // Method java/util/PriorityQueue.size:()I
     203: iload_2
     204: if_icmpne     220
     207: iload         7
     209: i2d
     210: dload         10
     212: dmul
     213: dload         5
     215: invokestatic  #126                // Method java/lang/Math.min:(DD)D
     218: dstore        5
     220: iinc          8, 1
     223: goto          77
     226: dload         5
     228: dreturn

  public static final void main();
    Code:
       0: iconst_3
       1: newarray       int
       3: astore_0
       4: aload_0
       5: iconst_0
       6: bipush        10
       8: iastore
       9: aload_0
      10: iconst_1
      11: bipush        20
      13: iastore
      14: aload_0
      15: iconst_2
      16: iconst_5
      17: iastore
      18: aload_0
      19: iconst_3
      20: newarray       int
      22: astore_0
      23: aload_0
      24: iconst_0
      25: bipush        70
      27: iastore
      28: aload_0
      29: iconst_1
      30: bipush        50
      32: iastore
      33: aload_0
      34: iconst_2
      35: bipush        30
      37: iastore
      38: aload_0
      39: iconst_2
      40: invokestatic  #143                // Method mincostToHireWorkers:([I[II)D
      43: dstore_0
      44: getstatic     #149                // Field java/lang/System.out:Ljava/io/PrintStream;
      47: dload_0
      48: invokevirtual #155                // Method java/io/PrintStream.println:(D)V
      51: return

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

  private static final int mincostToHireWorkers$lambda$0(int[], int[], java.lang.Integer, java.lang.Integer);
    Code:
       0: aload_0
       1: aload_2
       2: invokestatic  #164                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
       5: aload_2
       6: invokevirtual #165                // Method java/lang/Integer.intValue:()I
       9: iaload
      10: i2d
      11: aload_1
      12: aload_2
      13: invokevirtual #165                // Method java/lang/Integer.intValue:()I
      16: iaload
      17: i2d
      18: ddiv
      19: dstore        4
      21: aload_0
      22: aload_3
      23: invokestatic  #164                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
      26: aload_3
      27: invokevirtual #165                // Method java/lang/Integer.intValue:()I
      30: iaload
      31: i2d
      32: aload_1
      33: aload_3
      34: invokevirtual #165                // Method java/lang/Integer.intValue:()I
      37: iaload
      38: i2d
      39: ddiv
      40: dstore        6
      42: dload         4
      44: dload         6
      46: dcmpg
      47: ifge          54
      50: iconst_m1
      51: goto          55
      54: iconst_1
      55: ireturn

  private static final int mincostToHireWorkers$lambda$1(kotlin.jvm.functions.Function2, java.lang.Object, java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: aload_2
       3: invokeinterface #176,  3          // InterfaceMethod kotlin/jvm/functions/Function2.invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       8: checkcast     #97                 // class java/lang/Number
      11: invokevirtual #100                // Method java/lang/Number.intValue:()I
      14: ireturn

  private static final int mincostToHireWorkers$lambda$2(java.lang.Integer, java.lang.Integer);
    Code:
       0: aload_1
       1: invokevirtual #165                // Method java/lang/Integer.intValue:()I
       4: aload_0
       5: invokestatic  #164                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
       8: aload_0
       9: invokevirtual #165                // Method java/lang/Integer.intValue:()I
      12: isub
      13: ireturn

  private static final int mincostToHireWorkers$lambda$3(kotlin.jvm.functions.Function2, java.lang.Object, java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: aload_2
       3: invokeinterface #176,  3          // InterfaceMethod kotlin/jvm/functions/Function2.invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       8: checkcast     #97                 // class java/lang/Number
      11: invokevirtual #100                // Method java/lang/Number.intValue:()I
      14: ireturn
}


package de.lostmekka.raymarcher

import kotlin.math.abs
import kotlin.math.cos
import kotlin.math.sin
import kotlin.math.sqrt

data class Point(val x: Double, val y: Double, val z: Double) {
    constructor(x: Number, y: Number, z: Number) : this(x.toDouble(), y.toDouble(), z.toDouble())

    val length by lazy { sqrt(squaredLength) }
    val squaredLength by lazy { x * x + y * y + z * z }
    val isNormalized by lazy { squaredLength == 1.0 }
    val absoluteValue: Point by lazy { Point(abs(x), abs(y), abs(z)) }
    val normalized: Point by lazy { length.takeIf { it != 0.0 }?.let { Point(x / it, y / it, z / it) } ?: Point.zero }

    companion object {
        val zero = Point(.0, .0, .0)
        val right = Point(1.0, .0, .0)
        val left = Point(-1.0, .0, .0)
        val up = Point(.0, 1.0, .0)
        val down = Point(.0, -1.0, .0)
        val forward = Point(.0, .0, 1.0)
        val backward = Point(.0, .0, -1.0)
    }
}

operator fun Point.plus(other: Point) = Point(x + other.x, y + other.y, z + other.z)
operator fun Point.minus(other: Point) = Point(x - other.x, y - other.y, z - other.z)
operator fun Point.unaryMinus() = Point(-x, -y, -z)
operator fun Point.times(scalar: Double) = Point(x * scalar, y * scalar, z * scalar)
operator fun Point.div(scalar: Double) = Point(x / scalar, y / scalar, z / scalar)

infix fun Point.dot(other: Point) = x * other.x + y * other.y + z * other.z
infix fun Point.cross(other: Point) = Point(
    x * other.z - z * other.y,
    z * other.x - x * other.z,
    x * other.y - y * other.x
)

private fun square(scalar: Double) = scalar * scalar
infix fun Point.distanceTo(other: Point) = sqrt(squaredDistanceTo(other))
infix fun Point.squaredDistanceTo(other: Point) = square(x - other.x) + square(y - other.y) + square(z - other.z)

infix fun Point.floorMod(other: Point) = Point(
    (x % other.x + other.x) % other.x,
    (y % other.y + other.y) % other.y,
    (z % other.z + other.z) % other.z
)

data class Matrix(
    val a00: Double, val a10: Double, val a20: Double,
    val a01: Double, val a11: Double, val a21: Double,
    val a02: Double, val a12: Double, val a22: Double
)

operator fun Matrix.times(p: Point) = Point(
    a00 * p.x + a10 * p.y + a20 * p.z,
    a01 * p.x + a11 * p.y + a21 * p.z,
    a02 * p.x + a12 * p.y + a22 * p.z
)

fun xRotationMatrix(angle: Double): Matrix {
    val sin = sin(angle)
    val cos = cos(angle)
    return Matrix(
        1.0, 0.0, 0.0,
        0.0, cos, -sin,
        0.0, sin, cos
    )
}

fun yRotationMatrix(angle: Double): Matrix {
    val sin = sin(angle)
    val cos = cos(angle)
    return Matrix(
        cos, 0.0, sin,
        0.0, 1.0, 0.0,
        -sin, 0.0, cos
    )
}

fun zRotationMatrix(angle: Double): Matrix {
    val sin = sin(angle)
    val cos = cos(angle)
    return Matrix(
        cos, -sin, 0.0,
        sin, cos, 0.0,
        0.0, 0.0, 1.0
    )
}

Compiled from "Point.kt"
public final class de.lostmekka.raymarcher.PointKt {
  public static final de.lostmekka.raymarcher.Point plus(de.lostmekka.raymarcher.Point, de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #17                 // String other
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: new           #19                 // class de/lostmekka/raymarcher/Point
      15: dup
      16: aload_0
      17: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      20: aload_1
      21: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      24: dadd
      25: aload_0
      26: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      29: aload_1
      30: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      33: dadd
      34: aload_0
      35: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      38: aload_1
      39: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      42: dadd
      43: invokespecial #33                 // Method de/lostmekka/raymarcher/Point."<init>":(DDD)V
      46: areturn

  public static final de.lostmekka.raymarcher.Point minus(de.lostmekka.raymarcher.Point, de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #17                 // String other
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: new           #19                 // class de/lostmekka/raymarcher/Point
      15: dup
      16: aload_0
      17: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      20: aload_1
      21: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      24: dsub
      25: aload_0
      26: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      29: aload_1
      30: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      33: dsub
      34: aload_0
      35: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      38: aload_1
      39: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      42: dsub
      43: invokespecial #33                 // Method de/lostmekka/raymarcher/Point."<init>":(DDD)V
      46: areturn

  public static final de.lostmekka.raymarcher.Point unaryMinus(de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #19                 // class de/lostmekka/raymarcher/Point
       9: dup
      10: aload_0
      11: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      14: dneg
      15: aload_0
      16: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      19: dneg
      20: aload_0
      21: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      24: dneg
      25: invokespecial #33                 // Method de/lostmekka/raymarcher/Point."<init>":(DDD)V
      28: areturn

  public static final de.lostmekka.raymarcher.Point times(de.lostmekka.raymarcher.Point, double);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #19                 // class de/lostmekka/raymarcher/Point
       9: dup
      10: aload_0
      11: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      14: dload_1
      15: dmul
      16: aload_0
      17: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      20: dload_1
      21: dmul
      22: aload_0
      23: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      26: dload_1
      27: dmul
      28: invokespecial #33                 // Method de/lostmekka/raymarcher/Point."<init>":(DDD)V
      31: areturn

  public static final de.lostmekka.raymarcher.Point div(de.lostmekka.raymarcher.Point, double);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #19                 // class de/lostmekka/raymarcher/Point
       9: dup
      10: aload_0
      11: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      14: dload_1
      15: ddiv
      16: aload_0
      17: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      20: dload_1
      21: ddiv
      22: aload_0
      23: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      26: dload_1
      27: ddiv
      28: invokespecial #33                 // Method de/lostmekka/raymarcher/Point."<init>":(DDD)V
      31: areturn

  public static final double dot(de.lostmekka.raymarcher.Point, de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #17                 // String other
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_0
      13: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      16: aload_1
      17: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      20: dmul
      21: aload_0
      22: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      25: aload_1
      26: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      29: dmul
      30: dadd
      31: aload_0
      32: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      35: aload_1
      36: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      39: dmul
      40: dadd
      41: dreturn

  public static final de.lostmekka.raymarcher.Point cross(de.lostmekka.raymarcher.Point, de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #17                 // String other
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: new           #19                 // class de/lostmekka/raymarcher/Point
      15: dup
      16: aload_0
      17: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      20: aload_1
      21: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      24: dmul
      25: aload_0
      26: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      29: aload_1
      30: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      33: dmul
      34: dsub
      35: aload_0
      36: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      39: aload_1
      40: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      43: dmul
      44: aload_0
      45: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      48: aload_1
      49: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      52: dmul
      53: dsub
      54: aload_0
      55: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      58: aload_1
      59: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      62: dmul
      63: aload_0
      64: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      67: aload_1
      68: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      71: dmul
      72: dsub
      73: invokespecial #33                 // Method de/lostmekka/raymarcher/Point."<init>":(DDD)V
      76: areturn

  private static final double square(double);
    Code:
       0: dload_0
       1: dload_0
       2: dmul
       3: dreturn

  public static final double distanceTo(de.lostmekka.raymarcher.Point, de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #17                 // String other
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_0
      13: aload_1
      14: invokestatic  #58                 // Method squaredDistanceTo:(Lde/lostmekka/raymarcher/Point;Lde/lostmekka/raymarcher/Point;)D
      17: invokestatic  #63                 // Method java/lang/Math.sqrt:(D)D
      20: dreturn

  public static final double squaredDistanceTo(de.lostmekka.raymarcher.Point, de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #17                 // String other
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_0
      13: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      16: aload_1
      17: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      20: dsub
      21: invokestatic  #66                 // Method square:(D)D
      24: aload_0
      25: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      28: aload_1
      29: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      32: dsub
      33: invokestatic  #66                 // Method square:(D)D
      36: dadd
      37: aload_0
      38: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      41: aload_1
      42: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      45: dsub
      46: invokestatic  #66                 // Method square:(D)D
      49: dadd
      50: dreturn

  public static final de.lostmekka.raymarcher.Point floorMod(de.lostmekka.raymarcher.Point, de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #17                 // String other
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: new           #19                 // class de/lostmekka/raymarcher/Point
      15: dup
      16: aload_0
      17: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      20: aload_1
      21: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      24: drem
      25: aload_1
      26: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      29: dadd
      30: aload_1
      31: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      34: drem
      35: aload_0
      36: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      39: aload_1
      40: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      43: drem
      44: aload_1
      45: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      48: dadd
      49: aload_1
      50: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      53: drem
      54: aload_0
      55: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      58: aload_1
      59: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      62: drem
      63: aload_1
      64: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      67: dadd
      68: aload_1
      69: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      72: drem
      73: invokespecial #33                 // Method de/lostmekka/raymarcher/Point."<init>":(DDD)V
      76: areturn

  public static final de.lostmekka.raymarcher.Point times(de.lostmekka.raymarcher.Matrix, de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: ldc           #9                  // String <this>
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #72                 // String p
       9: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: new           #19                 // class de/lostmekka/raymarcher/Point
      15: dup
      16: aload_0
      17: invokevirtual #77                 // Method de/lostmekka/raymarcher/Matrix.getA00:()D
      20: aload_1
      21: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      24: dmul
      25: aload_0
      26: invokevirtual #80                 // Method de/lostmekka/raymarcher/Matrix.getA10:()D
      29: aload_1
      30: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      33: dmul
      34: dadd
      35: aload_0
      36: invokevirtual #83                 // Method de/lostmekka/raymarcher/Matrix.getA20:()D
      39: aload_1
      40: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      43: dmul
      44: dadd
      45: aload_0
      46: invokevirtual #86                 // Method de/lostmekka/raymarcher/Matrix.getA01:()D
      49: aload_1
      50: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      53: dmul
      54: aload_0
      55: invokevirtual #89                 // Method de/lostmekka/raymarcher/Matrix.getA11:()D
      58: aload_1
      59: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      62: dmul
      63: dadd
      64: aload_0
      65: invokevirtual #92                 // Method de/lostmekka/raymarcher/Matrix.getA21:()D
      68: aload_1
      69: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
      72: dmul
      73: dadd
      74: aload_0
      75: invokevirtual #95                 // Method de/lostmekka/raymarcher/Matrix.getA02:()D
      78: aload_1
      79: invokevirtual #23                 // Method de/lostmekka/raymarcher/Point.getX:()D
      82: dmul
      83: aload_0
      84: invokevirtual #98                 // Method de/lostmekka/raymarcher/Matrix.getA12:()D
      87: aload_1
      88: invokevirtual #26                 // Method de/lostmekka/raymarcher/Point.getY:()D
      91: dmul
      92: dadd
      93: aload_0
      94: invokevirtual #101                // Method de/lostmekka/raymarcher/Matrix.getA22:()D
      97: aload_1
      98: invokevirtual #29                 // Method de/lostmekka/raymarcher/Point.getZ:()D
     101: dmul
     102: dadd
     103: invokespecial #33                 // Method de/lostmekka/raymarcher/Point."<init>":(DDD)V
     106: areturn

  public static final de.lostmekka.raymarcher.Matrix xRotationMatrix(double);
    Code:
       0: dload_0
       1: invokestatic  #107                // Method java/lang/Math.sin:(D)D
       4: dstore_2
       5: dload_0
       6: invokestatic  #110                // Method java/lang/Math.cos:(D)D
       9: dstore        4
      11: new           #74                 // class de/lostmekka/raymarcher/Matrix
      14: dup
      15: dconst_1
      16: dconst_0
      17: dconst_0
      18: dconst_0
      19: dload         4
      21: dload_2
      22: dneg
      23: dconst_0
      24: dload_2
      25: dload         4
      27: invokespecial #113                // Method de/lostmekka/raymarcher/Matrix."<init>":(DDDDDDDDD)V
      30: areturn

  public static final de.lostmekka.raymarcher.Matrix yRotationMatrix(double);
    Code:
       0: dload_0
       1: invokestatic  #107                // Method java/lang/Math.sin:(D)D
       4: dstore_2
       5: dload_0
       6: invokestatic  #110                // Method java/lang/Math.cos:(D)D
       9: dstore        4
      11: new           #74                 // class de/lostmekka/raymarcher/Matrix
      14: dup
      15: dload         4
      17: dconst_0
      18: dload_2
      19: dconst_0
      20: dconst_1
      21: dconst_0
      22: dload_2
      23: dneg
      24: dconst_0
      25: dload         4
      27: invokespecial #113                // Method de/lostmekka/raymarcher/Matrix."<init>":(DDDDDDDDD)V
      30: areturn

  public static final de.lostmekka.raymarcher.Matrix zRotationMatrix(double);
    Code:
       0: dload_0
       1: invokestatic  #107                // Method java/lang/Math.sin:(D)D
       4: dstore_2
       5: dload_0
       6: invokestatic  #110                // Method java/lang/Math.cos:(D)D
       9: dstore        4
      11: new           #74                 // class de/lostmekka/raymarcher/Matrix
      14: dup
      15: dload         4
      17: dload_2
      18: dneg
      19: dconst_0
      20: dload_2
      21: dload         4
      23: dconst_0
      24: dconst_0
      25: dconst_0
      26: dconst_1
      27: invokespecial #113                // Method de/lostmekka/raymarcher/Matrix."<init>":(DDDDDDDDD)V
      30: areturn
}

Compiled from "Point.kt"
public final class de.lostmekka.raymarcher.Point$Companion {
  private de.lostmekka.raymarcher.Point$Companion();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final de.lostmekka.raymarcher.Point getZero();
    Code:
       0: invokestatic  #18                 // Method de/lostmekka/raymarcher/Point.access$getZero$cp:()Lde/lostmekka/raymarcher/Point;
       3: areturn

  public final de.lostmekka.raymarcher.Point getRight();
    Code:
       0: invokestatic  #22                 // Method de/lostmekka/raymarcher/Point.access$getRight$cp:()Lde/lostmekka/raymarcher/Point;
       3: areturn

  public final de.lostmekka.raymarcher.Point getLeft();
    Code:
       0: invokestatic  #26                 // Method de/lostmekka/raymarcher/Point.access$getLeft$cp:()Lde/lostmekka/raymarcher/Point;
       3: areturn

  public final de.lostmekka.raymarcher.Point getUp();
    Code:
       0: invokestatic  #30                 // Method de/lostmekka/raymarcher/Point.access$getUp$cp:()Lde/lostmekka/raymarcher/Point;
       3: areturn

  public final de.lostmekka.raymarcher.Point getDown();
    Code:
       0: invokestatic  #34                 // Method de/lostmekka/raymarcher/Point.access$getDown$cp:()Lde/lostmekka/raymarcher/Point;
       3: areturn

  public final de.lostmekka.raymarcher.Point getForward();
    Code:
       0: invokestatic  #38                 // Method de/lostmekka/raymarcher/Point.access$getForward$cp:()Lde/lostmekka/raymarcher/Point;
       3: areturn

  public final de.lostmekka.raymarcher.Point getBackward();
    Code:
       0: invokestatic  #42                 // Method de/lostmekka/raymarcher/Point.access$getBackward$cp:()Lde/lostmekka/raymarcher/Point;
       3: areturn

  public de.lostmekka.raymarcher.Point$Companion(kotlin.jvm.internal.DefaultConstructorMarker);
    Code:
       0: aload_0
       1: invokespecial #44                 // Method "<init>":()V
       4: return
}

Compiled from "Point.kt"
public final class de.lostmekka.raymarcher.Point {
  public static final de.lostmekka.raymarcher.Point$Companion Companion;

  private final double x;

  private final double y;

  private final double z;

  private final kotlin.Lazy length$delegate;

  private final kotlin.Lazy squaredLength$delegate;

  private final kotlin.Lazy isNormalized$delegate;

  private final kotlin.Lazy absoluteValue$delegate;

  private final kotlin.Lazy normalized$delegate;

  private static final de.lostmekka.raymarcher.Point zero;

  private static final de.lostmekka.raymarcher.Point right;

  private static final de.lostmekka.raymarcher.Point left;

  private static final de.lostmekka.raymarcher.Point up;

  private static final de.lostmekka.raymarcher.Point down;

  private static final de.lostmekka.raymarcher.Point forward;

  private static final de.lostmekka.raymarcher.Point backward;

  public de.lostmekka.raymarcher.Point(double, double, double);
    Code:
       0: aload_0
       1: invokespecial #9                  // Method java/lang/Object."<init>":()V
       4: aload_0
       5: dload_1
       6: putfield      #13                 // Field x:D
       9: aload_0
      10: dload_3
      11: putfield      #16                 // Field y:D
      14: aload_0
      15: dload         5
      17: putfield      #19                 // Field z:D
      20: aload_0
      21: aload_0
      22: invokedynamic #39,  0             // InvokeDynamic #0:invoke:(Lde/lostmekka/raymarcher/Point;)Lkotlin/jvm/functions/Function0;
      27: invokestatic  #45                 // Method kotlin/LazyKt.lazy:(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
      30: putfield      #49                 // Field length$delegate:Lkotlin/Lazy;
      33: aload_0
      34: aload_0
      35: invokedynamic #54,  0             // InvokeDynamic #1:invoke:(Lde/lostmekka/raymarcher/Point;)Lkotlin/jvm/functions/Function0;
      40: invokestatic  #45                 // Method kotlin/LazyKt.lazy:(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
      43: putfield      #57                 // Field squaredLength$delegate:Lkotlin/Lazy;
      46: aload_0
      47: aload_0
      48: invokedynamic #65,  0             // InvokeDynamic #2:invoke:(Lde/lostmekka/raymarcher/Point;)Lkotlin/jvm/functions/Function0;
      53: invokestatic  #45                 // Method kotlin/LazyKt.lazy:(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
      56: putfield      #68                 // Field isNormalized$delegate:Lkotlin/Lazy;
      59: aload_0
      60: aload_0
      61: invokedynamic #76,  0             // InvokeDynamic #3:invoke:(Lde/lostmekka/raymarcher/Point;)Lkotlin/jvm/functions/Function0;
      66: invokestatic  #45                 // Method kotlin/LazyKt.lazy:(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
      69: putfield      #79                 // Field absoluteValue$delegate:Lkotlin/Lazy;
      72: aload_0
      73: aload_0
      74: invokedynamic #84,  0             // InvokeDynamic #4:invoke:(Lde/lostmekka/raymarcher/Point;)Lkotlin/jvm/functions/Function0;
      79: invokestatic  #45                 // Method kotlin/LazyKt.lazy:(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy;
      82: putfield      #87                 // Field normalized$delegate:Lkotlin/Lazy;
      85: return

  public final double getX();
    Code:
       0: aload_0
       1: getfield      #13                 // Field x:D
       4: dreturn

  public final double getY();
    Code:
       0: aload_0
       1: getfield      #16                 // Field y:D
       4: dreturn

  public final double getZ();
    Code:
       0: aload_0
       1: getfield      #19                 // Field z:D
       4: dreturn

  public de.lostmekka.raymarcher.Point(java.lang.Number, java.lang.Number, java.lang.Number);
    Code:
       0: aload_1
       1: ldc           #96                 // String x
       3: invokestatic  #102                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #103                // String y
       9: invokestatic  #102                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_3
      13: ldc           #104                // String z
      15: invokestatic  #102                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      18: aload_0
      19: aload_1
      20: invokevirtual #109                // Method java/lang/Number.doubleValue:()D
      23: aload_2
      24: invokevirtual #109                // Method java/lang/Number.doubleValue:()D
      27: aload_3
      28: invokevirtual #109                // Method java/lang/Number.doubleValue:()D
      31: invokespecial #111                // Method "<init>":(DDD)V
      34: return

  public final double getLength();
    Code:
       0: aload_0
       1: getfield      #49                 // Field length$delegate:Lkotlin/Lazy;
       4: astore_1
       5: aload_1
       6: invokeinterface #118,  1          // InterfaceMethod kotlin/Lazy.getValue:()Ljava/lang/Object;
      11: checkcast     #106                // class java/lang/Number
      14: invokevirtual #109                // Method java/lang/Number.doubleValue:()D
      17: dreturn

  public final double getSquaredLength();
    Code:
       0: aload_0
       1: getfield      #57                 // Field squaredLength$delegate:Lkotlin/Lazy;
       4: astore_1
       5: aload_1
       6: invokeinterface #118,  1          // InterfaceMethod kotlin/Lazy.getValue:()Ljava/lang/Object;
      11: checkcast     #106                // class java/lang/Number
      14: invokevirtual #109                // Method java/lang/Number.doubleValue:()D
      17: dreturn

  public final boolean isNormalized();
    Code:
       0: aload_0
       1: getfield      #68                 // Field isNormalized$delegate:Lkotlin/Lazy;
       4: astore_1
       5: aload_1
       6: invokeinterface #118,  1          // InterfaceMethod kotlin/Lazy.getValue:()Ljava/lang/Object;
      11: checkcast     #123                // class java/lang/Boolean
      14: invokevirtual #126                // Method java/lang/Boolean.booleanValue:()Z
      17: ireturn

  public final de.lostmekka.raymarcher.Point getAbsoluteValue();
    Code:
       0: aload_0
       1: getfield      #79                 // Field absoluteValue$delegate:Lkotlin/Lazy;
       4: astore_1
       5: aload_1
       6: invokeinterface #118,  1          // InterfaceMethod kotlin/Lazy.getValue:()Ljava/lang/Object;
      11: checkcast     #2                  // class de/lostmekka/raymarcher/Point
      14: areturn

  public final de.lostmekka.raymarcher.Point getNormalized();
    Code:
       0: aload_0
       1: getfield      #87                 // Field normalized$delegate:Lkotlin/Lazy;
       4: astore_1
       5: aload_1
       6: invokeinterface #118,  1          // InterfaceMethod kotlin/Lazy.getValue:()Ljava/lang/Object;
      11: checkcast     #2                  // class de/lostmekka/raymarcher/Point
      14: areturn

  public final double component1();
    Code:
       0: aload_0
       1: getfield      #13                 // Field x:D
       4: dreturn

  public final double component2();
    Code:
       0: aload_0
       1: getfield      #16                 // Field y:D
       4: dreturn

  public final double component3();
    Code:
       0: aload_0
       1: getfield      #19                 // Field z:D
       4: dreturn

  public final de.lostmekka.raymarcher.Point copy(double, double, double);
    Code:
       0: new           #2                  // class de/lostmekka/raymarcher/Point
       3: dup
       4: dload_1
       5: dload_3
       6: dload         5
       8: invokespecial #111                // Method "<init>":(DDD)V
      11: areturn

  public static de.lostmekka.raymarcher.Point copy$default(de.lostmekka.raymarcher.Point, double, double, double, int, java.lang.Object);
    Code:
       0: iload         7
       2: iconst_1
       3: iand
       4: ifeq          12
       7: aload_0
       8: getfield      #13                 // Field x:D
      11: dstore_1
      12: iload         7
      14: iconst_2
      15: iand
      16: ifeq          24
      19: aload_0
      20: getfield      #16                 // Field y:D
      23: dstore_3
      24: iload         7
      26: iconst_4
      27: iand
      28: ifeq          37
      31: aload_0
      32: getfield      #19                 // Field z:D
      35: dstore        5
      37: aload_0
      38: dload_1
      39: dload_3
      40: dload         5
      42: invokevirtual #137                // Method copy:(DDD)Lde/lostmekka/raymarcher/Point;
      45: areturn

  public java.lang.String toString();
    Code:
       0: new           #141                // class java/lang/StringBuilder
       3: dup
       4: invokespecial #142                // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #144                // String Point(x=
       9: invokevirtual #148                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #13                 // Field x:D
      16: invokevirtual #151                // Method java/lang/StringBuilder.append:(D)Ljava/lang/StringBuilder;
      19: ldc           #153                // String , y=
      21: invokevirtual #148                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #16                 // Field y:D
      28: invokevirtual #151                // Method java/lang/StringBuilder.append:(D)Ljava/lang/StringBuilder;
      31: ldc           #155                // String , z=
      33: invokevirtual #148                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      36: aload_0
      37: getfield      #19                 // Field z:D
      40: invokevirtual #151                // Method java/lang/StringBuilder.append:(D)Ljava/lang/StringBuilder;
      43: bipush        41
      45: invokevirtual #158                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      48: invokevirtual #160                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      51: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #13                 // Field x:D
       4: invokestatic  #167                // Method java/lang/Double.hashCode:(D)I
       7: istore_1
       8: iload_1
       9: bipush        31
      11: imul
      12: aload_0
      13: getfield      #16                 // Field y:D
      16: invokestatic  #167                // Method java/lang/Double.hashCode:(D)I
      19: iadd
      20: istore_1
      21: iload_1
      22: bipush        31
      24: imul
      25: aload_0
      26: getfield      #19                 // Field z:D
      29: invokestatic  #167                // Method java/lang/Double.hashCode:(D)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 de/lostmekka/raymarcher/Point
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class de/lostmekka/raymarcher/Point
      20: astore_2
      21: aload_0
      22: getfield      #13                 // Field x:D
      25: aload_2
      26: getfield      #13                 // Field x:D
      29: invokestatic  #176                // Method java/lang/Double.compare:(DD)I
      32: ifeq          37
      35: iconst_0
      36: ireturn
      37: aload_0
      38: getfield      #16                 // Field y:D
      41: aload_2
      42: getfield      #16                 // Field y:D
      45: invokestatic  #176                // Method java/lang/Double.compare:(DD)I
      48: ifeq          53
      51: iconst_0
      52: ireturn
      53: aload_0
      54: getfield      #19                 // Field z:D
      57: aload_2
      58: getfield      #19                 // Field z:D
      61: invokestatic  #176                // Method java/lang/Double.compare:(DD)I
      64: ifeq          69
      67: iconst_0
      68: ireturn
      69: iconst_1
      70: ireturn

  private static final double length_delegate$lambda$0(de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: invokevirtual #180                // Method getSquaredLength:()D
       4: invokestatic  #186                // Method java/lang/Math.sqrt:(D)D
       7: dreturn

  private static final double squaredLength_delegate$lambda$1(de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: getfield      #13                 // Field x:D
       4: aload_0
       5: getfield      #13                 // Field x:D
       8: dmul
       9: aload_0
      10: getfield      #16                 // Field y:D
      13: aload_0
      14: getfield      #16                 // Field y:D
      17: dmul
      18: dadd
      19: aload_0
      20: getfield      #19                 // Field z:D
      23: aload_0
      24: getfield      #19                 // Field z:D
      27: dmul
      28: dadd
      29: dreturn

  private static final boolean isNormalized_delegate$lambda$2(de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: invokevirtual #180                // Method getSquaredLength:()D
       4: dconst_1
       5: dcmpg
       6: ifne          13
       9: iconst_1
      10: goto          14
      13: iconst_0
      14: ireturn

  private static final de.lostmekka.raymarcher.Point absoluteValue_delegate$lambda$3(de.lostmekka.raymarcher.Point);
    Code:
       0: new           #2                  // class de/lostmekka/raymarcher/Point
       3: dup
       4: aload_0
       5: getfield      #13                 // Field x:D
       8: invokestatic  #190                // Method java/lang/Math.abs:(D)D
      11: aload_0
      12: getfield      #16                 // Field y:D
      15: invokestatic  #190                // Method java/lang/Math.abs:(D)D
      18: aload_0
      19: getfield      #19                 // Field z:D
      22: invokestatic  #190                // Method java/lang/Math.abs:(D)D
      25: invokespecial #111                // Method "<init>":(DDD)V
      28: areturn

  private static final de.lostmekka.raymarcher.Point normalized_delegate$lambda$6(de.lostmekka.raymarcher.Point);
    Code:
       0: aload_0
       1: invokevirtual #192                // Method getLength:()D
       4: invokestatic  #196                // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
       7: astore_1
       8: aload_1
       9: checkcast     #106                // class java/lang/Number
      12: invokevirtual #109                // Method java/lang/Number.doubleValue:()D
      15: dstore_2
      16: iconst_0
      17: istore        4
      19: dload_2
      20: dconst_0
      21: dcmpg
      22: ifne          29
      25: iconst_1
      26: goto          30
      29: iconst_0
      30: ifne          37
      33: iconst_1
      34: goto          38
      37: iconst_0
      38: ifeq          45
      41: aload_1
      42: goto          46
      45: aconst_null
      46: dup
      47: ifnull        89
      50: checkcast     #106                // class java/lang/Number
      53: invokevirtual #109                // Method java/lang/Number.doubleValue:()D
      56: dstore_3
      57: iconst_0
      58: istore        5
      60: new           #2                  // class de/lostmekka/raymarcher/Point
      63: dup
      64: aload_0
      65: getfield      #13                 // Field x:D
      68: dload_3
      69: ddiv
      70: aload_0
      71: getfield      #16                 // Field y:D
      74: dload_3
      75: ddiv
      76: aload_0
      77: getfield      #19                 // Field z:D
      80: dload_3
      81: ddiv
      82: invokespecial #111                // Method "<init>":(DDD)V
      85: nop
      86: goto          93
      89: pop
      90: getstatic     #199                // Field zero:Lde/lostmekka/raymarcher/Point;
      93: areturn

  public static final de.lostmekka.raymarcher.Point access$getZero$cp();
    Code:
       0: getstatic     #199                // Field zero:Lde/lostmekka/raymarcher/Point;
       3: areturn

  public static final de.lostmekka.raymarcher.Point access$getRight$cp();
    Code:
       0: getstatic     #207                // Field right:Lde/lostmekka/raymarcher/Point;
       3: areturn

  public static final de.lostmekka.raymarcher.Point access$getLeft$cp();
    Code:
       0: getstatic     #211                // Field left:Lde/lostmekka/raymarcher/Point;
       3: areturn

  public static final de.lostmekka.raymarcher.Point access$getUp$cp();
    Code:
       0: getstatic     #215                // Field up:Lde/lostmekka/raymarcher/Point;
       3: areturn

  public static final de.lostmekka.raymarcher.Point access$getDown$cp();
    Code:
       0: getstatic     #219                // Field down:Lde/lostmekka/raymarcher/Point;
       3: areturn

  public static final de.lostmekka.raymarcher.Point access$getForward$cp();
    Code:
       0: getstatic     #223                // Field forward:Lde/lostmekka/raymarcher/Point;
       3: areturn

  public static final de.lostmekka.raymarcher.Point access$getBackward$cp();
    Code:
       0: getstatic     #227                // Field backward:Lde/lostmekka/raymarcher/Point;
       3: areturn

  static {};
    Code:
       0: new           #230                // class de/lostmekka/raymarcher/Point$Companion
       3: dup
       4: aconst_null
       5: invokespecial #233                // Method de/lostmekka/raymarcher/Point$Companion."<init>":(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
       8: putstatic     #237                // Field Companion:Lde/lostmekka/raymarcher/Point$Companion;
      11: new           #2                  // class de/lostmekka/raymarcher/Point
      14: dup
      15: dconst_0
      16: dconst_0
      17: dconst_0
      18: invokespecial #111                // Method "<init>":(DDD)V
      21: putstatic     #199                // Field zero:Lde/lostmekka/raymarcher/Point;
      24: new           #2                  // class de/lostmekka/raymarcher/Point
      27: dup
      28: dconst_1
      29: dconst_0
      30: dconst_0
      31: invokespecial #111                // Method "<init>":(DDD)V
      34: putstatic     #207                // Field right:Lde/lostmekka/raymarcher/Point;
      37: new           #2                  // class de/lostmekka/raymarcher/Point
      40: dup
      41: ldc2_w        #238                // double -1.0d
      44: dconst_0
      45: dconst_0
      46: invokespecial #111                // Method "<init>":(DDD)V
      49: putstatic     #211                // Field left:Lde/lostmekka/raymarcher/Point;
      52: new           #2                  // class de/lostmekka/raymarcher/Point
      55: dup
      56: dconst_0
      57: dconst_1
      58: dconst_0
      59: invokespecial #111                // Method "<init>":(DDD)V
      62: putstatic     #215                // Field up:Lde/lostmekka/raymarcher/Point;
      65: new           #2                  // class de/lostmekka/raymarcher/Point
      68: dup
      69: dconst_0
      70: ldc2_w        #238                // double -1.0d
      73: dconst_0
      74: invokespecial #111                // Method "<init>":(DDD)V
      77: putstatic     #219                // Field down:Lde/lostmekka/raymarcher/Point;
      80: new           #2                  // class de/lostmekka/raymarcher/Point
      83: dup
      84: dconst_0
      85: dconst_0
      86: dconst_1
      87: invokespecial #111                // Method "<init>":(DDD)V
      90: putstatic     #223                // Field forward:Lde/lostmekka/raymarcher/Point;
      93: new           #2                  // class de/lostmekka/raymarcher/Point
      96: dup
      97: dconst_0
      98: dconst_0
      99: ldc2_w        #238                // double -1.0d
     102: invokespecial #111                // Method "<init>":(DDD)V
     105: putstatic     #227                // Field backward:Lde/lostmekka/raymarcher/Point;
     108: return
}