package day08

import java.io.File
import java.util.*

fun main() {
    val lines =
        File("src/main/kotlin/day08/input.txt").readLines()

    val signalToOutputList = lines.map { line ->
        line.substringBefore(" | ").split(" ").map { it.toSortedSet() } to line.substringAfter(" | ").split(" ")
            .map { it.toSortedSet() }
    }

    println(signalToOutputList.flatMap { it.second }.count { it.size in setOf(2, 3, 4, 7) })

    println(signalToOutputList.sumOf { decodeNumber(it.first, it.second) })

}

/**
 * Segments
 *   111
 *  2   3
 *  2   3
 *   444
 *  5   6
 *  5   6
 *   777
 */
fun decodeNumber(uniqueSignalPatterns: List<SortedSet<Char>>, unknownNumber: List<SortedSet<Char>>): Int {
    val segmentsToDigit = HashMap<SortedSet<Char>, Int>()
    segmentsToDigit[uniqueSignalPatterns.first { it.size == 2 }] = 1
    segmentsToDigit[uniqueSignalPatterns.first { it.size == 3 }] = 7
    segmentsToDigit[uniqueSignalPatterns.first { it.size == 4 }] = 4
    segmentsToDigit[uniqueSignalPatterns.first { it.size == 7 }] = 8

    val segmentFrequencies = uniqueSignalPatterns.flatten()
        .groupBy { it }
        .mapValues { it.value.size }
    val fifthSegmentChar = segmentFrequencies
            .filter { it.value == 4 }.map { it.key }
            .first()
    val unknownFiveSegmentSignals = uniqueSignalPatterns.filter { it.size == 5 }.toMutableList()
    val unknownSixSegmentSignals = uniqueSignalPatterns.filter { it.size == 6 }.toMutableList()
    var segmentsRepresentingFive: SortedSet<Char>? = null
    var segmentsRepresentingSix: SortedSet<Char>? = null
    //5 with fifth segment is 6
    for (fiveSegmentSignal in unknownFiveSegmentSignals) {
            val fiveSegmentSignalWithFifthSegment = fiveSegmentSignal.toSortedSet()
            fiveSegmentSignalWithFifthSegment.add(fifthSegmentChar)
            if (unknownSixSegmentSignals.contains(fiveSegmentSignalWithFifthSegment)) {
                segmentsRepresentingFive = fiveSegmentSignal
                segmentsRepresentingSix = fiveSegmentSignalWithFifthSegment
                unknownFiveSegmentSignals.remove(segmentsRepresentingFive)
                unknownSixSegmentSignals.remove(segmentsRepresentingSix)
                break
            }
    }

    segmentsToDigit[segmentsRepresentingFive!!] = 5
    segmentsToDigit[segmentsRepresentingSix!!] = 6

    segmentsToDigit[unknownFiveSegmentSignals.first { it.contains(fifthSegmentChar) }] = 2
    segmentsToDigit[unknownFiveSegmentSignals.first { !it.contains(fifthSegmentChar) }] = 3
    segmentsToDigit[unknownSixSegmentSignals.first { it.contains(fifthSegmentChar) }] = 0
    segmentsToDigit[unknownSixSegmentSignals.first { !it.contains(fifthSegmentChar) }] = 9

    return unknownNumber.mapNotNull { segmentsToDigit[it] }.joinToString("").toInt()
}

Compiled from "solution.kt"
public final class day08.SolutionKt {
  public static final void main();
    Code:
       0: new           #8                  // class java/io/File
       3: dup
       4: ldc           #10                 // String src/main/kotlin/day08/input.txt
       6: invokespecial #14                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #20                 // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: astore_0
      16: aload_0
      17: checkcast     #22                 // class java/lang/Iterable
      20: astore_2
      21: iconst_0
      22: istore_3
      23: aload_2
      24: astore        4
      26: new           #24                 // class java/util/ArrayList
      29: dup
      30: aload_2
      31: bipush        10
      33: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      36: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
      39: checkcast     #35                 // class java/util/Collection
      42: astore        5
      44: iconst_0
      45: istore        6
      47: aload         4
      49: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      54: astore        7
      56: aload         7
      58: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      63: ifeq          384
      66: aload         7
      68: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      73: astore        8
      75: aload         5
      77: aload         8
      79: checkcast     #51                 // class java/lang/String
      82: astore        9
      84: astore        22
      86: iconst_0
      87: istore        10
      89: aload         9
      91: ldc           #53                 // String  |
      93: aconst_null
      94: iconst_2
      95: aconst_null
      96: invokestatic  #59                 // Method kotlin/text/StringsKt.substringBefore$default:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
      99: checkcast     #61                 // class java/lang/CharSequence
     102: iconst_1
     103: anewarray     #51                 // class java/lang/String
     106: astore        11
     108: aload         11
     110: iconst_0
     111: ldc           #63                 // String
     113: aastore
     114: aload         11
     116: iconst_0
     117: iconst_0
     118: bipush        6
     120: aconst_null
     121: invokestatic  #67                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     124: checkcast     #22                 // class java/lang/Iterable
     127: astore        11
     129: iconst_0
     130: istore        12
     132: aload         11
     134: astore        13
     136: new           #24                 // class java/util/ArrayList
     139: dup
     140: aload         11
     142: bipush        10
     144: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     147: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
     150: checkcast     #35                 // class java/util/Collection
     153: astore        14
     155: iconst_0
     156: istore        15
     158: aload         13
     160: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     165: astore        16
     167: aload         16
     169: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     174: ifeq          220
     177: aload         16
     179: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     184: astore        17
     186: aload         14
     188: aload         17
     190: checkcast     #51                 // class java/lang/String
     193: astore        18
     195: astore        19
     197: iconst_0
     198: istore        20
     200: aload         18
     202: checkcast     #61                 // class java/lang/CharSequence
     205: invokestatic  #71                 // Method kotlin/text/StringsKt.toSortedSet:(Ljava/lang/CharSequence;)Ljava/util/SortedSet;
     208: aload         19
     210: swap
     211: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     216: pop
     217: goto          167
     220: aload         14
     222: checkcast     #77                 // class java/util/List
     225: nop
     226: aload         9
     228: ldc           #53                 // String  |
     230: aconst_null
     231: iconst_2
     232: aconst_null
     233: invokestatic  #80                 // Method kotlin/text/StringsKt.substringAfter$default:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
     236: checkcast     #61                 // class java/lang/CharSequence
     239: iconst_1
     240: anewarray     #51                 // class java/lang/String
     243: astore        11
     245: aload         11
     247: iconst_0
     248: ldc           #63                 // String
     250: aastore
     251: aload         11
     253: iconst_0
     254: iconst_0
     255: bipush        6
     257: aconst_null
     258: invokestatic  #67                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     261: checkcast     #22                 // class java/lang/Iterable
     264: astore        11
     266: astore        19
     268: iconst_0
     269: istore        12
     271: aload         11
     273: astore        13
     275: new           #24                 // class java/util/ArrayList
     278: dup
     279: aload         11
     281: bipush        10
     283: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     286: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
     289: checkcast     #35                 // class java/util/Collection
     292: astore        14
     294: iconst_0
     295: istore        15
     297: aload         13
     299: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     304: astore        16
     306: aload         16
     308: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     313: ifeq          359
     316: aload         16
     318: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     323: astore        17
     325: aload         14
     327: aload         17
     329: checkcast     #51                 // class java/lang/String
     332: astore        18
     334: astore        21
     336: iconst_0
     337: istore        20
     339: aload         18
     341: checkcast     #61                 // class java/lang/CharSequence
     344: invokestatic  #71                 // Method kotlin/text/StringsKt.toSortedSet:(Ljava/lang/CharSequence;)Ljava/util/SortedSet;
     347: aload         21
     349: swap
     350: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     355: pop
     356: goto          306
     359: aload         14
     361: checkcast     #77                 // class java/util/List
     364: nop
     365: aload         19
     367: swap
     368: invokestatic  #86                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     371: nop
     372: aload         22
     374: swap
     375: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     380: pop
     381: goto          56
     384: aload         5
     386: checkcast     #77                 // class java/util/List
     389: nop
     390: astore_1
     391: aload_1
     392: checkcast     #22                 // class java/lang/Iterable
     395: astore_2
     396: iconst_0
     397: istore_3
     398: aload_2
     399: astore        4
     401: new           #24                 // class java/util/ArrayList
     404: dup
     405: invokespecial #88                 // Method java/util/ArrayList."<init>":()V
     408: checkcast     #35                 // class java/util/Collection
     411: astore        5
     413: iconst_0
     414: istore        6
     416: aload         4
     418: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     423: astore        7
     425: aload         7
     427: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     432: ifeq          475
     435: aload         7
     437: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     442: astore        8
     444: aload         8
     446: checkcast     #90                 // class kotlin/Pair
     449: astore        9
     451: iconst_0
     452: istore        10
     454: aload         9
     456: invokevirtual #93                 // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     459: checkcast     #22                 // class java/lang/Iterable
     462: astore        9
     464: aload         5
     466: aload         9
     468: invokestatic  #97                 // Method kotlin/collections/CollectionsKt.addAll:(Ljava/util/Collection;Ljava/lang/Iterable;)Z
     471: pop
     472: goto          425
     475: aload         5
     477: checkcast     #77                 // class java/util/List
     480: nop
     481: checkcast     #22                 // class java/lang/Iterable
     484: astore_2
     485: nop
     486: iconst_0
     487: istore_3
     488: aload_2
     489: instanceof    #35                 // class java/util/Collection
     492: ifeq          511
     495: aload_2
     496: checkcast     #35                 // class java/util/Collection
     499: invokeinterface #100,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     504: ifeq          511
     507: iconst_0
     508: goto          629
     511: iconst_0
     512: istore        4
     514: aload_2
     515: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     520: astore        5
     522: aload         5
     524: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     529: ifeq          627
     532: aload         5
     534: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     539: astore        6
     541: aload         6
     543: checkcast     #102                // class java/util/SortedSet
     546: astore        7
     548: iconst_0
     549: istore        8
     551: iconst_4
     552: anewarray     #104                // class java/lang/Integer
     555: astore        9
     557: aload         9
     559: iconst_0
     560: iconst_2
     561: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     564: aastore
     565: aload         9
     567: iconst_1
     568: iconst_3
     569: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     572: aastore
     573: aload         9
     575: iconst_2
     576: iconst_4
     577: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     580: aastore
     581: aload         9
     583: iconst_3
     584: bipush        7
     586: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     589: aastore
     590: aload         9
     592: invokestatic  #114                // Method kotlin/collections/SetsKt.setOf:([Ljava/lang/Object;)Ljava/util/Set;
     595: aload         7
     597: invokeinterface #118,  1          // InterfaceMethod java/util/SortedSet.size:()I
     602: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     605: invokeinterface #123,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     610: ifeq          522
     613: iinc          4, 1
     616: iload         4
     618: ifge          522
     621: invokestatic  #126                // Method kotlin/collections/CollectionsKt.throwCountOverflow:()V
     624: goto          522
     627: iload         4
     629: istore_2
     630: getstatic     #132                // Field java/lang/System.out:Ljava/io/PrintStream;
     633: iload_2
     634: invokevirtual #137                // Method java/io/PrintStream.println:(I)V
     637: aload_1
     638: checkcast     #22                 // class java/lang/Iterable
     641: astore_2
     642: iconst_0
     643: istore_3
     644: aload_2
     645: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     650: astore        4
     652: aload         4
     654: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     659: ifeq          714
     662: aload         4
     664: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     669: astore        5
     671: iload_3
     672: aload         5
     674: checkcast     #90                 // class kotlin/Pair
     677: astore        6
     679: istore        22
     681: iconst_0
     682: istore        7
     684: aload         6
     686: invokevirtual #140                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     689: checkcast     #77                 // class java/util/List
     692: aload         6
     694: invokevirtual #93                 // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     697: checkcast     #77                 // class java/util/List
     700: invokestatic  #144                // Method decodeNumber:(Ljava/util/List;Ljava/util/List;)I
     703: istore        23
     705: iload         22
     707: iload         23
     709: iadd
     710: istore_3
     711: goto          652
     714: iload_3
     715: istore_2
     716: getstatic     #132                // Field java/lang/System.out:Ljava/io/PrintStream;
     719: iload_2
     720: invokevirtual #137                // Method java/io/PrintStream.println:(I)V
     723: return

