class GizmoClassLoader extends ClassLoader {

    private final Map<String, byte[]> classNameToBytecodeMap = new HashMap<>();

    public GizmoClassLoader() {
        /*
         * As parent, Gizmo needs to use the same ClassLoader that loaded its own class.
         * Otherwise, issues will arise in Quarkus with MemberAccessors which were first loaded by Quarkus
         * and then loaded again by Gizmo, which uses the default parent ClassLoader.
         */
        super(GizmoClassLoader.class.getClassLoader());
    }

    @Override
    public String getName() {
        return "OptaPlanner Solver Gizmo ClassLoader";
    }

    @Override
    public Class<?> findClass(String name) throws ClassNotFoundException {<FILL_FUNCTION_BODY>}

    public synchronized byte[] getBytecodeFor(String className) {
        return classNameToBytecodeMap.get(className);
    }

    public boolean hasBytecodeFor(String className) {
        return getBytecodeFor(className) != null;
    }

    public synchronized void storeBytecode(String className, byte[] bytecode) {
        classNameToBytecodeMap.put(className, bytecode);
    }

}

        byte[] byteCode = getBytecodeFor(name);
        if (byteCode == null) { // Not a Gizmo generated class; load from context class loader.
            return Thread.currentThread().getContextClassLoader().loadClass(name);
        } else { // Gizmo generated class.
            return defineClass(name, byteCode, 0, byteCode.length);
        }
    
<methods>public void clearAssertionStatus() ,public final java.lang.Package getDefinedPackage(java.lang.String) ,public final java.lang.Package[] getDefinedPackages() ,public java.lang.String getName() ,public final java.lang.ClassLoader getParent() ,public static java.lang.ClassLoader getPlatformClassLoader() ,public java.net.URL getResource(java.lang.String) ,public java.io.InputStream getResourceAsStream(java.lang.String) ,public Enumeration<java.net.URL> getResources(java.lang.String) throws java.io.IOException,public static java.lang.ClassLoader getSystemClassLoader() ,public static java.net.URL getSystemResource(java.lang.String) ,public static java.io.InputStream getSystemResourceAsStream(java.lang.String) ,public static Enumeration<java.net.URL> getSystemResources(java.lang.String) throws java.io.IOException,public final java.lang.Module getUnnamedModule() ,public final boolean isRegisteredAsParallelCapable() ,public Class<?> loadClass(java.lang.String) throws java.lang.ClassNotFoundException,public Stream<java.net.URL> resources(java.lang.String) ,public void setClassAssertionStatus(java.lang.String, boolean) ,public void setDefaultAssertionStatus(boolean) ,public void setPackageAssertionStatus(java.lang.String, boolean) <variables>static final boolean $assertionsDisabled,final java.lang.Object assertionLock,Map<java.lang.String,java.lang.Boolean> classAssertionStatus,private volatile ConcurrentHashMap<?,?> classLoaderValueMap,private final ArrayList<Class<?>> classes,private boolean defaultAssertionStatus,private final java.security.ProtectionDomain defaultDomain,private final jdk.internal.loader.NativeLibraries libraries,private final java.lang.String name,private final java.lang.String nameAndId,private static final java.security.cert.Certificate[] nocerts,private final ConcurrentHashMap<java.lang.String,java.security.cert.Certificate[]> package2certs,private Map<java.lang.String,java.lang.Boolean> packageAssertionStatus,private final ConcurrentHashMap<java.lang.String,java.lang.NamedPackage> packages,private final ConcurrentHashMap<java.lang.String,java.lang.Object> parallelLockMap,private final java.lang.ClassLoader parent,private static volatile java.lang.ClassLoader scl,private final java.lang.Module unnamedModule