package net.ranides.assira.asm;

import net.ranides.asm.*;

@SuppressWarnings("PMD")
public class Output implements Opcodes {

    public static byte[] dump() throws Exception {

        ClassWriter writer = new ClassWriter(0);
        AnnotationVisitor annotation0;

        writer.visit(V1_6, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, "net/ranides/assira/collection/ArrayUtils", null, "java/lang/Object", null);

        writer.visitInnerClass("net/ranides/assira/collection/ArrayUtils$IntPair", "net/ranides/assira/collection/ArrayUtils", "IntPair", ACC_PRIVATE + ACC_STATIC);

        writer.visitInnerClass("net/ranides/assira/collection/ArrayUtils$Pair", "net/ranides/assira/collection/ArrayUtils", "Pair", ACC_PRIVATE + ACC_STATIC);

        writer.visitInnerClass("net/ranides/assira/annotations/Meta$Unsafe", "net/ranides/assira/annotations/Meta", "Unsafe", ACC_PUBLIC + ACC_STATIC + ACC_ANNOTATION + ACC_ABSTRACT + ACC_INTERFACE);

        writer.visitInnerClass("net/ranides/assira/collection/ArrayUtils$1", null, null, ACC_STATIC);

        {
            MethodVisitor method = writer.visitMethod(ACC_PRIVATE, "<init>", "()V", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
            method.visitInsn(RETURN);
            method.visitMaxs(1, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "get", "([Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;ITT;)TT;", null);
            method.visitCode();
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ILOAD, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local1);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(AALOAD);
            Label local2 = new Label();
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 2);
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{"java/lang/Object"});
            method.visitInsn(ARETURN);
            method.visitMaxs(2, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "get", "([Ljava/lang/Object;I)Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;I)TT;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(ACONST_NULL);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "get", "([Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;");
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 2);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "first", "([Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;", "<T:Ljava/lang/Object;>([Ljava/lang/Object;Ljava/lang/Class<TT;>;)TT;", null);
            method.visitCode();
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local0);
            method.visitInsn(ACONST_NULL);
            method.visitInsn(ARETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 3);
            Label local1 = new Label();
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            Label local2 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local2);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(AALOAD);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "isInstance", "(Ljava/lang/Object;)Z");
            Label local3 = new Label();
            method.visitJumpInsn(IFEQ, local3);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(AALOAD);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "cast", "(Ljava/lang/Object;)Ljava/lang/Object;");
            method.visitInsn(ARETURN);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitIincInsn(2, 1);
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitInsn(ACONST_NULL);
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "first", "([Ljava/lang/Object;)Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;)TT;", null);
            method.visitCode();
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPEQ, local0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ICMPNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ACONST_NULL);
            method.visitInsn(ARETURN);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitInsn(AALOAD);
            method.visitInsn(ARETURN);
            method.visitMaxs(2, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "last", "([Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;", "<T:Ljava/lang/Object;>([Ljava/lang/Object;Ljava/lang/Class<TT;>;)TT;", null);
            method.visitCode();
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local0);
            method.visitInsn(ACONST_NULL);
            method.visitInsn(ARETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 2);
            Label local1 = new Label();
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_APPEND, 1, new Object[]{Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            Label local2 = new Label();
            method.visitJumpInsn(IFLT, local2);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(AALOAD);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "isInstance", "(Ljava/lang/Object;)Z");
            Label local3 = new Label();
            method.visitJumpInsn(IFEQ, local3);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(AALOAD);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "cast", "(Ljava/lang/Object;)Ljava/lang/Object;");
            method.visitInsn(ARETURN);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitIincInsn(2, -1);
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitInsn(ACONST_NULL);
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "last", "([Ljava/lang/Object;)Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;)TT;", null);
            method.visitCode();
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPEQ, local0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ICMPNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ACONST_NULL);
            method.visitInsn(ARETURN);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(AALOAD);
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "size", "([Ljava/lang/Object;)I", "<T:Ljava/lang/Object;>([TT;)I", null);
            method.visitCode();
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local0);
            method.visitInsn(ICONST_0);
            Label local1 = new Label();
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{Opcodes.INTEGER});
            method.visitInsn(IRETURN);
            method.visitMaxs(2, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "isEmpty", "([Ljava/lang/Object;)Z", "<T:Ljava/lang/Object;>([TT;)Z", null);
            method.visitCode();
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "size", "([Ljava/lang/Object;)I");
            Label local0 = new Label();
            method.visitJumpInsn(IF_ICMPNE, local0);
            method.visitInsn(ICONST_1);
            Label local1 = new Label();
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ICONST_0);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{Opcodes.INTEGER});
            method.visitInsn(IRETURN);
            method.visitMaxs(2, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "compareSize", "([Ljava/lang/Object;[Ljava/lang/Object;)I", "<T1:Ljava/lang/Object;T2:Ljava/lang/Object;>([TT1;[TT2;)I", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "size", "([Ljava/lang/Object;)I");
            method.visitVarInsn(ALOAD, 1);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "size", "([Ljava/lang/Object;)I");
            method.visitInsn(ISUB);
            method.visitInsn(IRETURN);
            method.visitMaxs(2, 2);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "equalSize", "([Ljava/lang/Object;[Ljava/lang/Object;)Z", "<T1:Ljava/lang/Object;T2:Ljava/lang/Object;>([TT1;[TT2;)Z", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "size", "([Ljava/lang/Object;)I");
            method.visitVarInsn(ALOAD, 1);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "size", "([Ljava/lang/Object;)I");
            Label local0 = new Label();
            method.visitJumpInsn(IF_ICMPNE, local0);
            method.visitInsn(ICONST_1);
            Label local1 = new Label();
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ICONST_0);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{Opcodes.INTEGER});
            method.visitInsn(IRETURN);
            method.visitMaxs(2, 2);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "clip", "([Ljava/lang/Object;I)[Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;I)[TT;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ILOAD, 1);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ICMPGT, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getComponentType", "()Ljava/lang/Class;");
            method.visitVarInsn(ILOAD, 1);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/reflect/Array", "newInstance", "(Ljava/lang/Class;I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ILOAD, 1);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC + ACC_VARARGS, "asList", "([Ljava/lang/Object;)Ljava/util/List;", "<T:Ljava/lang/Object;>([TT;)Ljava/util/List<TT;>;", null);
            method.visitCode();
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local0);
            method.visitMethodInsn(INVOKESTATIC, "java/util/Collections", "emptyList", "()Ljava/util/List;");
            Label local1 = new Label();
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKESTATIC, "java/util/Arrays", "asList", "([Ljava/lang/Object;)Ljava/util/List;");
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{"java/util/List"});
            method.visitInsn(ARETURN);
            method.visitMaxs(2, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "wrap", "([Ljava/lang/Object;)Ljava/util/List;", "<T:Ljava/lang/Object;>([TT;)Ljava/util/List<TT;>;", null);
            method.visitCode();
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local0);
            method.visitMethodInsn(INVOKESTATIC, "java/util/Collections", "emptyList", "()Ljava/util/List;");
            Label local1 = new Label();
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKESTATIC, "java/util/Arrays", "asList", "([Ljava/lang/Object;)Ljava/util/List;");
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{"java/util/List"});
            method.visitInsn(ARETURN);
            method.visitMaxs(2, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "wrap", "(Ljava/lang/Object;)Ljava/util/List;", "<T:Ljava/lang/Object;>(Ljava/lang/Object;)Ljava/util/List<TT;>;", null);
            {
                annotation0 = method.visitAnnotation("Lnet/ranides/assira/annotations/Meta$Unsafe;", true);
                annotation0.visitEnd();
            }
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitTypeInsn(INSTANCEOF, "java/util/List");
            Label local0 = new Label();
            method.visitJumpInsn(IFEQ, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitTypeInsn(CHECKCAST, "java/util/List");
            method.visitInsn(ARETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 0);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local1);
            method.visitMethodInsn(INVOKESTATIC, "java/util/Collections", "emptyList", "()Ljava/util/List;");
            method.visitInsn(ARETURN);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getComponentType", "()Ljava/lang/Class;");
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/reflection/ClassInspector", "isPrimitive", "(Ljava/lang/Class;)Z");
            Label local2 = new Label();
            method.visitJumpInsn(IFEQ, local2);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/list/NativeArrayList");
            method.visitInsn(DUP);
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/list/NativeArrayList", "<init>", "(Ljava/lang/Object;)V");
            method.visitInsn(ARETURN);
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitMethodInsn(INVOKESTATIC, "java/util/Arrays", "asList", "([Ljava/lang/Object;)Ljava/util/List;");
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "wrap", "(Ljava/lang/Class;Ljava/lang/Object;)Ljava/util/List;", "<T:Ljava/lang/Object;>(Ljava/lang/Class<*>;Ljava/lang/Object;)Ljava/util/List<TT;>;", null);
            {
                annotation0 = method.visitAnnotation("Lnet/ranides/assira/annotations/Meta$Unsafe;", true);
                annotation0.visitEnd();
            }
            method.visitCode();
            method.visitVarInsn(ALOAD, 1);
            method.visitTypeInsn(INSTANCEOF, "java/util/List");
            Label local0 = new Label();
            method.visitJumpInsn(IFEQ, local0);
            method.visitVarInsn(ALOAD, 1);
            method.visitTypeInsn(CHECKCAST, "java/util/List");
            method.visitInsn(ARETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ACONST_NULL);
            method.visitVarInsn(ALOAD, 1);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local1);
            method.visitMethodInsn(INVOKESTATIC, "java/util/Collections", "emptyList", "()Ljava/util/List;");
            Label local2 = new Label();
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/list/NativeArrayList");
            method.visitInsn(DUP);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 1);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/list/NativeArrayList", "<init>", "(Ljava/lang/Class;Ljava/lang/Object;)V");
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{"java/util/List"});
            method.visitInsn(ARETURN);
            method.visitMaxs(4, 2);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "toArray", "(Ljava/lang/Class;Ljava/util/List;)Ljava/lang/Object;", "<T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;Ljava/util/List<*>;)TT;", new String[]{"java/lang/ClassCastException"});
            method.visitCode();
            Label local0 = new Label();
            Label local1 = new Label();
            Label local2 = new Label();
            method.visitTryCatchBlock(local0, local1, local2, "java/lang/ArrayStoreException");
            method.visitVarInsn(ALOAD, 1);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()I");
            method.visitVarInsn(ISTORE, 2);
            method.visitLdcInsn(Type.getType("[Z"));
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z");
            Label local3 = new Label();
            method.visitJumpInsn(IFEQ, local3);
            method.visitVarInsn(ILOAD, 2);
            method.visitIntInsn(NEWARRAY, T_BOOLEAN);
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local4 = new Label();
            method.visitLabel(local4);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{Opcodes.INTEGER, "[Z", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local5 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local5);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "java/lang/Boolean");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z");
            method.visitInsn(BASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local4);
            method.visitLabel(local5);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitLdcInsn(Type.getType("[C"));
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z");
            Label local6 = new Label();
            method.visitJumpInsn(IFEQ, local6);
            method.visitVarInsn(ILOAD, 2);
            method.visitIntInsn(NEWARRAY, T_CHAR);
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local7 = new Label();
            method.visitLabel(local7);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[C", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local8 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local8);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "java/lang/Character");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Character", "charValue", "()C");
            method.visitInsn(CASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local7);
            method.visitLabel(local8);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitLabel(local6);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitLdcInsn(Type.getType("[B"));
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z");
            Label local9 = new Label();
            method.visitJumpInsn(IFEQ, local9);
            method.visitVarInsn(ILOAD, 2);
            method.visitIntInsn(NEWARRAY, T_BYTE);
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local10 = new Label();
            method.visitLabel(local10);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[B", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local11 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local11);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "java/lang/Byte");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Byte", "byteValue", "()B");
            method.visitInsn(BASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local10);
            method.visitLabel(local11);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitLabel(local9);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitLdcInsn(Type.getType("[S"));
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z");
            Label local12 = new Label();
            method.visitJumpInsn(IFEQ, local12);
            method.visitVarInsn(ILOAD, 2);
            method.visitIntInsn(NEWARRAY, T_SHORT);
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local13 = new Label();
            method.visitLabel(local13);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[S", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local14 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local14);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "java/lang/Short");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Short", "shortValue", "()S");
            method.visitInsn(SASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local13);
            method.visitLabel(local14);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitLabel(local12);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitLdcInsn(Type.getType("[I"));
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z");
            Label local15 = new Label();
            method.visitJumpInsn(IFEQ, local15);
            method.visitVarInsn(ILOAD, 2);
            method.visitIntInsn(NEWARRAY, T_INT);
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local16 = new Label();
            method.visitLabel(local16);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[I", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local17 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local17);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "java/lang/Integer");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I");
            method.visitInsn(IASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local16);
            method.visitLabel(local17);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitLabel(local15);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitLdcInsn(Type.getType("[J"));
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z");
            Label local18 = new Label();
            method.visitJumpInsn(IFEQ, local18);
            method.visitVarInsn(ILOAD, 2);
            method.visitIntInsn(NEWARRAY, T_LONG);
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local19 = new Label();
            method.visitLabel(local19);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[J", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local20 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local20);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "java/lang/Long");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J");
            method.visitInsn(LASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local19);
            method.visitLabel(local20);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitLabel(local18);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitLdcInsn(Type.getType("[F"));
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z");
            Label local21 = new Label();
            method.visitJumpInsn(IFEQ, local21);
            method.visitVarInsn(ILOAD, 2);
            method.visitIntInsn(NEWARRAY, T_FLOAT);
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local22 = new Label();
            method.visitLabel(local22);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[F", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local23 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local23);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "java/lang/Float");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Float", "floatValue", "()F");
            method.visitInsn(FASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local22);
            method.visitLabel(local23);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitLabel(local21);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitLdcInsn(Type.getType("[D"));
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "equals", "(Ljava/lang/Object;)Z");
            method.visitJumpInsn(IFEQ, local0);
            method.visitVarInsn(ILOAD, 2);
            method.visitIntInsn(NEWARRAY, T_DOUBLE);
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local24 = new Label();
            method.visitLabel(local24);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[D", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local25 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local25);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "java/lang/Double");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D");
            method.visitInsn(DASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local24);
            method.visitLabel(local25);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getComponentType", "()Ljava/lang/Class;");
            method.visitVarInsn(ILOAD, 2);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/reflect/Array", "newInstance", "(Ljava/lang/Class;I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local26 = new Label();
            method.visitLabel(local26);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[Ljava/lang/Object;", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local27 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local27);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "get", "(I)Ljava/lang/Object;");
            method.visitInsn(AASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local26);
            method.visitLabel(local27);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitLabel(local1);
            method.visitInsn(ARETURN);
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_FULL, 3, new Object[]{"java/lang/Class", "java/util/List", Opcodes.INTEGER}, 1, new Object[]{"java/lang/ArrayStoreException"});
            method.visitVarInsn(ASTORE, 3);
            method.visitTypeInsn(NEW, "java/lang/ClassCastException");
            method.visitInsn(DUP);
            method.visitTypeInsn(NEW, "java/lang/StringBuilder");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V");
            method.visitLdcInsn("cannot cast ");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
            method.visitVarInsn(ALOAD, 3);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/ArrayStoreException", "getMessage", "()Ljava/lang/String;");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
            method.visitLdcInsn(" to ");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getComponentType", "()Ljava/lang/Class;");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/Object;)Ljava/lang/StringBuilder;");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;");
            method.visitMethodInsn(INVOKESPECIAL, "java/lang/ClassCastException", "<init>", "(Ljava/lang/String;)V");
            method.visitInsn(ATHROW);
            method.visitMaxs(4, 5);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "make", "(Ljava/lang/Class;I)[Ljava/lang/Object;", "<T:Ljava/lang/Object;>(Ljava/lang/Class<TT;>;I)[TT;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 1);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/reflect/Array", "newInstance", "(Ljava/lang/Class;I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitInsn(ARETURN);
            method.visitMaxs(2, 2);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "sort", "([Ljava/lang/Object;[Ljava/lang/Comparable;)V", "<K::Ljava/lang/Comparable<TK;>;V:Ljava/lang/Object;>([TV;[TK;)V", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitTypeInsn(ANEWARRAY, "net/ranides/assira/collection/ArrayUtils$Pair");
            method.visitVarInsn(ASTORE, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 3);
            Label local0 = new Label();
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[Lnet/ranides/assira/collection/ArrayUtils$Pair;", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local1);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/ArrayUtils$Pair");
            method.visitInsn(DUP);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(AALOAD);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(AALOAD);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/ArrayUtils$Pair", "<init>", "(Ljava/lang/Comparable;Ljava/lang/Object;)V");
            method.visitInsn(AASTORE);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local0);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 2);
            method.visitMethodInsn(INVOKESTATIC, "java/util/Arrays", "sort", "([Ljava/lang/Object;)V");
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ASTORE, 3);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ASTORE, 4);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 5);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{"[Ljava/lang/Object;", "[Ljava/lang/Object;", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 5);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARRAYLENGTH);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 5);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 5);
            method.visitInsn(AALOAD);
            method.visitFieldInsn(GETFIELD, "net/ranides/assira/collection/ArrayUtils$Pair", "value", "Ljava/lang/Object;");
            method.visitInsn(AASTORE);
            method.visitVarInsn(ALOAD, 4);
            method.visitVarInsn(ILOAD, 5);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 5);
            method.visitInsn(AALOAD);
            method.visitFieldInsn(GETFIELD, "net/ranides/assira/collection/ArrayUtils$Pair", "key", "Ljava/lang/Comparable;");
            method.visitInsn(AASTORE);
            method.visitIincInsn(5, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitInsn(RETURN);
            method.visitMaxs(7, 6);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "sort", "([Ljava/lang/Object;[I)V", "<K:Ljava/lang/Object;V:Ljava/lang/Object;>([TV;[I)V", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitTypeInsn(ANEWARRAY, "net/ranides/assira/collection/ArrayUtils$IntPair");
            method.visitVarInsn(ASTORE, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 3);
            Label local0 = new Label();
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[Lnet/ranides/assira/collection/ArrayUtils$IntPair;", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local1);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/ArrayUtils$IntPair");
            method.visitInsn(DUP);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(IALOAD);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(AALOAD);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/ArrayUtils$IntPair", "<init>", "(ILjava/lang/Object;)V");
            method.visitInsn(AASTORE);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local0);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 2);
            method.visitMethodInsn(INVOKESTATIC, "java/util/Arrays", "sort", "([Ljava/lang/Object;)V");
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[Ljava/lang/Object;", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARRAYLENGTH);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 4);
            method.visitInsn(AALOAD);
            method.visitFieldInsn(GETFIELD, "net/ranides/assira/collection/ArrayUtils$IntPair", "value", "Ljava/lang/Object;");
            method.visitInsn(AASTORE);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 4);
            method.visitInsn(AALOAD);
            method.visitFieldInsn(GETFIELD, "net/ranides/assira/collection/ArrayUtils$IntPair", "key", "I");
            method.visitInsn(IASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitInsn(RETURN);
            method.visitMaxs(7, 5);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "nCopies", "(IC)[C", null, null);
            method.visitCode();
            method.visitVarInsn(ILOAD, 0);
            method.visitIntInsn(NEWARRAY, T_CHAR);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ILOAD, 1);
            Label local0 = new Label();
            method.visitJumpInsn(IFEQ, local0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 3);
            Label local1 = new Label();
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[C", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 0);
            method.visitJumpInsn(IF_ICMPGE, local0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(CASTORE);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "nCopies", "(IS)[S", null, null);
            method.visitCode();
            method.visitVarInsn(ILOAD, 0);
            method.visitIntInsn(NEWARRAY, T_SHORT);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ILOAD, 1);
            Label local0 = new Label();
            method.visitJumpInsn(IFEQ, local0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 3);
            Label local1 = new Label();
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[S", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 0);
            method.visitJumpInsn(IF_ICMPGE, local0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(SASTORE);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "nCopies", "(II)[I", null, null);
            method.visitCode();
            method.visitVarInsn(ILOAD, 0);
            method.visitIntInsn(NEWARRAY, T_INT);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ILOAD, 1);
            Label local0 = new Label();
            method.visitJumpInsn(IFEQ, local0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 3);
            Label local1 = new Label();
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[I", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 0);
            method.visitJumpInsn(IF_ICMPGE, local0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(IASTORE);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "nCopies", "(IJ)[J", null, null);
            method.visitCode();
            method.visitVarInsn(ILOAD, 0);
            method.visitIntInsn(NEWARRAY, T_LONG);
            method.visitVarInsn(ASTORE, 3);
            method.visitVarInsn(LLOAD, 1);
            method.visitInsn(LCONST_0);
            method.visitInsn(LCMP);
            Label local0 = new Label();
            method.visitJumpInsn(IFEQ, local0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local1 = new Label();
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[J", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 0);
            method.visitJumpInsn(IF_ICMPGE, local0);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(LLOAD, 1);
            method.visitInsn(LASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitMaxs(4, 5);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "nCopies", "(IF)[F", null, null);
            method.visitCode();
            method.visitVarInsn(ILOAD, 0);
            method.visitIntInsn(NEWARRAY, T_FLOAT);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(FLOAD, 1);
            method.visitInsn(FCONST_0);
            method.visitInsn(FCMPL);
            Label local0 = new Label();
            method.visitJumpInsn(IFEQ, local0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 3);
            Label local1 = new Label();
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[F", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 0);
            method.visitJumpInsn(IF_ICMPGE, local0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(FLOAD, 1);
            method.visitInsn(FASTORE);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "nCopies", "(ID)[D", null, null);
            method.visitCode();
            method.visitVarInsn(ILOAD, 0);
            method.visitIntInsn(NEWARRAY, T_DOUBLE);
            method.visitVarInsn(ASTORE, 3);
            method.visitVarInsn(DLOAD, 1);
            method.visitInsn(DCONST_0);
            method.visitInsn(DCMPL);
            Label local0 = new Label();
            method.visitJumpInsn(IFEQ, local0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local1 = new Label();
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[D", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 0);
            method.visitJumpInsn(IF_ICMPGE, local0);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(DLOAD, 1);
            method.visitInsn(DASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitMaxs(4, 5);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "nCopies", "(ILjava/lang/Object;)[Ljava/lang/Object;", "<T:Ljava/lang/Object;>(ITT;)[TT;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 1);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
            method.visitVarInsn(ILOAD, 0);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "make", "(Ljava/lang/Class;I)[Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitVarInsn(ASTORE, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 3);
            Label local0 = new Label();
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"[Ljava/lang/Object;", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 0);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local1);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(AASTORE);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local0);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "shift", "([C)C", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitInsn(CALOAD);
            method.visitVarInsn(ISTORE, 1);
            method.visitInsn(ICONST_1);
            method.visitVarInsn(ISTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 3);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(CALOAD);
            method.visitInsn(CASTORE);
            method.visitIincInsn(2, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(IRETURN);
            method.visitMaxs(4, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "shift", "([S)S", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitInsn(SALOAD);
            method.visitVarInsn(ISTORE, 1);
            method.visitInsn(ICONST_1);
            method.visitVarInsn(ISTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 3);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(SALOAD);
            method.visitInsn(SASTORE);
            method.visitIincInsn(2, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(IRETURN);
            method.visitMaxs(4, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "shift", "([I)I", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitInsn(IALOAD);
            method.visitVarInsn(ISTORE, 1);
            method.visitInsn(ICONST_1);
            method.visitVarInsn(ISTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 3);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(IALOAD);
            method.visitInsn(IASTORE);
            method.visitIincInsn(2, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(IRETURN);
            method.visitMaxs(4, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "shift", "([J)J", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitInsn(LALOAD);
            method.visitVarInsn(LSTORE, 1);
            method.visitInsn(ICONST_1);
            method.visitVarInsn(ISTORE, 3);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 4);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{Opcodes.LONG, Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(LALOAD);
            method.visitInsn(LASTORE);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitVarInsn(LLOAD, 1);
            method.visitInsn(LRETURN);
            method.visitMaxs(4, 5);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "shift", "([F)F", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitInsn(FALOAD);
            method.visitVarInsn(FSTORE, 1);
            method.visitInsn(ICONST_1);
            method.visitVarInsn(ISTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 3);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{Opcodes.FLOAT, Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(FALOAD);
            method.visitInsn(FASTORE);
            method.visitIincInsn(2, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitVarInsn(FLOAD, 1);
            method.visitInsn(FRETURN);
            method.visitMaxs(4, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "shift", "([D)D", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitInsn(DALOAD);
            method.visitVarInsn(DSTORE, 1);
            method.visitInsn(ICONST_1);
            method.visitVarInsn(ISTORE, 3);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 4);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{Opcodes.DOUBLE, Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(DALOAD);
            method.visitInsn(DASTORE);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitVarInsn(DLOAD, 1);
            method.visitInsn(DRETURN);
            method.visitMaxs(4, 5);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "shift", "([Ljava/lang/Object;)Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;)TT;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitInsn(AALOAD);
            method.visitVarInsn(ASTORE, 1);
            method.visitInsn(ICONST_1);
            method.visitVarInsn(ISTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 3);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{"java/lang/Object", Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(AALOAD);
            method.visitInsn(AASTORE);
            method.visitIincInsn(2, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARETURN);
            method.visitMaxs(4, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "unshift", "([B)B", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(BALOAD);
            method.visitVarInsn(ISTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 2);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            Label local3 = new Label();
            method.visitJumpInsn(IFLE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(BALOAD);
            method.visitInsn(BASTORE);
            method.visitIincInsn(2, -1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(IRETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "unshift", "([S)S", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(SALOAD);
            method.visitVarInsn(ISTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 2);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            Label local3 = new Label();
            method.visitJumpInsn(IFLE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(SALOAD);
            method.visitInsn(SASTORE);
            method.visitIincInsn(2, -1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(IRETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "unshift", "([I)I", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(IALOAD);
            method.visitVarInsn(ISTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 2);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            Label local3 = new Label();
            method.visitJumpInsn(IFLE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(IALOAD);
            method.visitInsn(IASTORE);
            method.visitIincInsn(2, -1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(IRETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "unshift", "([J)J", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(LALOAD);
            method.visitVarInsn(LSTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 3);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.LONG, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            Label local3 = new Label();
            method.visitJumpInsn(IFLE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(LALOAD);
            method.visitInsn(LASTORE);
            method.visitIincInsn(3, -1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(LLOAD, 1);
            method.visitInsn(LRETURN);
            method.visitMaxs(5, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "unshift", "([F)F", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(FALOAD);
            method.visitVarInsn(FSTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 2);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.FLOAT, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            Label local3 = new Label();
            method.visitJumpInsn(IFLE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(FALOAD);
            method.visitInsn(FASTORE);
            method.visitIincInsn(2, -1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(FLOAD, 1);
            method.visitInsn(FRETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "unshift", "([D)D", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(DALOAD);
            method.visitVarInsn(DSTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 3);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.DOUBLE, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            Label local3 = new Label();
            method.visitJumpInsn(IFLE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(DALOAD);
            method.visitInsn(DASTORE);
            method.visitIincInsn(3, -1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(DLOAD, 1);
            method.visitInsn(DRETURN);
            method.visitMaxs(5, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "unshift", "([C)C", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(CALOAD);
            method.visitVarInsn(ISTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 2);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            Label local3 = new Label();
            method.visitJumpInsn(IFLE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(CALOAD);
            method.visitInsn(CASTORE);
            method.visitIincInsn(2, -1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(IRETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "unshift", "([Z)Z", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(BALOAD);
            method.visitVarInsn(ISTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 2);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            Label local3 = new Label();
            method.visitJumpInsn(IFLE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(BALOAD);
            method.visitInsn(BASTORE);
            method.visitIincInsn(2, -1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ILOAD, 1);
            method.visitInsn(IRETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "unshift", "([Ljava/lang/Object;)Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;)TT;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNULL, local0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local1 = new Label();
            method.visitJumpInsn(IFNE, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/EmptyCollectionException");
            method.visitInsn(DUP);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/EmptyCollectionException", "<init>", "()V");
            method.visitInsn(ATHROW);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(AALOAD);
            method.visitVarInsn(ASTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitVarInsn(ISTORE, 2);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{"java/lang/Object", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            Label local3 = new Label();
            method.visitJumpInsn(IFLE, local3);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(ICONST_1);
            method.visitInsn(ISUB);
            method.visitInsn(AALOAD);
            method.visitInsn(AASTORE);
            method.visitIincInsn(2, -1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "concat", "([B[B)[B", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(IADD);
            method.visitIntInsn(NEWARRAY, T_BYTE);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "concat", "([S[S)[S", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(IADD);
            method.visitIntInsn(NEWARRAY, T_SHORT);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "concat", "([I[I)[I", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(IADD);
            method.visitIntInsn(NEWARRAY, T_INT);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "concat", "([J[J)[J", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(IADD);
            method.visitIntInsn(NEWARRAY, T_LONG);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "concat", "([F[F)[F", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(IADD);
            method.visitIntInsn(NEWARRAY, T_FLOAT);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "concat", "([D[D)[D", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(IADD);
            method.visitIntInsn(NEWARRAY, T_DOUBLE);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "concat", "([C[C)[C", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(IADD);
            method.visitIntInsn(NEWARRAY, T_CHAR);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "concat", "([Z[Z)[Z", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(IADD);
            method.visitIntInsn(NEWARRAY, T_BOOLEAN);
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "concat", "([Ljava/lang/Object;[Ljava/lang/Object;)[Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;[TT;)[TT;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getComponentType", "()Ljava/lang/Class;");
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(IADD);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/reflect/Array", "newInstance", "(Ljava/lang/Class;I)Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitTypeInsn(CHECKCAST, "[Ljava/lang/Object;");
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "iterator", "([Ljava/lang/Object;)Ljava/util/ListIterator;", "<T:Ljava/lang/Object;>([TT;)Ljava/util/ListIterator<TT;>;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitInsn(ICONST_0);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "iterator", "([Ljava/lang/Object;II)Ljava/util/ListIterator;");
            method.visitInsn(ARETURN);
            method.visitMaxs(3, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "iterator", "([Ljava/lang/Object;II)Ljava/util/ListIterator;", "<T:Ljava/lang/Object;>([TT;II)Ljava/util/ListIterator<TT;>;", null);
            method.visitCode();
            method.visitTypeInsn(NEW, "net/ranides/assira/collection/ArrayUtils$1");
            method.visitInsn(DUP);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 1);
            method.visitMethodInsn(INVOKESPECIAL, "net/ranides/assira/collection/ArrayUtils$1", "<init>", "([Ljava/lang/Object;I)V");
            method.visitInsn(ARETURN);
            method.visitMaxs(4, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "arraycopy", "([Ljava/lang/Object;[Ljava/lang/Object;)[Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;[Ljava/lang/Object;)[TT;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getComponentType", "()Ljava/lang/Class;");
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ICMPLT, local0);
            method.visitVarInsn(ALOAD, 0);
            Label local1 = new Label();
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_APPEND, 1, new Object[]{"java/lang/Class"}, 0, null);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "make", "(Ljava/lang/Class;I)[Ljava/lang/Object;");
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{"[Ljava/lang/Object;"});
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 5);
            Label local2 = new Label();
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{"[Ljava/lang/Object;", Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 5);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 4);
            method.visitInsn(AALOAD);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "cast", "(Ljava/lang/Object;)Ljava/lang/Object;");
            method.visitInsn(AASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local2);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 6);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "arraycopy", "([Ljava/lang/Object;)[Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;)[TT;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitMethodInsn(INVOKESTATIC, "java/util/Arrays", "copyOf", "([Ljava/lang/Object;I)[Ljava/lang/Object;");
            method.visitInsn(ARETURN);
            method.visitMaxs(2, 1);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "arraycopy", "(Ljava/lang/Object;)Ljava/lang/Object;", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/reflect/Array", "getLength", "(Ljava/lang/Object;)I");
            method.visitVarInsn(ISTORE, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
            method.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getComponentType", "()Ljava/lang/Class;");
            method.visitInsn(ICONST_0);
            method.visitIntInsn(NEWARRAY, T_INT);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/reflect/Array", "newInstance", "(Ljava/lang/Class;[I)Ljava/lang/Object;");
            method.visitVarInsn(ASTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ILOAD, 1);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/System", "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V");
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "indexOf", "([Ljava/lang/Object;Ljava/lang/Object;)I", "<T:Ljava/lang/Object;>([TT;TT;)I", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            Label local0 = new Label();
            method.visitJumpInsn(IFNONNULL, local0);
            method.visitInsn(ICONST_M1);
            method.visitInsn(IRETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 2);
            Label local1 = new Label();
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_APPEND, 1, new Object[]{Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            Label local2 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local2);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(AALOAD);
            method.visitVarInsn(ALOAD, 1);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/generic/ValueUtils", "isEqual", "(Ljava/lang/Object;Ljava/lang/Object;)Z");
            Label local3 = new Label();
            method.visitJumpInsn(IFEQ, local3);
            method.visitVarInsn(ILOAD, 2);
            method.visitInsn(IRETURN);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitIincInsn(2, 1);
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitInsn(ICONST_M1);
            method.visitInsn(IRETURN);
            method.visitMaxs(2, 3);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "contains", "([Ljava/lang/Object;Ljava/lang/Object;)Z", "<T:Ljava/lang/Object;>([TT;TT;)Z", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 1);
            method.visitMethodInsn(INVOKESTATIC, "net/ranides/assira/collection/ArrayUtils", "indexOf", "([Ljava/lang/Object;Ljava/lang/Object;)I");
            Label local0 = new Label();
            method.visitJumpInsn(IFLT, local0);
            method.visitInsn(ICONST_1);
            Label local1 = new Label();
            method.visitJumpInsn(GOTO, local1);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ICONST_0);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[]{Opcodes.INTEGER});
            method.visitInsn(IRETURN);
            method.visitMaxs(2, 2);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "isEqual", "([B[B)Z", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ALOAD, 1);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local0);
            method.visitInsn(ICONST_1);
            method.visitInsn(IRETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            Label local1 = new Label();
            method.visitJumpInsn(IFNULL, local1);
            method.visitVarInsn(ALOAD, 1);
            Label local2 = new Label();
            method.visitJumpInsn(IFNONNULL, local2);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ICONST_0);
            method.visitInsn(IRETURN);
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 2);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ILOAD, 2);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPEQ, local3);
            method.visitInsn(ICONST_0);
            method.visitInsn(IRETURN);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_APPEND, 1, new Object[]{Opcodes.INTEGER}, 0, null);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 3);
            Label local4 = new Label();
            method.visitLabel(local4);
            method.visitFrame(Opcodes.F_APPEND, 1, new Object[]{Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 2);
            Label local5 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local5);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(BALOAD);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(BALOAD);
            Label local6 = new Label();
            method.visitJumpInsn(IF_ICMPEQ, local6);
            method.visitInsn(ICONST_0);
            method.visitInsn(IRETURN);
            method.visitLabel(local6);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local4);
            method.visitLabel(local5);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitInsn(ICONST_1);
            method.visitInsn(IRETURN);
            method.visitMaxs(3, 4);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "isEqual", "(I[B[B)Z", null, null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ALOAD, 2);
            Label local0 = new Label();
            method.visitJumpInsn(IF_ACMPNE, local0);
            method.visitInsn(ICONST_1);
            method.visitInsn(IRETURN);
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 1);
            Label local1 = new Label();
            method.visitJumpInsn(IFNULL, local1);
            method.visitVarInsn(ALOAD, 2);
            Label local2 = new Label();
            method.visitJumpInsn(IFNONNULL, local2);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ICONST_0);
            method.visitInsn(IRETURN);
            method.visitLabel(local2);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARRAYLENGTH);
            Label local3 = new Label();
            method.visitJumpInsn(IF_ICMPEQ, local3);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ILOAD, 0);
            Label local4 = new Label();
            method.visitJumpInsn(IF_ICMPLT, local4);
            method.visitVarInsn(ALOAD, 2);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ILOAD, 0);
            method.visitJumpInsn(IF_ICMPGE, local3);
            method.visitLabel(local4);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ICONST_0);
            method.visitInsn(IRETURN);
            method.visitLabel(local3);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 3);
            method.visitVarInsn(ALOAD, 1);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ILOAD, 0);
            method.visitMethodInsn(INVOKESTATIC, "java/lang/Math", "min", "(II)I");
            method.visitVarInsn(ISTORE, 4);
            Label local5 = new Label();
            method.visitLabel(local5);
            method.visitFrame(Opcodes.F_APPEND, 2, new Object[]{Opcodes.INTEGER, Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            Label local6 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local6);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(BALOAD);
            method.visitVarInsn(ALOAD, 2);
            method.visitVarInsn(ILOAD, 3);
            method.visitInsn(BALOAD);
            Label local7 = new Label();
            method.visitJumpInsn(IF_ICMPEQ, local7);
            method.visitInsn(ICONST_0);
            method.visitInsn(IRETURN);
            method.visitLabel(local7);
            method.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
            method.visitIincInsn(3, 1);
            method.visitJumpInsn(GOTO, local5);
            method.visitLabel(local6);
            method.visitFrame(Opcodes.F_CHOP, 2, null, 0, null);
            method.visitInsn(ICONST_1);
            method.visitInsn(IRETURN);
            method.visitMaxs(3, 5);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "apply", "([Ljava/lang/Object;Lnet/ranides/assira/generic/Function;)[Ljava/lang/Object;", "<S:Ljava/lang/Object;>([TS;Lnet/ranides/assira/generic/Function<*TS;>;)[Ljava/lang/Object;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitTypeInsn(ANEWARRAY, "java/lang/Object");
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local0 = new Label();
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{Opcodes.INTEGER, "[Ljava/lang/Object;", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local1);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 4);
            method.visitInsn(AALOAD);
            method.visitMethodInsn(INVOKEINTERFACE, "net/ranides/assira/generic/Function", "apply", "(Ljava/lang/Object;)Ljava/lang/Object;");
            method.visitInsn(AASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local0);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 5);
            method.visitEnd();
        }
        {
            MethodVisitor method = writer.visitMethod(ACC_PUBLIC + ACC_STATIC, "inverse", "([Ljava/lang/Object;Lnet/ranides/assira/generic/CoFunction;)[Ljava/lang/Object;", "<T:Ljava/lang/Object;>([TT;Lnet/ranides/assira/generic/CoFunction<TT;*>;)[Ljava/lang/Object;", null);
            method.visitCode();
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitVarInsn(ISTORE, 2);
            method.visitVarInsn(ALOAD, 0);
            method.visitInsn(ARRAYLENGTH);
            method.visitTypeInsn(ANEWARRAY, "java/lang/Object");
            method.visitVarInsn(ASTORE, 3);
            method.visitInsn(ICONST_0);
            method.visitVarInsn(ISTORE, 4);
            Label local0 = new Label();
            method.visitLabel(local0);
            method.visitFrame(Opcodes.F_APPEND, 3, new Object[]{Opcodes.INTEGER, "[Ljava/lang/Object;", Opcodes.INTEGER}, 0, null);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ILOAD, 2);
            Label local1 = new Label();
            method.visitJumpInsn(IF_ICMPGE, local1);
            method.visitVarInsn(ALOAD, 3);
            method.visitVarInsn(ILOAD, 4);
            method.visitVarInsn(ALOAD, 1);
            method.visitVarInsn(ALOAD, 0);
            method.visitVarInsn(ILOAD, 4);
            method.visitInsn(AALOAD);
            method.visitMethodInsn(INVOKEINTERFACE, "net/ranides/assira/generic/CoFunction", "inverse", "(Ljava/lang/Object;)Ljava/lang/Object;");
            method.visitInsn(AASTORE);
            method.visitIincInsn(4, 1);
            method.visitJumpInsn(GOTO, local0);
            method.visitLabel(local1);
            method.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
            method.visitVarInsn(ALOAD, 3);
            method.visitInsn(ARETURN);
            method.visitMaxs(5, 5);
            method.visitEnd();
        }
        writer.visitEnd();

        return writer.toByteArray();
    }
}