  public static final int decodeNumber(java.util.List<? extends java.util.SortedSet<java.lang.Character>>, java.util.List<? extends java.util.SortedSet<java.lang.Character>>);
    Code:
       0: aload_0
       1: ldc           #182                // String uniqueSignalPatterns
       3: invokestatic  #188                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #190                // String unknownNumber
       9: invokestatic  #188                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: new           #192                // class java/util/HashMap
      15: dup
      16: invokespecial #193                // Method java/util/HashMap."<init>":()V
      19: astore_2
      20: aload_2
      21: checkcast     #195                // class java/util/Map
      24: astore_3
      25: aload_0
      26: checkcast     #22                 // class java/lang/Iterable
      29: astore        4
      31: iconst_0
      32: istore        5
      34: aload         4
      36: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      41: astore        6
      43: aload         6
      45: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      50: ifeq          96
      53: aload         6
      55: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      60: astore        7
      62: aload         7
      64: checkcast     #102                // class java/util/SortedSet
      67: astore        8
      69: iconst_0
      70: istore        9
      72: aload         8
      74: invokeinterface #118,  1          // InterfaceMethod java/util/SortedSet.size:()I
      79: iconst_2
      80: if_icmpne     87
      83: iconst_1
      84: goto          88
      87: iconst_0
      88: ifeq          43
      91: aload         7
      93: goto          106
      96: new           #197                // class java/util/NoSuchElementException
      99: dup
     100: ldc           #199                // String Collection contains no element matching the predicate.
     102: invokespecial #200                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     105: athrow
     106: astore        4
     108: iconst_1
     109: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     112: astore        5
     114: aload_3
     115: aload         4
     117: aload         5
     119: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     124: pop
     125: aload_2
     126: checkcast     #195                // class java/util/Map
     129: astore_3
     130: aload_0
     131: checkcast     #22                 // class java/lang/Iterable
     134: astore        4
     136: iconst_0
     137: istore        5
     139: aload         4
     141: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     146: astore        6
     148: aload         6
     150: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     155: ifeq          201
     158: aload         6
     160: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     165: astore        7
     167: aload         7
     169: checkcast     #102                // class java/util/SortedSet
     172: astore        8
     174: iconst_0
     175: istore        9
     177: aload         8
     179: invokeinterface #118,  1          // InterfaceMethod java/util/SortedSet.size:()I
     184: iconst_3
     185: if_icmpne     192
     188: iconst_1
     189: goto          193
     192: iconst_0
     193: ifeq          148
     196: aload         7
     198: goto          211
     201: new           #197                // class java/util/NoSuchElementException
     204: dup
     205: ldc           #199                // String Collection contains no element matching the predicate.
     207: invokespecial #200                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     210: athrow
     211: astore        4
     213: bipush        7
     215: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     218: astore        5
     220: aload_3
     221: aload         4
     223: aload         5
     225: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     230: pop
     231: aload_2
     232: checkcast     #195                // class java/util/Map
     235: astore_3
     236: aload_0
     237: checkcast     #22                 // class java/lang/Iterable
     240: astore        4
     242: iconst_0
     243: istore        5
     245: aload         4
     247: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     252: astore        6
     254: aload         6
     256: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     261: ifeq          307
     264: aload         6
     266: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     271: astore        7
     273: aload         7
     275: checkcast     #102                // class java/util/SortedSet
     278: astore        8
     280: iconst_0
     281: istore        9
     283: aload         8
     285: invokeinterface #118,  1          // InterfaceMethod java/util/SortedSet.size:()I
     290: iconst_4
     291: if_icmpne     298
     294: iconst_1
     295: goto          299
     298: iconst_0
     299: ifeq          254
     302: aload         7
     304: goto          317
     307: new           #197                // class java/util/NoSuchElementException
     310: dup
     311: ldc           #199                // String Collection contains no element matching the predicate.
     313: invokespecial #200                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     316: athrow
     317: astore        4
     319: iconst_4
     320: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     323: astore        5
     325: aload_3
     326: aload         4
     328: aload         5
     330: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     335: pop
     336: aload_2
     337: checkcast     #195                // class java/util/Map
     340: astore_3
     341: aload_0
     342: checkcast     #22                 // class java/lang/Iterable
     345: astore        4
     347: iconst_0
     348: istore        5
     350: aload         4
     352: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     357: astore        6
     359: aload         6
     361: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     366: ifeq          413
     369: aload         6
     371: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     376: astore        7
     378: aload         7
     380: checkcast     #102                // class java/util/SortedSet
     383: astore        8
     385: iconst_0
     386: istore        9
     388: aload         8
     390: invokeinterface #118,  1          // InterfaceMethod java/util/SortedSet.size:()I
     395: bipush        7
     397: if_icmpne     404
     400: iconst_1
     401: goto          405
     404: iconst_0
     405: ifeq          359
     408: aload         7
     410: goto          423
     413: new           #197                // class java/util/NoSuchElementException
     416: dup
     417: ldc           #199                // String Collection contains no element matching the predicate.
     419: invokespecial #200                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
     422: athrow
     423: astore        4
     425: bipush        8
     427: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     430: astore        5
     432: aload_3
     433: aload         4
     435: aload         5
     437: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     442: pop
     443: aload_0
     444: checkcast     #22                 // class java/lang/Iterable
     447: invokestatic  #208                // Method kotlin/collections/CollectionsKt.flatten:(Ljava/lang/Iterable;)Ljava/util/List;
     450: checkcast     #22                 // class java/lang/Iterable
     453: astore        4
     455: nop
     456: iconst_0
     457: istore        5
     459: aload         4
     461: astore        6
     463: new           #210                // class java/util/LinkedHashMap
     466: dup
     467: invokespecial #211                // Method java/util/LinkedHashMap."<init>":()V
     470: checkcast     #195                // class java/util/Map
     473: astore        7
     475: iconst_0
     476: istore        8
     478: aload         6
     480: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     485: astore        9
     487: aload         9
     489: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     494: ifeq          596
     497: aload         9
     499: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     504: astore        10
     506: aload         10
     508: checkcast     #213                // class java/lang/Character
     511: astore        11
     513: iconst_0
     514: istore        12
     516: aload         11
     518: astore        13
     520: aload         7
     522: astore        14
     524: iconst_0
     525: istore        15
     527: aload         14
     529: aload         13
     531: invokeinterface #217,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     536: astore        16
     538: aload         16
     540: ifnonnull     575
     543: iconst_0
     544: istore        17
     546: new           #24                 // class java/util/ArrayList
     549: dup
     550: invokespecial #88                 // Method java/util/ArrayList."<init>":()V
     553: checkcast     #77                 // class java/util/List
     556: astore        17
     558: aload         14
     560: aload         13
     562: aload         17
     564: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     569: pop
     570: aload         17
     572: goto          577
     575: aload         16
     577: nop
     578: checkcast     #77                 // class java/util/List
     581: astore        11
     583: aload         11
     585: aload         10
     587: invokeinterface #218,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     592: pop
     593: goto          487
     596: aload         7
     598: nop
     599: astore        4
     601: nop
     602: iconst_0
     603: istore        5
     605: aload         4
     607: astore        6
     609: new           #210                // class java/util/LinkedHashMap
     612: dup
     613: aload         4
     615: invokeinterface #219,  1          // InterfaceMethod java/util/Map.size:()I
     620: invokestatic  #225                // Method kotlin/collections/MapsKt.mapCapacity:(I)I
     623: invokespecial #226                // Method java/util/LinkedHashMap."<init>":(I)V
     626: checkcast     #195                // class java/util/Map
     629: astore        7
     631: iconst_0
     632: istore        8
     634: aload         6
     636: invokeinterface #230,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     641: checkcast     #22                 // class java/lang/Iterable
     644: astore        9
     646: iconst_0
     647: istore        10
     649: aload         9
     651: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     656: astore        11
     658: aload         11
     660: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     665: ifeq          750
     668: aload         11
     670: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     675: astore        12
     677: aload         7
     679: aload         12
     681: checkcast     #232                // class java/util/Map$Entry
     684: astore        13
     686: astore        14
     688: iconst_0
     689: istore        15
     691: aload         13
     693: invokeinterface #235,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     698: aload         14
     700: swap
     701: aload         12
     703: checkcast     #232                // class java/util/Map$Entry
     706: astore        16
     708: astore        25
     710: astore        24
     712: iconst_0
     713: istore        17
     715: aload         16
     717: invokeinterface #238,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     722: checkcast     #77                 // class java/util/List
     725: invokeinterface #239,  1          // InterfaceMethod java/util/List.size:()I
     730: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     733: astore        26
     735: aload         24
     737: aload         25
     739: aload         26
     741: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     746: pop
     747: goto          658
     750: aload         7
     752: nop
     753: nop
     754: astore_3
     755: aload_3
     756: astore        5
     758: nop
     759: iconst_0
     760: istore        6
     762: aload         5
     764: astore        7
     766: new           #210                // class java/util/LinkedHashMap
     769: dup
     770: invokespecial #211                // Method java/util/LinkedHashMap."<init>":()V
     773: checkcast     #195                // class java/util/Map
     776: astore        8
     778: iconst_0
     779: istore        9
     781: aload         7
     783: invokeinterface #230,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     788: invokeinterface #240,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
     793: astore        10
     795: aload         10
     797: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     802: ifeq          874
     805: aload         10
     807: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     812: checkcast     #232                // class java/util/Map$Entry
     815: astore        11
     817: aload         11
     819: astore        12
     821: iconst_0
     822: istore        13
     824: aload         12
     826: invokeinterface #238,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     831: checkcast     #242                // class java/lang/Number
     834: invokevirtual #245                // Method java/lang/Number.intValue:()I
     837: iconst_4
     838: if_icmpne     845
     841: iconst_1
     842: goto          846
     845: iconst_0
     846: ifeq          795
     849: aload         8
     851: aload         11
     853: invokeinterface #235,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     858: aload         11
     860: invokeinterface #238,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     865: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     870: pop
     871: goto          795
     874: aload         8
     876: nop
     877: astore        5
     879: nop
     880: iconst_0
     881: istore        6
     883: aload         5
     885: astore        7
     887: new           #24                 // class java/util/ArrayList
     890: dup
     891: aload         5
     893: invokeinterface #219,  1          // InterfaceMethod java/util/Map.size:()I
     898: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
     901: checkcast     #35                 // class java/util/Collection
     904: astore        8
     906: iconst_0
     907: istore        9
     909: aload         7
     911: invokeinterface #230,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     916: invokeinterface #240,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
     921: astore        10
     923: aload         10
     925: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     930: ifeq          978
     933: aload         10
     935: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     940: checkcast     #232                // class java/util/Map$Entry
     943: astore        11
     945: aload         8
     947: aload         11
     949: astore        12
     951: astore        24
     953: iconst_0
     954: istore        13
     956: aload         12
     958: invokeinterface #235,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     963: checkcast     #213                // class java/lang/Character
     966: aload         24
     968: swap
     969: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     974: pop
     975: goto          923
     978: aload         8
     980: checkcast     #77                 // class java/util/List
     983: nop
     984: invokestatic  #249                // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
     987: checkcast     #213                // class java/lang/Character
     990: astore        4
     992: aload_0
     993: checkcast     #22                 // class java/lang/Iterable
     996: astore        6
     998: iconst_0
     999: istore        7
    1001: aload         6
    1003: astore        8
    1005: new           #24                 // class java/util/ArrayList
    1008: dup
    1009: invokespecial #88                 // Method java/util/ArrayList."<init>":()V
    1012: checkcast     #35                 // class java/util/Collection
    1015: astore        9
    1017: iconst_0
    1018: istore        10
    1020: aload         8
    1022: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1027: astore        11
    1029: aload         11
    1031: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1036: ifeq          1090
    1039: aload         11
    1041: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1046: astore        12
    1048: aload         12
    1050: checkcast     #102                // class java/util/SortedSet
    1053: astore        13
    1055: iconst_0
    1056: istore        14
    1058: aload         13
    1060: invokeinterface #118,  1          // InterfaceMethod java/util/SortedSet.size:()I
    1065: iconst_5
    1066: if_icmpne     1073
    1069: iconst_1
    1070: goto          1074
    1073: iconst_0
    1074: ifeq          1029
    1077: aload         9
    1079: aload         12
    1081: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1086: pop
    1087: goto          1029
    1090: aload         9
    1092: checkcast     #77                 // class java/util/List
    1095: nop
    1096: checkcast     #35                 // class java/util/Collection
    1099: invokestatic  #253                // Method kotlin/collections/CollectionsKt.toMutableList:(Ljava/util/Collection;)Ljava/util/List;
    1102: astore        5
    1104: aload_0
    1105: checkcast     #22                 // class java/lang/Iterable
    1108: astore        7
    1110: iconst_0
    1111: istore        8
    1113: aload         7
    1115: astore        9
    1117: new           #24                 // class java/util/ArrayList
    1120: dup
    1121: invokespecial #88                 // Method java/util/ArrayList."<init>":()V
    1124: checkcast     #35                 // class java/util/Collection
    1127: astore        10
    1129: iconst_0
    1130: istore        11
    1132: aload         9
    1134: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1139: astore        12
    1141: aload         12
    1143: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1148: ifeq          1203
    1151: aload         12
    1153: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1158: astore        13
    1160: aload         13
    1162: checkcast     #102                // class java/util/SortedSet
    1165: astore        14
    1167: iconst_0
    1168: istore        15
    1170: aload         14
    1172: invokeinterface #118,  1          // InterfaceMethod java/util/SortedSet.size:()I
    1177: bipush        6
    1179: if_icmpne     1186
    1182: iconst_1
    1183: goto          1187
    1186: iconst_0
    1187: ifeq          1141
    1190: aload         10
    1192: aload         13
    1194: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1199: pop
    1200: goto          1141
    1203: aload         10
    1205: checkcast     #77                 // class java/util/List
    1208: nop
    1209: checkcast     #35                 // class java/util/Collection
    1212: invokestatic  #253                // Method kotlin/collections/CollectionsKt.toMutableList:(Ljava/util/Collection;)Ljava/util/List;
    1215: astore        6
    1217: aconst_null
    1218: astore        7
    1220: aconst_null
    1221: astore        8
    1223: aload         5
    1225: invokeinterface #254,  1          // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
    1230: astore        9
    1232: aload         9
    1234: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1239: ifeq          1317
    1242: aload         9
    1244: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1249: checkcast     #102                // class java/util/SortedSet
    1252: astore        10
    1254: aload         10
    1256: checkcast     #22                 // class java/lang/Iterable
    1259: invokestatic  #257                // Method kotlin/collections/CollectionsKt.toSortedSet:(Ljava/lang/Iterable;)Ljava/util/SortedSet;
    1262: astore        11
    1264: aload         11
    1266: aload         4
    1268: invokeinterface #258,  2          // InterfaceMethod java/util/SortedSet.add:(Ljava/lang/Object;)Z
    1273: pop
    1274: aload         6
    1276: aload         11
    1278: invokeinterface #259,  2          // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
    1283: ifeq          1232
    1286: aload         10
    1288: astore        7
    1290: aload         11
    1292: astore        8
    1294: aload         5
    1296: aload         7
    1298: invokeinterface #262,  2          // InterfaceMethod java/util/List.remove:(Ljava/lang/Object;)Z
    1303: pop
    1304: aload         6
    1306: aload         8
    1308: invokeinterface #262,  2          // InterfaceMethod java/util/List.remove:(Ljava/lang/Object;)Z
    1313: pop
    1314: goto          1317
    1317: aload_2
    1318: checkcast     #195                // class java/util/Map
    1321: aload         7
    1323: dup
    1324: invokestatic  #266                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
    1327: iconst_5
    1328: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1331: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1336: pop
    1337: aload_2
    1338: checkcast     #195                // class java/util/Map
    1341: aload         8
    1343: dup
    1344: invokestatic  #266                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
    1347: bipush        6
    1349: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1352: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1357: pop
    1358: aload_2
    1359: checkcast     #195                // class java/util/Map
    1362: astore        9
    1364: aload         5
    1366: checkcast     #22                 // class java/lang/Iterable
    1369: astore        10
    1371: iconst_0
    1372: istore        11
    1374: aload         10
    1376: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1381: astore        12
    1383: aload         12
    1385: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1390: ifeq          1429
    1393: aload         12
    1395: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1400: astore        13
    1402: aload         13
    1404: checkcast     #102                // class java/util/SortedSet
    1407: astore        14
    1409: iconst_0
    1410: istore        15
    1412: aload         14
    1414: aload         4
    1416: invokeinterface #267,  2          // InterfaceMethod java/util/SortedSet.contains:(Ljava/lang/Object;)Z
    1421: ifeq          1383
    1424: aload         13
    1426: goto          1439
    1429: new           #197                // class java/util/NoSuchElementException
    1432: dup
    1433: ldc           #199                // String Collection contains no element matching the predicate.
    1435: invokespecial #200                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
    1438: athrow
    1439: astore        10
    1441: iconst_2
    1442: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1445: astore        11
    1447: aload         9
    1449: aload         10
    1451: aload         11
    1453: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1458: pop
    1459: aload_2
    1460: checkcast     #195                // class java/util/Map
    1463: astore        9
    1465: aload         5
    1467: checkcast     #22                 // class java/lang/Iterable
    1470: astore        10
    1472: iconst_0
    1473: istore        11
    1475: aload         10
    1477: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1482: astore        12
    1484: aload         12
    1486: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1491: ifeq          1538
    1494: aload         12
    1496: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1501: astore        13
    1503: aload         13
    1505: checkcast     #102                // class java/util/SortedSet
    1508: astore        14
    1510: iconst_0
    1511: istore        15
    1513: aload         14
    1515: aload         4
    1517: invokeinterface #267,  2          // InterfaceMethod java/util/SortedSet.contains:(Ljava/lang/Object;)Z
    1522: ifne          1529
    1525: iconst_1
    1526: goto          1530
    1529: iconst_0
    1530: ifeq          1484
    1533: aload         13
    1535: goto          1548
    1538: new           #197                // class java/util/NoSuchElementException
    1541: dup
    1542: ldc           #199                // String Collection contains no element matching the predicate.
    1544: invokespecial #200                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
    1547: athrow
    1548: astore        10
    1550: iconst_3
    1551: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1554: astore        11
    1556: aload         9
    1558: aload         10
    1560: aload         11
    1562: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1567: pop
    1568: aload_2
    1569: checkcast     #195                // class java/util/Map
    1572: astore        9
    1574: aload         6
    1576: checkcast     #22                 // class java/lang/Iterable
    1579: astore        10
    1581: iconst_0
    1582: istore        11
    1584: aload         10
    1586: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1591: astore        12
    1593: aload         12
    1595: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1600: ifeq          1639
    1603: aload         12
    1605: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1610: astore        13
    1612: aload         13
    1614: checkcast     #102                // class java/util/SortedSet
    1617: astore        14
    1619: iconst_0
    1620: istore        15
    1622: aload         14
    1624: aload         4
    1626: invokeinterface #267,  2          // InterfaceMethod java/util/SortedSet.contains:(Ljava/lang/Object;)Z
    1631: ifeq          1593
    1634: aload         13
    1636: goto          1649
    1639: new           #197                // class java/util/NoSuchElementException
    1642: dup
    1643: ldc           #199                // String Collection contains no element matching the predicate.
    1645: invokespecial #200                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
    1648: athrow
    1649: astore        10
    1651: iconst_0
    1652: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1655: astore        11
    1657: aload         9
    1659: aload         10
    1661: aload         11
    1663: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1668: pop
    1669: aload_2
    1670: checkcast     #195                // class java/util/Map
    1673: astore        9
    1675: aload         6
    1677: checkcast     #22                 // class java/lang/Iterable
    1680: astore        10
    1682: iconst_0
    1683: istore        11
    1685: aload         10
    1687: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1692: astore        12
    1694: aload         12
    1696: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1701: ifeq          1748
    1704: aload         12
    1706: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1711: astore        13
    1713: aload         13
    1715: checkcast     #102                // class java/util/SortedSet
    1718: astore        14
    1720: iconst_0
    1721: istore        15
    1723: aload         14
    1725: aload         4
    1727: invokeinterface #267,  2          // InterfaceMethod java/util/SortedSet.contains:(Ljava/lang/Object;)Z
    1732: ifne          1739
    1735: iconst_1
    1736: goto          1740
    1739: iconst_0
    1740: ifeq          1694
    1743: aload         13
    1745: goto          1758
    1748: new           #197                // class java/util/NoSuchElementException
    1751: dup
    1752: ldc           #199                // String Collection contains no element matching the predicate.
    1754: invokespecial #200                // Method java/util/NoSuchElementException."<init>":(Ljava/lang/String;)V
    1757: athrow
    1758: astore        10
    1760: bipush        9
    1762: invokestatic  #108                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1765: astore        11
    1767: aload         9
    1769: aload         10
    1771: aload         11
    1773: invokeinterface #204,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1778: pop
    1779: aload_1
    1780: checkcast     #22                 // class java/lang/Iterable
    1783: astore        9
    1785: iconst_0
    1786: istore        10
    1788: aload         9
    1790: astore        11
    1792: new           #24                 // class java/util/ArrayList
    1795: dup
    1796: invokespecial #88                 // Method java/util/ArrayList."<init>":()V
    1799: checkcast     #35                 // class java/util/Collection
    1802: astore        12
    1804: iconst_0
    1805: istore        13
    1807: aload         11
    1809: astore        14
    1811: iconst_0
    1812: istore        15
    1814: aload         14
    1816: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1821: astore        16
    1823: aload         16
    1825: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1830: ifeq          1895
    1833: aload         16
    1835: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1840: astore        17
    1842: aload         17
    1844: astore        18
    1846: iconst_0
    1847: istore        19
    1849: aload         18
    1851: checkcast     #102                // class java/util/SortedSet
    1854: astore        20
    1856: iconst_0
    1857: istore        21
    1859: aload_2
    1860: aload         20
    1862: invokevirtual #268                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
    1865: checkcast     #104                // class java/lang/Integer
    1868: dup
    1869: ifnull        1890
    1872: astore        22
    1874: iconst_0
    1875: istore        23
    1877: aload         12
    1879: aload         22
    1881: invokeinterface #75,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1886: pop
    1887: goto          1891
    1890: pop
    1891: nop
    1892: goto          1823
    1895: nop
    1896: aload         12
    1898: checkcast     #77                 // class java/util/List
    1901: nop
    1902: checkcast     #22                 // class java/lang/Iterable
    1905: ldc_w         #270                // String
    1908: checkcast     #61                 // class java/lang/CharSequence
    1911: aconst_null
    1912: aconst_null
    1913: iconst_0
    1914: aconst_null
    1915: aconst_null
    1916: bipush        62
    1918: aconst_null
    1919: invokestatic  #274                // Method kotlin/collections/CollectionsKt.joinToString$default:(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
    1922: invokestatic  #278                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
    1925: ireturn

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


package day06

import java.io.File

private const val REPRODUCTION_INTERVAL = 7

fun main() {
    val fishReproductionTimers = File("src/main/kotlin/day06/input.txt").readLines().first().split(",").map { it.toInt() }
    val fishCountByTimer = fishReproductionTimers.fold(Array(9) { 0L }) { acc, fishReproductionTimer ->
        acc[fishReproductionTimer]++
        acc
    }

    for (day in 0..79) {
        calculateFishCount(day, fishCountByTimer)
    }
    println(fishCountByTimer.asSequence().sumOf { it })

    for (day in 80..255) {
        calculateFishCount(day, fishCountByTimer)
    }
    println(fishCountByTimer.asSequence().sumOf { it })
}

private fun calculateFishCount(day: Int, fishCountByTimer: Array<Long>) {
    val reproductionDayTimer = day % REPRODUCTION_INTERVAL
    val newFishCount = fishCountByTimer[reproductionDayTimer]
    fishCountByTimer[reproductionDayTimer] += fishCountByTimer[7]
    fishCountByTimer[7] = fishCountByTimer[8]
    fishCountByTimer[8] = newFishCount
}

Compiled from "solution.kt"
public final class day06.SolutionKt {
  private static final int REPRODUCTION_INTERVAL;

