// Path: src/org/sinrel/engine/util/VirtualZipModifer.java
// public class VirtualZipModifer {
// 	private File file;
// 	private ZipFile zipFile;
// 	private Map<String, byte[]> virtualEntries;
// 
// 	public VirtualZipModifer(File file) throws ZipException, IOException {
// 		this.file = file;
// 		virtualEntries = new HashMap<String, byte[]>();
// 	}
// 
// 	public File getFile() {
// 		return file;
// 	}
// 
// 	public byte[] getBytes(String key) {
// 		return virtualEntries.get(key);
// 	}
// 
// 	public Map<String, byte[]> getEntriesMap() {
// 		synchronized (this) {
// 			return virtualEntries;
// 		}
// 	}
// 
// 	public void putEntry(String key, byte[] value) {
// 		synchronized (this) {
// 			virtualEntries.put(key, value);
// 		}
// 	}
// 
// 	public void putClass(CtClass clazz) throws IOException, CannotCompileException {
// 		synchronized (this) {
// 			virtualEntries.put(clazz.getName().replace('.', '/') + ".class", clazz.toBytecode());
// 		}
// 	}
// 
// 	public void write() throws IOException, InterruptedException {
// 		write(false);
// 	}
// 
// 	public void write(boolean ignoreMetaInf) throws IOException, InterruptedException {
// 		synchronized (this) {
// 			Map<String, byte[]> newEntries = new HashMap<String, byte[]>();
// 
// 			zipFile = new ZipFile(file);
// 			Enumeration<? extends ZipEntry> numer = zipFile.entries();
// 			while (numer.hasMoreElements()) {
// 				ZipEntry entry = numer.nextElement();
// 				String name = entry.getName();
// 				if (!(ignoreMetaInf && name.startsWith("META-INF"))) {
// 					if (!virtualEntries.containsKey(name))
// 						newEntries.put(name, toByteArray(zipFile.getInputStream(entry)));
// 				}
// 			}
// 			zipFile.close();
// 
// 			Set<Entry<String, byte[]>> entrySet1 = virtualEntries.entrySet();
// 			for (Entry<String, byte[]> entry : entrySet1) {
// 				String name = entry.getKey();
// 				if (!(ignoreMetaInf && name.startsWith("META-INF"))) {
// 					newEntries.put(name, entry.getValue());
// 				}
// 			}
// 
// 			ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
// 			try {
// 				Set<Entry<String, byte[]>> entrySet2 = newEntries.entrySet();
// 				for (Entry<String, byte[]> entry : entrySet2) {
// 					zos.putNextEntry(new ZipEntry(entry.getKey()));
// 					zos.write(entry.getValue());
// 					zos.closeEntry();
// 				}
// 				Thread.sleep(0, 1);
// 			} finally {
// 				zos.flush();
// 				zos.close();
// 			}
// 
// 			virtualEntries.clear();
// 		}
// 	}
// 
// 	private byte[] toByteArray(InputStream input) throws IOException {
// 		ByteArrayOutputStream output = new ByteArrayOutputStream();
// 
// 		byte[] buffer = new byte[1024 * 4];
// 		int n = 0;
// 		while (-1 != (n = input.read(buffer)))
// 			output.write(buffer, 0, n);
// 		return output.toByteArray();
// 	}
// }


import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtField;
import javassist.CtMethod;
import javassist.NotFoundException;
import javassist.expr.ExprEditor;
import javassist.expr.FieldAccess;
import javassist.expr.NewExpr;
import org.sinrel.engine.util.VirtualZipModifer;
package org.sinrel.engine.library;



public final class PatchManager {