  public static final void main();
    Code:
       0: new           #8                  // class java/io/File
       3: dup
       4: ldc           #10                 // String src/main/kotlin/day06/input.txt
       6: invokespecial #14                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #20                 // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: invokestatic  #26                 // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
      18: checkcast     #28                 // class java/lang/CharSequence
      21: iconst_1
      22: anewarray     #30                 // class java/lang/String
      25: astore_1
      26: aload_1
      27: iconst_0
      28: ldc           #32                 // String ,
      30: aastore
      31: aload_1
      32: iconst_0
      33: iconst_0
      34: bipush        6
      36: aconst_null
      37: invokestatic  #38                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      40: checkcast     #40                 // class java/lang/Iterable
      43: astore_1
      44: iconst_0
      45: istore_2
      46: aload_1
      47: astore_3
      48: new           #42                 // class java/util/ArrayList
      51: dup
      52: aload_1
      53: bipush        10
      55: invokestatic  #46                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      58: invokespecial #49                 // Method java/util/ArrayList."<init>":(I)V
      61: checkcast     #51                 // class java/util/Collection
      64: astore        4
      66: iconst_0
      67: istore        5
      69: aload_3
      70: invokeinterface #55,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      75: astore        6
      77: aload         6
      79: invokeinterface #61,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      84: ifeq          131
      87: aload         6
      89: invokeinterface #65,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      94: astore        7
      96: aload         4
      98: aload         7
     100: checkcast     #30                 // class java/lang/String
     103: astore        8
     105: astore        13
     107: iconst_0
     108: istore        9
     110: aload         8
     112: invokestatic  #71                 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     115: nop
     116: invokestatic  #75                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     119: aload         13
     121: swap
     122: invokeinterface #79,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     127: pop
     128: goto          77
     131: aload         4
     133: checkcast     #81                 // class java/util/List
     136: nop
     137: astore_0
     138: aload_0
     139: checkcast     #40                 // class java/lang/Iterable
     142: astore_2
     143: iconst_0
     144: istore_3
     145: bipush        9
     147: anewarray     #83                 // class java/lang/Long
     150: astore        4
     152: iload_3
     153: bipush        9
     155: if_icmpge     176
     158: iload_3
     159: istore        5
     161: aload         4
     163: iload         5
     165: lconst_0
     166: invokestatic  #86                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     169: aastore
     170: iinc          3, 1
     173: goto          152
     176: aload         4
     178: astore_3
     179: iconst_0
     180: istore        4
     182: aload_3
     183: astore        5
     185: aload_2
     186: invokeinterface #55,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     191: astore        6
     193: aload         6
     195: invokeinterface #61,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     200: ifeq          258
     203: aload         6
     205: invokeinterface #65,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     210: astore        7
     212: aload         5
     214: aload         7
     216: checkcast     #88                 // class java/lang/Number
     219: invokevirtual #92                 // Method java/lang/Number.intValue:()I
     222: istore        8
     224: astore        9
     226: iconst_0
     227: istore        10
     229: aload         9
     231: iload         8
     233: aaload
     234: invokevirtual #96                 // Method java/lang/Long.longValue:()J
     237: lstore        11
     239: aload         9
     241: iload         8
     243: lload         11
     245: lconst_1
     246: ladd
     247: invokestatic  #86                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     250: aastore
     251: aload         9
     253: astore        5
     255: goto          193
     258: aload         5
     260: astore_1
     261: iconst_0
     262: istore_2
     263: iload_2
     264: bipush        80
     266: if_icmpge     280
     269: iload_2
     270: aload_1
     271: invokestatic  #100                // Method calculateFishCount:(I[Ljava/lang/Long;)V
     274: iinc          2, 1
     277: goto          263
     280: aload_1
     281: invokestatic  #106                // Method kotlin/collections/ArraysKt.asSequence:([Ljava/lang/Object;)Lkotlin/sequences/Sequence;
     284: astore_2
     285: lconst_0
     286: lstore_3
     287: aload_2
     288: invokeinterface #109,  1          // InterfaceMethod kotlin/sequences/Sequence.iterator:()Ljava/util/Iterator;
     293: astore        5
     295: aload         5
     297: invokeinterface #61,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     302: ifeq          343
     305: aload         5
     307: invokeinterface #65,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     312: astore        6
     314: lload_3
     315: aload         6
     317: checkcast     #88                 // class java/lang/Number
     320: invokevirtual #110                // Method java/lang/Number.longValue:()J
     323: lstore        7
     325: lstore        13
     327: iconst_0
     328: istore        9
     330: lload         7
     332: lstore        15
     334: lload         13
     336: lload         15
     338: ladd
     339: lstore_3
     340: goto          295
     343: lload_3
     344: lstore_2
     345: getstatic     #116                // Field java/lang/System.out:Ljava/io/PrintStream;
     348: lload_2
     349: invokevirtual #122                // Method java/io/PrintStream.println:(J)V
     352: bipush        80
     354: istore_2
     355: iload_2
     356: sipush        256
     359: if_icmpge     373
     362: iload_2
     363: aload_1
     364: invokestatic  #100                // Method calculateFishCount:(I[Ljava/lang/Long;)V
     367: iinc          2, 1
     370: goto          355
     373: aload_1
     374: invokestatic  #106                // Method kotlin/collections/ArraysKt.asSequence:([Ljava/lang/Object;)Lkotlin/sequences/Sequence;
     377: astore_2
     378: lconst_0
     379: lstore_3
     380: aload_2
     381: invokeinterface #109,  1          // InterfaceMethod kotlin/sequences/Sequence.iterator:()Ljava/util/Iterator;
     386: astore        5
     388: aload         5
     390: invokeinterface #61,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     395: ifeq          436
     398: aload         5
     400: invokeinterface #65,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     405: astore        6
     407: lload_3
     408: aload         6
     410: checkcast     #88                 // class java/lang/Number
     413: invokevirtual #110                // Method java/lang/Number.longValue:()J
     416: lstore        7
     418: lstore        13
     420: iconst_0
     421: istore        9
     423: lload         7
     425: lstore        15
     427: lload         13
     429: lload         15
     431: ladd
     432: lstore_3
     433: goto          388
     436: lload_3
     437: lstore_2
     438: getstatic     #116                // Field java/lang/System.out:Ljava/io/PrintStream;
     441: lload_2
     442: invokevirtual #122                // Method java/io/PrintStream.println:(J)V
     445: return

  private static final void calculateFishCount(int, java.lang.Long[]);
    Code:
       0: iload_0
       1: bipush        7
       3: irem
       4: istore_2
       5: aload_1
       6: iload_2
       7: aaload
       8: invokevirtual #96                 // Method java/lang/Long.longValue:()J
      11: lstore_3
      12: aload_1
      13: iload_2
      14: aload_1
      15: iload_2
      16: aaload
      17: invokevirtual #96                 // Method java/lang/Long.longValue:()J
      20: aload_1
      21: bipush        7
      23: aaload
      24: invokevirtual #96                 // Method java/lang/Long.longValue:()J
      27: ladd
      28: invokestatic  #86                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      31: aastore
      32: aload_1
      33: bipush        7
      35: aload_1
      36: bipush        8
      38: aaload
      39: aastore
      40: aload_1
      41: bipush        8
      43: lload_3
      44: invokestatic  #86                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      47: aastore
      48: return

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


package day12

import java.io.File

fun main() {
    val lines = File("src/main/kotlin/day12/input.txt").readLines()
    val cavesByName: MutableMap<String, Cave> = mutableMapOf()
    lines.forEach {
        val fromCaveName = it.substringBefore("-")
        val toCaveName = it.substringAfter("-")
        val fromCave = cavesByName.computeIfAbsent(fromCaveName) { Cave(fromCaveName) }
        val toCave = cavesByName.computeIfAbsent(toCaveName) { Cave(toCaveName) }
        fromCave.addConnection(toCave)
    }
    val startCave = cavesByName.getValue("start")
    val endCave = cavesByName.getValue("end")
    println(
        search(endCave, listOf(startCave)) { cave, visitedCavesPath -> cave.isLarge() || cave !in visitedCavesPath }
        .count()
    )
    println(
        search(endCave, listOf(startCave)) { cave, visitedCavesPath -> cave.isLarge() || cave !in visitedCavesPath
                || cave.name != "start" && visitedCavesPath.filter { !it.isLarge() }
                    .groupBy { it }
                    .mapValues { it.value.size }
                    .let { map -> map.isNotEmpty() && map.all { it.value == 1 } } }
            .count()
    )
}

fun search(toCave: Cave, visitedCavesPath: List<Cave>, visitStrategy: (Cave, List<Cave>) -> Boolean): Set<List<Cave>> {
    val lastVisited = visitedCavesPath.last()
    if (lastVisited == toCave) return mutableSetOf(visitedCavesPath)
    return lastVisited.connectsTo
        .filter { visitStrategy(it, visitedCavesPath) }
        .map { search(toCave, visitedCavesPath + it, visitStrategy) }
        .flatten().toSet()
}

data class Cave(val name: String) {
    val connectsTo: MutableSet<Cave> = mutableSetOf()
    fun addConnection(other: Cave) {
        if (other !in connectsTo) {
            connectsTo.add(other)
            other.addConnection(this)
        }
    }
    fun isLarge() = name.all { it.isUpperCase() }