	protected static String class_joinserver = "ayh", class_checkserver = "iu";
	protected static String methodname_joinserver, methodsign_joinserver;
	protected static String methodname_checkserver, methodsign_checkserver;

// Path: src/org/sinrel/engine/util/VirtualZipModifer.java
// public class VirtualZipModifer {
// 	private File file;
// 	private ZipFile zipFile;
// 	private Map<String, byte[]> virtualEntries;
// 
// 	public VirtualZipModifer(File file) throws ZipException, IOException {
// 		this.file = file;
// 		virtualEntries = new HashMap<String, byte[]>();
// 	}
// 
// 	public File getFile() {
// 		return file;
// 	}
// 
// 	public byte[] getBytes(String key) {
// 		return virtualEntries.get(key);
// 	}
// 
// 	public Map<String, byte[]> getEntriesMap() {
// 		synchronized (this) {
// 			return virtualEntries;
// 		}
// 	}
// 
// 	public void putEntry(String key, byte[] value) {
// 		synchronized (this) {
// 			virtualEntries.put(key, value);
// 		}
// 	}
// 
// 	public void putClass(CtClass clazz) throws IOException, CannotCompileException {
// 		synchronized (this) {
// 			virtualEntries.put(clazz.getName().replace('.', '/') + ".class", clazz.toBytecode());
// 		}
// 	}
// 
// 	public void write() throws IOException, InterruptedException {
// 		write(false);
// 	}
// 
// 	public void write(boolean ignoreMetaInf) throws IOException, InterruptedException {
// 		synchronized (this) {
// 			Map<String, byte[]> newEntries = new HashMap<String, byte[]>();
// 
// 			zipFile = new ZipFile(file);
// 			Enumeration<? extends ZipEntry> numer = zipFile.entries();
// 			while (numer.hasMoreElements()) {
// 				ZipEntry entry = numer.nextElement();
// 				String name = entry.getName();
// 				if (!(ignoreMetaInf && name.startsWith("META-INF"))) {
// 					if (!virtualEntries.containsKey(name))
// 						newEntries.put(name, toByteArray(zipFile.getInputStream(entry)));
// 				}
// 			}
// 			zipFile.close();
// 
// 			Set<Entry<String, byte[]>> entrySet1 = virtualEntries.entrySet();
// 			for (Entry<String, byte[]> entry : entrySet1) {
// 				String name = entry.getKey();
// 				if (!(ignoreMetaInf && name.startsWith("META-INF"))) {
// 					newEntries.put(name, entry.getValue());
// 				}
// 			}
// 
// 			ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file)));
// 			try {
// 				Set<Entry<String, byte[]>> entrySet2 = newEntries.entrySet();
// 				for (Entry<String, byte[]> entry : entrySet2) {
// 					zos.putNextEntry(new ZipEntry(entry.getKey()));
// 					zos.write(entry.getValue());
// 					zos.closeEntry();
// 				}
// 				Thread.sleep(0, 1);
// 			} finally {
// 				zos.flush();
// 				zos.close();
// 			}
// 
// 			virtualEntries.clear();
// 		}
// 	}
// 
// 	private byte[] toByteArray(InputStream input) throws IOException {
// 		ByteArrayOutputStream output = new ByteArrayOutputStream();
// 
// 		byte[] buffer = new byte[1024 * 4];
// 		int n = 0;
// 		while (-1 != (n = input.read(buffer)))
// 			output.write(buffer, 0, n);
// 		return output.toByteArray();
// 	}
// }


// Path: src/org/sinrel/engine/library/PatchManager.java
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtField;
import javassist.CtMethod;
import javassist.NotFoundException;
import javassist.expr.ExprEditor;
import javassist.expr.FieldAccess;
import javassist.expr.NewExpr;
import org.sinrel.engine.util.VirtualZipModifer;

package org.sinrel.engine.library;



public final class PatchManager {

	protected static String class_joinserver = "ayh", class_checkserver = "iu";
	protected static String methodname_joinserver, methodsign_joinserver;
	protected static String methodname_checkserver, methodsign_checkserver;

	public static void patchWorkDir(final VirtualZipModifer virtualJar, final ClassPool pool, final String workDir) throws Exception {