    override fun toString(): String {
        return name
    }
}

Compiled from "solution.kt"
public final class day12.SolutionKt {
  public static final void main();
    Code:
       0: new           #8                  // class java/io/File
       3: dup
       4: ldc           #10                 // String src/main/kotlin/day12/input.txt
       6: invokespecial #14                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #20                 // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: astore_0
      16: new           #22                 // class java/util/LinkedHashMap
      19: dup
      20: invokespecial #24                 // Method java/util/LinkedHashMap."<init>":()V
      23: checkcast     #26                 // class java/util/Map
      26: astore_1
      27: aload_0
      28: checkcast     #28                 // class java/lang/Iterable
      31: astore_2
      32: iconst_0
      33: istore_3
      34: aload_2
      35: invokeinterface #32,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      40: astore        4
      42: aload         4
      44: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      49: ifeq          169
      52: aload         4
      54: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      59: astore        5
      61: aload         5
      63: checkcast     #44                 // class java/lang/String
      66: astore        6
      68: iconst_0
      69: istore        7
      71: aload         6
      73: ldc           #46                 // String -
      75: aconst_null
      76: iconst_2
      77: aconst_null
      78: invokestatic  #52                 // Method kotlin/text/StringsKt.substringBefore$default:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
      81: astore        8
      83: aload         6
      85: ldc           #46                 // String -
      87: aconst_null
      88: iconst_2
      89: aconst_null
      90: invokestatic  #55                 // Method kotlin/text/StringsKt.substringAfter$default:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
      93: astore        9
      95: aload_1
      96: aload         8
      98: aload         8
     100: invokedynamic #75,  0             // InvokeDynamic #0:invoke:(Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
     105: invokedynamic #86,  0             // InvokeDynamic #1:apply:(Lkotlin/jvm/functions/Function1;)Ljava/util/function/Function;
     110: invokeinterface #90,  3           // InterfaceMethod java/util/Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
     115: dup
     116: ldc           #92                 // String computeIfAbsent(...)
     118: invokestatic  #98                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
     121: checkcast     #100                // class day12/Cave
     124: astore        10
     126: aload_1
     127: aload         9
     129: aload         9
     131: invokedynamic #105,  0            // InvokeDynamic #2:invoke:(Ljava/lang/String;)Lkotlin/jvm/functions/Function1;
     136: invokedynamic #110,  0            // InvokeDynamic #3:apply:(Lkotlin/jvm/functions/Function1;)Ljava/util/function/Function;
     141: invokeinterface #90,  3           // InterfaceMethod java/util/Map.computeIfAbsent:(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;
     146: dup
     147: ldc           #92                 // String computeIfAbsent(...)
     149: invokestatic  #98                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
     152: checkcast     #100                // class day12/Cave
     155: astore        11
     157: aload         10
     159: aload         11
     161: invokevirtual #114                // Method day12/Cave.addConnection:(Lday12/Cave;)V
     164: nop
     165: nop
     166: goto          42
     169: nop
     170: aload_1
     171: ldc           #116                // String start
     173: invokestatic  #122                // Method kotlin/collections/MapsKt.getValue:(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;
     176: checkcast     #100                // class day12/Cave
     179: astore_2
     180: aload_1
     181: ldc           #124                // String end
     183: invokestatic  #122                // Method kotlin/collections/MapsKt.getValue:(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object;
     186: checkcast     #100                // class day12/Cave
     189: astore_3
     190: nop
     191: aload_3
     192: aload_2
     193: invokestatic  #130                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     196: invokedynamic #142,  0            // InvokeDynamic #4:invoke:()Lkotlin/jvm/functions/Function2;
     201: invokestatic  #146                // Method search:(Lday12/Cave;Ljava/util/List;Lkotlin/jvm/functions/Function2;)Ljava/util/Set;
     204: checkcast     #148                // class java/util/Collection
     207: invokeinterface #152,  1          // InterfaceMethod java/util/Collection.size:()I
     212: istore        4
     214: getstatic     #158                // Field java/lang/System.out:Ljava/io/PrintStream;
     217: iload         4
     219: invokevirtual #164                // Method java/io/PrintStream.println:(I)V
     222: nop
     223: aload_3
     224: aload_2
     225: invokestatic  #130                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     228: invokedynamic #169,  0            // InvokeDynamic #5:invoke:()Lkotlin/jvm/functions/Function2;
     233: invokestatic  #146                // Method search:(Lday12/Cave;Ljava/util/List;Lkotlin/jvm/functions/Function2;)Ljava/util/Set;
     236: checkcast     #148                // class java/util/Collection
     239: invokeinterface #152,  1          // InterfaceMethod java/util/Collection.size:()I
     244: istore        4
     246: getstatic     #158                // Field java/lang/System.out:Ljava/io/PrintStream;
     249: iload         4
     251: invokevirtual #164                // Method java/io/PrintStream.println:(I)V
     254: return

  public static final java.util.Set<java.util.List<day12.Cave>> search(day12.Cave, java.util.List<day12.Cave>, kotlin.jvm.functions.Function2<? super day12.Cave, ? super java.util.List<day12.Cave>, java.lang.Boolean>);
    Code:
       0: aload_0
       1: ldc           #194                // String toCave
       3: invokestatic  #197                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: ldc           #199                // String visitedCavesPath
       9: invokestatic  #197                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_2
      13: ldc           #201                // String visitStrategy
      15: invokestatic  #197                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      18: aload_1
      19: invokestatic  #205                // Method kotlin/collections/CollectionsKt.last:(Ljava/util/List;)Ljava/lang/Object;
      22: checkcast     #100                // class day12/Cave
      25: astore_3
      26: aload_3
      27: aload_0
      28: invokestatic  #209                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      31: ifeq          51
      34: iconst_1
      35: anewarray     #191                // class java/util/List
      38: astore        4
      40: aload         4
      42: iconst_0
      43: aload_1
      44: aastore
      45: aload         4
      47: invokestatic  #215                // Method kotlin/collections/SetsKt.mutableSetOf:([Ljava/lang/Object;)Ljava/util/Set;
      50: areturn
      51: aload_3
      52: invokevirtual #219                // Method day12/Cave.getConnectsTo:()Ljava/util/Set;
      55: checkcast     #28                 // class java/lang/Iterable
      58: astore        4
      60: nop
      61: iconst_0
      62: istore        5
      64: aload         4
      66: astore        6
      68: new           #221                // class java/util/ArrayList
      71: dup
      72: invokespecial #222                // Method java/util/ArrayList."<init>":()V
      75: checkcast     #148                // class java/util/Collection
      78: astore        7
      80: iconst_0
      81: istore        8
      83: aload         6
      85: invokeinterface #32,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      90: astore        9
      92: aload         9
      94: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      99: ifeq          152
     102: aload         9
     104: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     109: astore        10
     111: aload         10
     113: checkcast     #100                // class day12/Cave
     116: astore        11
     118: iconst_0
     119: istore        12
     121: aload_2
     122: aload         11
     124: aload_1
     125: invokeinterface #226,  3          // InterfaceMethod kotlin/jvm/functions/Function2.invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     130: checkcast     #228                // class java/lang/Boolean
     133: invokevirtual #231                // Method java/lang/Boolean.booleanValue:()Z
     136: ifeq          92
     139: aload         7
     141: aload         10
     143: invokeinterface #235,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     148: pop
     149: goto          92
     152: aload         7
     154: checkcast     #191                // class java/util/List
     157: nop
     158: checkcast     #28                 // class java/lang/Iterable
     161: astore        4
     163: nop
     164: iconst_0
     165: istore        5
     167: aload         4
     169: astore        6
     171: new           #221                // class java/util/ArrayList
     174: dup
     175: aload         4
     177: bipush        10
     179: invokestatic  #239                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     182: invokespecial #241                // Method java/util/ArrayList."<init>":(I)V
     185: checkcast     #148                // class java/util/Collection
     188: astore        7
     190: iconst_0
     191: istore        8
     193: aload         6
     195: invokeinterface #32,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     200: astore        9
     202: aload         9
     204: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     209: ifeq          261
     212: aload         9
     214: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     219: astore        10
     221: aload         7
     223: aload         10
     225: checkcast     #100                // class day12/Cave
     228: astore        11
     230: astore        13
     232: iconst_0
     233: istore        12
     235: aload_0
     236: aload_1
     237: checkcast     #148                // class java/util/Collection
     240: aload         11
     242: invokestatic  #245                // Method kotlin/collections/CollectionsKt.plus:(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List;
     245: aload_2
     246: invokestatic  #146                // Method search:(Lday12/Cave;Ljava/util/List;Lkotlin/jvm/functions/Function2;)Ljava/util/Set;
     249: aload         13
     251: swap
     252: invokeinterface #235,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     257: pop
     258: goto          202
     261: aload         7
     263: checkcast     #191                // class java/util/List
     266: nop
     267: checkcast     #28                 // class java/lang/Iterable
     270: invokestatic  #249                // Method kotlin/collections/CollectionsKt.flatten:(Ljava/lang/Iterable;)Ljava/util/List;
     273: checkcast     #28                 // class java/lang/Iterable
     276: invokestatic  #253                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
     279: areturn

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

  private static final day12.Cave main$lambda$4$lambda$0(java.lang.String, java.lang.String);
    Code:
       0: aload_1
       1: ldc_w         #275                // String it
       4: invokestatic  #197                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: new           #100                // class day12/Cave
      10: dup
      11: aload_0
      12: invokespecial #276                // Method day12/Cave."<init>":(Ljava/lang/String;)V
      15: areturn

  private static final day12.Cave main$lambda$4$lambda$1(kotlin.jvm.functions.Function1, java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: invokeinterface #281,  2          // InterfaceMethod kotlin/jvm/functions/Function1.invoke:(Ljava/lang/Object;)Ljava/lang/Object;
       7: checkcast     #100                // class day12/Cave
      10: areturn

  private static final day12.Cave main$lambda$4$lambda$2(java.lang.String, java.lang.String);
    Code:
       0: aload_1
       1: ldc_w         #275                // String it
       4: invokestatic  #197                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: new           #100                // class day12/Cave
      10: dup
      11: aload_0
      12: invokespecial #276                // Method day12/Cave."<init>":(Ljava/lang/String;)V
      15: areturn

  private static final day12.Cave main$lambda$4$lambda$3(kotlin.jvm.functions.Function1, java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: invokeinterface #281,  2          // InterfaceMethod kotlin/jvm/functions/Function1.invoke:(Ljava/lang/Object;)Ljava/lang/Object;
       7: checkcast     #100                // class day12/Cave
      10: areturn

  private static final boolean main$lambda$5(day12.Cave, java.util.List);
    Code:
       0: aload_0
       1: ldc_w         #287                // String cave
       4: invokestatic  #197                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_1
       8: ldc           #199                // String visitedCavesPath
      10: invokestatic  #197                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      13: aload_0
      14: invokevirtual #290                // Method day12/Cave.isLarge:()Z
      17: ifne          30
      20: aload_1
      21: aload_0
      22: invokeinterface #293,  2          // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
      27: ifne          34
      30: iconst_1
      31: goto          35
      34: iconst_0
      35: ireturn

  private static final boolean main$lambda$11(day12.Cave, java.util.List);
    Code:
       0: aload_0
       1: ldc_w         #287                // String cave
       4: invokestatic  #197                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_1
       8: ldc           #199                // String visitedCavesPath
      10: invokestatic  #197                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      13: aload_0
      14: invokevirtual #290                // Method day12/Cave.isLarge:()Z
      17: ifne          563
      20: aload_1
      21: aload_0
      22: invokeinterface #293,  2          // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
      27: ifeq          563
      30: aload_0
      31: invokevirtual #297                // Method day12/Cave.getName:()Ljava/lang/String;
      34: ldc           #116                // String start
      36: invokestatic  #209                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      39: ifne          567
      42: aload_1
      43: checkcast     #28                 // class java/lang/Iterable
      46: astore_2
      47: iconst_0
      48: istore_3
      49: aload_2
      50: astore        4
      52: new           #221                // class java/util/ArrayList
      55: dup
      56: invokespecial #222                // Method java/util/ArrayList."<init>":()V
      59: checkcast     #148                // class java/util/Collection
      62: astore        5
      64: iconst_0
      65: istore        6
      67: aload         4
      69: invokeinterface #32,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      74: astore        7
      76: aload         7
      78: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      83: ifeq          134
      86: aload         7
      88: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      93: astore        8
      95: aload         8
      97: checkcast     #100                // class day12/Cave
     100: astore        9
     102: iconst_0
     103: istore        10
     105: aload         9
     107: invokevirtual #290                // Method day12/Cave.isLarge:()Z
     110: ifne          117
     113: iconst_1
     114: goto          118
     117: iconst_0
     118: ifeq          76
     121: aload         5
     123: aload         8
     125: invokeinterface #235,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     130: pop
     131: goto          76
     134: aload         5
     136: checkcast     #191                // class java/util/List
     139: nop
     140: checkcast     #28                 // class java/lang/Iterable
     143: astore_2
     144: nop
     145: iconst_0
     146: istore_3
     147: aload_2
     148: astore        4
     150: new           #22                 // class java/util/LinkedHashMap
     153: dup
     154: invokespecial #24                 // Method java/util/LinkedHashMap."<init>":()V
     157: checkcast     #26                 // class java/util/Map
     160: astore        5
     162: iconst_0
     163: istore        6
     165: aload         4
     167: invokeinterface #32,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     172: astore        7
     174: aload         7
     176: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     181: ifeq          283
     184: aload         7
     186: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     191: astore        8
     193: aload         8
     195: checkcast     #100                // class day12/Cave
     198: astore        9
     200: iconst_0
     201: istore        10
     203: aload         9
     205: astore        11
     207: aload         5
     209: astore        12
     211: iconst_0
     212: istore        13
     214: aload         12
     216: aload         11
     218: invokeinterface #300,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
     223: astore        14
     225: aload         14
     227: ifnonnull     262
     230: iconst_0
     231: istore        15
     233: new           #221                // class java/util/ArrayList
     236: dup
     237: invokespecial #222                // Method java/util/ArrayList."<init>":()V
     240: checkcast     #191                // class java/util/List
     243: astore        15
     245: aload         12
     247: aload         11
     249: aload         15
     251: invokeinterface #303,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     256: pop
     257: aload         15
     259: goto          264
     262: aload         14
     264: nop
     265: checkcast     #191                // class java/util/List
     268: astore        9
     270: aload         9
     272: aload         8
     274: invokeinterface #304,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     279: pop
     280: goto          174
     283: aload         5
     285: nop
     286: astore_2
     287: nop
     288: iconst_0
     289: istore_3
     290: aload_2
     291: astore        4
     293: new           #22                 // class java/util/LinkedHashMap
     296: dup
     297: aload_2
     298: invokeinterface #305,  1          // InterfaceMethod java/util/Map.size:()I
     303: invokestatic  #309                // Method kotlin/collections/MapsKt.mapCapacity:(I)I
     306: invokespecial #310                // Method java/util/LinkedHashMap."<init>":(I)V
     309: checkcast     #26                 // class java/util/Map
     312: astore        5
     314: iconst_0
     315: istore        6
     317: aload         4
     319: invokeinterface #313,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     324: checkcast     #28                 // class java/lang/Iterable
     327: astore        7
     329: iconst_0
     330: istore        8
     332: aload         7
     334: invokeinterface #32,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     339: astore        9
     341: aload         9
     343: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     348: ifeq          433
     351: aload         9
     353: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     358: astore        10
     360: aload         5
     362: aload         10
     364: checkcast     #315                // class java/util/Map$Entry
     367: astore        11
     369: astore        12
     371: iconst_0
     372: istore        13
     374: aload         11
     376: invokeinterface #318,  1          // InterfaceMethod java/util/Map$Entry.getKey:()Ljava/lang/Object;
     381: aload         12
     383: swap
     384: aload         10
     386: checkcast     #315                // class java/util/Map$Entry
     389: astore        14
     391: astore        17
     393: astore        16
     395: iconst_0
     396: istore        15
     398: aload         14
     400: invokeinterface #320,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     405: checkcast     #191                // class java/util/List
     408: invokeinterface #321,  1          // InterfaceMethod java/util/List.size:()I
     413: invokestatic  #327                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     416: astore        18
     418: aload         16
     420: aload         17
     422: aload         18
     424: invokeinterface #303,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     429: pop
     430: goto          341
     433: aload         5
     435: nop
     436: nop
     437: astore_3
     438: iconst_0
     439: istore        4
     441: aload_3
     442: invokeinterface #330,  1          // InterfaceMethod java/util/Map.isEmpty:()Z
     447: ifne          454
     450: iconst_1
     451: goto          455
     454: iconst_0
     455: ifeq          558
     458: aload_3
     459: astore        5
     461: iconst_0
     462: istore        6
     464: aload         5
     466: invokeinterface #330,  1          // InterfaceMethod java/util/Map.isEmpty:()Z
     471: ifeq          478
     474: iconst_1
     475: goto          551
     478: aload         5
     480: invokeinterface #313,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     485: invokeinterface #333,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
     490: astore        7
     492: aload         7
     494: invokeinterface #38,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     499: ifeq          550
     502: aload         7
     504: invokeinterface #42,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     509: checkcast     #315                // class java/util/Map$Entry
     512: astore        8
     514: aload         8
     516: astore        9
     518: iconst_0
     519: istore        10
     521: aload         9
     523: invokeinterface #320,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     528: checkcast     #335                // class java/lang/Number
     531: invokevirtual #338                // Method java/lang/Number.intValue:()I
     534: iconst_1
     535: if_icmpne     542
     538: iconst_1
     539: goto          543
     542: iconst_0
     543: ifne          492
     546: iconst_0
     547: goto          551
     550: iconst_1
     551: ifeq          558
     554: iconst_1
     555: goto          559
     558: iconst_0
     559: nop
     560: ifeq          567
     563: iconst_1
     564: goto          568
     567: iconst_0
     568: ireturn
}