diff --git a/lib/Makefile b/lib/Makefile
new file mode 100644
index 00000000..fc48ca27
--- /dev/null
+++ b/lib/Makefile
@@ -0,0 +1,53 @@
+LIBPICRIN_SRCS = \
+	blob.c\
+	bool.c\
+	char.c\
+	cont.c\
+	data.c\
+	debug.c\
+	dict.c\
+	error.c\
+	gc.c\
+	load.c\
+	number.c\
+	pair.c\
+	port.c\
+	proc.c\
+	record.c\
+	state.c\
+	string.c\
+	symbol.c\
+	var.c\
+	vector.c\
+	weak.c\
+	ext/eval.c\
+	ext/read.c\
+	ext/write.c\
+	ext/file.c
+LIBPICRIN_OBJS = \
+	$(LIBPICRIN_SRCS:.c=.o)
+
+LIBPICRIN_HEADERS = \
+	include/picrin.h\
+	include/picconf.h\
+	include/picrin/extra.h\
+	include/picrin/setup.h\
+	include/picrin/value.h\
+	khash.h\
+	object.h\
+	state.h
+
+CFLAGS += -I./include -Wall -Wextra -O0 -g
+
+mini-picrin: libpicrin.so ext/main.o
+	$(CC) $(CFLAGS) -o $@ libpicrin.so ext/main.o
+
+libpicrin.so: $(LIBPICRIN_OBJS)
+	$(CC) $(CFLAGS) -shared -o $@ $(LIBPICRIN_OBJS) $(LDFLAGS)
+
+$(LIBPICRIN_OBJS): $(LIBPICRIN_HEADERS)
+
+clean:
+	$(RM) $(LIBPICRIN_OBJS) libpicrin.so
+
+.PHONY: clean
diff --git a/lib/ext/boot.c b/lib/ext/eval.c
similarity index 81%
rename from lib/ext/boot.c
rename to lib/ext/eval.c
index e8913a9a..b55c2b2d 100644
--- a/lib/ext/boot.c
+++ b/lib/ext/eval.c
@@ -2,7 +2,7 @@
 #include "picrin/extra.h"
 
 #if PIC_USE_EVAL
-static const char boot_compile_rom[][80] = {
+static const char eval_rom[][80] = {
 "(((LOADU 0) (GSET 0 0) (LOADU 0) (GSET 0 1) (LOADU 0) (GSET 0 2) (LOADU 0) (GSET",
 " 0 3) (LOADU 0) (GSET 0 4) (LOADU 0) (GSET 0 5) (LOADU 0) (GSET 0 6) (LOADU 0) (",
 "GSET 0 7) (LOADU 0) (GSET 0 8) (LOADU 0) (GSET 0 9) (LOADU 0) (GSET 0 10) (LOADU",
@@ -1669,403 +1669,10 @@ static const char boot_compile_rom[][80] = {
 };
 #endif
 
-#if PIC_USE_LIBRARY
-static const char boot_library_rom[][80] = {
-"(((LOADU 0) (GSET 0 0) (LOADU 0) (GSET 0 1) (LOADU 0) (GSET 0 2) (LOADU 0) (GSET",
-" 0 3) (LOADU 0) (GSET 0 4) (LOADU 0) (GSET 0 5) (LOADU 0) (GSET 0 6) (GREF 0 7) ",
-"(LREF 1 0 1) (PROC 2 0) (PROC 3 1) (CALL 3)) ((((PROC 0 0) (LREF 1 0 1) (CALL 1)",
-") ((((PROC 0 0) (LREF 1 0 1) (LOADF 2) (LOADF 3) (LOADF 4) (LOADF 5) (LOADF 6) (",
-"LOADF 7) (LOADF 8) (LOADF 9) (LOADF 10) (CALL 10)) ((((PROC 0 0) (LSET 0 0 10) (",
-"GREF 0 0) (PROC 1 1) (LOAD 2 1) (LOADN 3) (CALL 3)) ((((PROC 0 0) (LREF 1 0 1) (",
-"LOADF 2) (LOADF 3) (CALL 3)) ((((PROC 0 0) (PROC 1 1) (CALL 1)) ((((GREF 0 0) (P",
-"ROC 1 0) (LREF 2 2 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 0) (GREF 0 0) (LREF 1 1 ",
-"1) (LOAD 2 1) (LREF 3 3 2) (CALL 3) 0 (LREF 0 1 1) (LOADU 1) (CALL 1)) () (error",
-" \"library name should be a list of at least one symbols\") (1 . #f) 5)) (null?) (",
-"1 . #f) 4) (((PROC 0 0) (LSET 0 1 3) (PROC 0 1) (LSET 0 1 2) (GREF 0 0) (PROC 1 ",
-"2) (LREF 2 2 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((LR",
-"EF 0 0 1) (COND 0 1) (GREF 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2) 1 (PROC 0 1) (P",
-"ROC 1 2) (CALL 1)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 ",
-"0) (PROC 1 0) (PROC 2 1) (LREF 3 0 2) (CALL 3)) ((((LREF 0 1 1) (LREF 1 1 2) (CA",
-"LL 1)) () () (1 . #f) 3) (((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (LOAD 3 1) (CALL 3",
-")) ((((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 2) (L",
-"REF 0 0 1) (LREF 1 0 2) (CALL 1) 2 (GREF 0 0) (PROC 1 0) (LREF 2 2 2) (LOAD 3 1)",
-" (CALL 3)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (CO",
-"ND 0 3) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 3 (LREF 0 0 1) (LOADF 1) (CALL 1)) ()",
-" () (2 . #f) 3)) () (1 . #f) 4)) (char=? #\\:) (2 . #f) 5) (((LREF 0 0 1) (COND 0",
-" 4) (GREF 0 0) (LREF 1 2 1) (LOAD 2 1) (LREF 3 6 2) (CALL 3) 4 (LREF 0 2 1) (LOA",
-"DU 1) (CALL 1)) () (error \"elements of library name may not contain '.' or ':'\")",
-" (1 . #f) 5)) () (1 . #f) 4)) (char=? #\\.) (2 . #f) 5)) (string-for-each) (2 . #",
-"f) 5)) () (1 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 2 2) (CALL 2)) ((((LREF 0 ",
-"0 1) (COND 0 5) (GREF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2) 5 (LREF 0 1 1) (LOAD",
-"F 1) (CALL 1)) ((((LREF 0 0 1) (COND 0 6) (GREF 0 0) (LREF 1 2 1) (LOADI 2 0) (L",
-"REF 3 4 2) (CALL 3) 6 (LREF 0 2 1) (LOADF 1) (CALL 1)) () (<=) (1 . #f) 5)) (exa",
-"ct?) (1 . #f) 4)) (number?) (1 . #f) 4) (((LREF 0 0 1) (COND 0 7) (GREF 0 0) (LR",
-"EF 1 2 1) (LREF 2 2 2) (CALL 2) 7 (GREF 0 1) (LREF 1 2 1) (LOAD 2 2) (LREF 3 2 2",
-") (CALL 3)) () (number->string error \"symbol or non-negative integer is required",
-"\") (1 . #f) 5)) (symbol->string) (1 . #f) 4)) (symbol?) (2 . #f) 4) (((PROC 0 0)",
-" (LREF 1 0 1) (CALL 1)) ((((PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) ((((PROC ",
-"0 0) (LSET 0 0 2) (GREF 0 0) (PROC 1 1) (LREF 2 2 2) (CALL 2)) ((((GREF 0 0) (PR",
-"OC 1 0) (LREF 2 0 3) (CALL 2)) ((((LREF 0 0 1) (COND 0 8) (LREF 0 1 1) (LREF 1 1",
-" 2) (CALL 1) 8 (GREF 0 0) (PROC 1 0) (LREF 2 1 3) (CALL 2)) ((((GREF 0 0) (PROC ",
-"1 0) (LREF 2 2 2) (LREF 3 5 3) (LREF 4 0 1) (CALL 4)) ((((GREF 0 0) (PROC 1 0) (",
-"LREF 2 3 3) (CALL 2)) ((((LREF 0 5 2) (LREF 1 4 1) (LREF 2 1 1) (LREF 3 0 1) (CA",
-"LL 3)) () () (1 . #f) 5)) (cdr) (1 . #f) 4)) (string-append) (1 . #f) 6)) (car) ",
-"(1 . #f) 4)) (null?) (3 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2)) ",
-"((((LREF 0 2 2) (LREF 1 2 1) (LREF 2 1 1) (LREF 3 0 1) (CALL 3)) () () (1 . #f) ",
-"5)) (cdr) (1 . #f) 4)) (car) (2 . #f) 4)) () (1 . #f) 4)) () (3 . #f) 3) (((LREF",
-" 0 0 1) (COND 0 9) (LREF 0 2 1) (LREF 1 3 2) (CALL 1) 9 (GREF 0 0) (PROC 1 0) (L",
-"REF 2 2 3) (LREF 3 3 2) (CALL 3)) ((((LREF 0 3 2) (PROC 1 0) (LREF 2 0 1) (LOAD ",
-"3 0) (CALL 3)) ((((GREF 0 0) (LREF 1 4 1) (LREF 2 0 1) (CALL 2)) () (string->sym",
-"bol) (1 . #f) 4)) (\".\") (1 . #f) 5)) (map) (1 . #f) 5)) (symbol?) (1 . #f) 4)) (",
-") (3 . #f) 3)) () (2 . #f) 5) (((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (C",
-"ALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (LREF 3 2 10) (CALL 3)) ((((LREF 0",
-" 0 1) (LSET 0 3 9) (GREF 0 0) (PROC 1 0) (CALL 1)) ((((LREF 0 0 1) (LSET 0 4 8) ",
-"(PROC 0 0) (LSET 0 4 7) (PROC 0 1) (LSET 0 4 6) (PROC 0 2) (LSET 0 4 5) (PROC 0 ",
-"3) (LSET 0 4 4) (PROC 0 4) (LSET 0 4 3) (PROC 0 5) (LSET 0 4 2) (PROC 0 6) (PROC",
-" 1 7) (PROC 2 8) (CALL 2)) ((((LREF 0 5 10) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((",
-"((GREF 0 0) (LREF 1 1 1) (LREF 2 6 8) (LREF 3 0 1) (CALL 3)) () (dictionary-has?",
-") (1 . #f) 5)) () (2 . #f) 4) (((LREF 0 5 10) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ",
-"((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF",
-" 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (LOAD 3 1) (CALL 3)) (((",
-"(GREF 0 0) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 ",
-"1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (CALL 1)) ((((PROC 0 0) (LREF 1 5 1) (LREF",
-" 2 1 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOAD 3 2) (L",
-"REF 4 0 2) (CALL 4)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOAD 3 2) (LREF 4 1 2)",
-" (CALL 4)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOAD 3 2) (LREF 4 2 2) (CALL 4))",
-" ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOAD 3 2) (LREF 4 3 2) (CALL 4)) ((((GREF ",
-"0 0) (PROC 1 0) (LREF 2 4 2) (LREF 3 4 3) (CALL 3)) ((((GREF 0 0) (LREF 1 5 1) (",
-"LREF 2 18 8) (LREF 3 11 2) (LREF 4 0 1) (CALL 4)) () (dictionary-set!) (1 . #f) ",
-"6)) (cons) (1 . #f) 5)) (set-identifier! cond-expand cond-expand) (1 . #f) 6)) (",
-"set-identifier! export export) (1 . #f) 6)) (set-identifier! import import) (1 .",
-" #f) 6)) (set-identifier! define-library define-library) (3 . #f) 6)) () (1 . #f",
-") 5)) (make-dictionary) (1 . #f) 3)) (make-environment) (1 . #f) 4)) (string->sy",
-"mbol) (1 . #f) 4)) (string-append \":\") (1 . #f) 5)) (symbol->string) (2 . #f) 4)",
-") () (1 . #f) 4)) () (2 . #f) 4) (((LREF 0 5 10) (PROC 1 0) (LREF 2 0 2) (CALL 2",
-")) ((((GREF 0 0) (PROC 1 0) (LREF 2 6 8) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (L",
-"REF 1 2 1) (LREF 2 0 1) (CALL 2)) () (car) (1 . #f) 4)) (dictionary-ref) (1 . #f",
-") 5)) () (2 . #f) 4) (((LREF 0 5 10) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF ",
-"0 0) (PROC 1 0) (LREF 2 6 8) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (LREF 1 2 1) (",
-"LREF 2 0 1) (CALL 2)) () (cdr) (1 . #f) 4)) (dictionary-ref) (1 . #f) 5)) () (2 ",
-". #f) 4) (((LREF 0 5 4) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 ",
-"0) (LREF 2 0 1) (LREF 3 1 3) (CALL 3)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (",
-"CALL 2)) ((((LREF 0 8 9) (PROC 1 0) (CALL 1)) ((((LREF 0 9 5) (PROC 1 0) (LREF 2",
-" 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) ",
-"(LREF 1 0 1) (LREF 2 6 4) (LREF 3 3 2) (LREF 4 0 2) (CALL 4)) () (set-identifier",
-"!) (2 . #f) 6)) () (1 . #f) 4)) () (1 . #f) 4)) () (2 . #f) 3)) () (1 . #f) 4)) ",
-"(dictionary-ref) (1 . #f) 5)) () (4 . #f) 4) (((LREF 0 5 9) (PROC 1 0) (CALL 1))",
-" ((((LREF 0 6 5) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((LREF 0 7 9) (PROC 1 0) (C",
-"ALL 1)) ((((LREF 0 8 4) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 ",
-"4 1) (LREF 2 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 5 2) (",
-"LREF 3 0 2) (CALL 3)) ((((GREF 0 0) (LREF 1 1 1) (LREF 2 1 3) (LREF 3 6 3) (LREF",
-" 4 0 1) (CALL 4)) () (dictionary-set!) (1 . #f) 6)) (find-identifier) (3 . #f) 5",
-")) () (1 . #f) 5)) () (1 . #f) 4)) () (1 . #f) 3)) () (1 . #f) 4)) () (3 . #f) 3",
-") (((LREF 0 0 2) (PROC 1 0) (LOAD 2 0) (PROC 3 1) (CALL 3)) ((((LREF 0 1 2) (PRO",
-"C 1 0) (LOAD 2 0) (PROC 3 1) (CALL 3)) ((((LREF 0 2 2) (PROC 1 0) (LOAD 2 0) (PR",
-"OC 3 1) (CALL 3)) ((((LREF 0 3 2) (LREF 1 3 1) (LOAD 2 0) (PROC 3 0) (CALL 3)) (",
-"(((PROC 0 0) (LREF 1 0 1) (LOADU 2) (LOADU 3) (CALL 3)) ((((PROC 0 0) (LSET 0 0 ",
-"2) (PROC 0 1) (LSET 0 0 3) (GREF 0 0) (PROC 1 2) (LREF 2 1 2) (CALL 2)) ((((GREF",
-" 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 10) (GREF 0 0) (",
-"LREF 1 1 1) (LREF 2 1 2) (LREF 3 1 2) (CALL 3) 10 (PROC 0 0) (PROC 1 1) (CALL 1)",
-") ((((GREF 0 0) (PROC 1 0) (LREF 2 2 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 11) (G",
-"REF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2) 11 (LREF 0 1 1) (LOADF 1) (CALL 1)) ((",
-"((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (LOADI 3 3) (CALL 3)) ((((LREF 0 0 1) (COND ",
-"0 12) (GREF 0 0) (PROC 1 0) (LREF 2 5 2) (CALL 2) 12 (LREF 0 3 1) (LOADF 1) (CAL",
-"L 1)) ((((GREF 0 0) (LREF 1 4 1) (LREF 2 0 1) (LOAD 3 1) (CALL 3)) () (eq? renam",
-"e) (1 . #f) 5)) (car) (1 . #f) 4)) (=) (1 . #f) 5)) (length) (1 . #f) 4)) (list?",
-") (1 . #f) 4) (((LREF 0 0 1) (COND 0 13) (GREF 0 0) (PROC 1 0) (LREF 2 2 2) (LOA",
-"DI 3 1) (CALL 3) 13 (GREF 0 1) (LREF 1 2 1) (LOAD 2 2) (CALL 2)) ((((GREF 0 0) (",
-"PROC 1 0) (LREF 2 3 2) (LOADI 3 2) (CALL 3)) ((((GREF 0 0) (LREF 1 4 1) (LREF 2 ",
-"1 1) (LREF 3 0 1) (CALL 3)) () (cons) (1 . #f) 5)) (list-ref) (1 . #f) 5)) (list",
-"-ref error \"malformed export\") (1 . #f) 5)) (cons) (1 . #f) 5)) (symbol?) (2 . #",
-"f) 4) (((LREF 0 1 2) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((PROC 0 0) (LREF 1 1 1",
-") (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GRE",
-"F 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((LREF 0 15 2) (LREF 1 2 1) (LREF 2 1",
-" 1) (LREF 3 0 1) (CALL 3)) () () (1 . #f) 5)) (cdr) (1 . #f) 4)) (car) (2 . #f) ",
-"4)) () (1 . #f) 4)) () (2 . #f) 4) (((GREF 0 0) (LREF 1 1 1) (LREF 2 1 3) (LREF ",
-"3 0 1) (CALL 3)) () (for-each) (1 . #f) 5)) (cdr) (3 . #f) 4)) () (3 . #f) 5)) (",
-"export) (1 . #f) 5) (((PROC 0 0) (LREF 1 0 1) (PROC 2 1) (PROC 3 2) (PROC 4 3) (",
-"CALL 4)) ((((PROC 0 0) (LREF 1 0 1) (LOADU 2) (LOADU 3) (CALL 3)) ((((PROC 0 0) ",
-"(LSET 0 0 2) (PROC 0 1) (LSET 0 0 3) (PROC 0 2) (LREF 1 0 1) (LOADU 2) (CALL 2))",
-" ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((PROC 0 0) (LREF 1 1 1) (LRE",
-"F 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (LOAD 3 1) (CALL 3)) ((",
-"((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 14) (LREF ",
-"0 0 1) (LREF 1 0 2) (CALL 1) 14 (GREF 0 0) (PROC 1 0) (LREF 2 2 2) (LOAD 3 1) (C",
-"ALL 3)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND ",
-"0 15) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 15 (GREF 0 0) (PROC 1 0) (LREF 2 4 2) (",
-"LOAD 3 1) (CALL 3)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0",
-" 0 2) (COND 0 16) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 16 (GREF 0 0) (PROC 1 0) (L",
-"REF 2 6 2) (LOAD 3 1) (CALL 3)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)",
-") ((((LREF 0 0 2) (COND 0 17) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 17 (LREF 0 0 1)",
-" (LOADF 1) (CALL 1)) () () (2 . #f) 3)) () (1 . #f) 4)) (eqv? except) (2 . #f) 5",
-")) () (1 . #f) 4)) (eqv? prefix) (2 . #f) 5)) () (1 . #f) 4)) (eqv? rename) (2 .",
-" #f) 5) (((LREF 0 0 1) (COND 0 18) (GREF 0 0) (PROC 1 0) (LREF 2 4 2) (CALL 2) 1",
-"8 (LOADT 0) (COND 0 19) (LREF 0 6 4) (LREF 1 2 1) (LREF 2 4 2) (CALL 2) 19 (LREF",
-" 0 2 1) (LOADU 1) (CALL 1)) ((((LREF 0 6 2) (LREF 1 3 1) (LREF 2 0 1) (CALL 2)) ",
-"() () (1 . #f) 4)) (cadr) (1 . #f) 4)) () (1 . #f) 4)) (eqv? only) (2 . #f) 5)) ",
-"() (1 . #f) 4)) (car) (2 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2))",
-" ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LRE",
-"F 2 0 2) (LOAD 3 1) (CALL 3)) ((((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((",
-"((LREF 0 0 2) (COND 0 20) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 20 (LREF 0 0 1) (LO",
-"ADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 21) (GREF 0 0) (PROC 1",
-" 0) (LREF 2 4 2) (CALL 2) 21 (GREF 0 1) (PROC 1 1) (LREF 2 2 2) (LOAD 3 2) (CALL",
-" 3)) ((((LREF 0 6 3) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 4 1",
-") (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 7 2) (CALL 2)) ((((GRE",
-"F 0 0) (LREF 1 1 1) (PROC 2 0) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (LREF 1 0 1)",
-" (LREF 2 0 2) (LREF 3 2 2) (CALL 3)) () (assq) (2 . #f) 5)) (map) (1 . #f) 5)) (",
-"cddr) (2 . #f) 4)) () (1 . #f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF ",
-"2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 22) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) ",
-"22 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 23)",
-" (GREF 0 0) (PROC 1 0) (LREF 2 6 2) (CALL 2) 23 (GREF 0 1) (PROC 1 1) (LREF 2 4 ",
-"2) (LOAD 3 2) (CALL 3)) ((((LREF 0 8 3) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GR",
-"EF 0 0) (PROC 1 0) (LREF 2 8 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (PROC 2 1) (L",
-"REF 3 0 1) (CALL 3)) ((((PROC 0 0) (LREF 1 8 1) (LREF 2 2 1) (LREF 3 0 1) (CALL ",
-"3)) ((((GREF 0 0) (LREF 1 0 1) (PROC 2 0) (LREF 3 0 2) (CALL 3)) ((((GREF 0 0) (",
-"PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (LREF 3 2",
-" 3) (CALL 3)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) ",
-"(COND 0 24) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 24 (PROC 0 0) (LREF 1 0 1) (LREF ",
-"2 3 2) (CALL 2)) ((((LREF 0 0 2) (COND 0 25) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) ",
-"25 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f) 3)) () (2 . #f) 4)) () (1 . #",
-"f) 4)) (assq) (1 . #f) 5)) (car) (2 . #f) 4)) (map) (3 . #f) 5)) () (1 . #f) 5) ",
-"(((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 ",
-"1 2) (CALL 2)) ((((GREF 0 0) (LREF 1 2 1) (LREF 2 1 1) (LREF 3 0 1) (CALL 3)) ()",
-" (cons) (1 . #f) 5)) (cadr) (1 . #f) 4)) (car) (2 . #f) 4)) (map) (1 . #f) 5)) (",
-"cddr) (1 . #f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2))",
-" ((((LREF 0 0 2) (COND 0 26) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 26 (LREF 0 0 1) ",
-"(LOADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 27) (GREF 0 0) (PRO",
-"C 1 0) (LREF 2 8 2) (CALL 2) 27 (GREF 0 1) (PROC 1 1) (LREF 2 6 2) (LOAD 3 2) (C",
-"ALL 3)) ((((LREF 0 10 3) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1",
-" 8 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 0 1) (PROC 2 0) (LREF 3 0 2) ",
-"(CALL 3)) ((((LREF 0 14 2) (PROC 1 0) (LREF 2 12 2) (CALL 2)) ((((GREF 0 0) (PRO",
-"C 1 0) (LREF 2 1 2) (CALL 2)) ((((LREF 0 16 3) (PROC 1 0) (LREF 2 1 1) (LREF 3 0",
-" 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2)) ((((GREF 0 0) (LRE",
-"F 1 4 1) (LREF 2 1 1) (LREF 3 0 1) (CALL 3)) () (cons) (1 . #f) 5)) (cdr) (1 . #",
-"f) 4)) () (1 . #f) 5)) (car) (1 . #f) 4)) () (2 . #f) 4)) (map) (2 . #f) 5)) () ",
-"(1 . #f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((L",
-"REF 0 0 2) (COND 0 28) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 28 (LREF 0 0 1) (LOADF",
-" 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 29) (GREF 0 0) (PROC 1 0)",
-" (LREF 2 10 2) (CALL 2) 29 (LOADT 0) (COND 0 32) (LREF 0 12 4) (PROC 1 1) (LREF ",
-"2 10 2) (CALL 2) 32 (LREF 0 8 1) (LOADU 1) (CALL 1)) ((((LREF 0 12 3) (PROC 1 0)",
-" (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 10 1) (LREF 2 0 1) (CALL 2)) ((((P",
-"ROC 0 0) (LREF 1 0 1) (CALL 1)) ((((PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) (",
-"(((PROC 0 0) (LSET 0 0 2) (LREF 0 0 2) (LREF 1 0 1) (LREF 2 2 2) (CALL 2)) ((((G",
-"REF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 30) (LREF 0 1",
-" 1) (LOADN 1) (CALL 1) 30 (GREF 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((GREF ",
-"0 0) (PROC 1 0) (LREF 2 18 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 1 1) (L",
-"REF 3 0 1) (CALL 3)) ((((LREF 0 0 1) (COND 0 31) (GREF 0 0) (PROC 1 0) (LREF 2 4",
-" 2) (CALL 2) 31 (GREF 0 1) (PROC 1 1) (LREF 2 4 2) (CALL 2)) ((((LREF 0 6 2) (LR",
-"EF 1 5 1) (LREF 2 0 1) (CALL 2)) () () (1 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF",
-" 2 5 2) (CALL 2)) ((((LREF 0 7 2) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0",
-") (LREF 1 7 1) (LREF 2 2 1) (LREF 3 0 1) (CALL 3)) () (cons) (1 . #f) 5)) () (1 ",
-". #f) 4)) (cdr) (1 . #f) 4)) (cdr car) (1 . #f) 4)) (memq) (1 . #f) 5)) (cddr) (",
-"1 . #f) 4)) (caar) (1 . #f) 4)) (null?) (2 . #f) 4)) () (2 . #f) 4)) () (1 . #f)",
-" 4)) () (2 . #f) 3)) () (1 . #f) 4)) () (1 . #f) 4) (((LREF 0 22 4) (PROC 1 0) (",
-"LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 10 1) (PROC 2 0) (LREF 3 0 1) (CALL ",
-"3)) ((((GREF 0 0) (LREF 1 0 1) (LREF 2 0 2) (LREF 3 0 2) (CALL 3)) () (cons) (2 ",
-". #f) 5)) (dictionary-map) (1 . #f) 5)) () (1 . #f) 4)) (cadr) (1 . #f) 4)) () (",
-"1 . #f) 4)) (cadr eqv? except) (1 . #f) 5)) () (1 . #f) 4)) (cadr eqv? prefix) (",
-"1 . #f) 5)) () (1 . #f) 4)) (cadr eqv? rename) (1 . #f) 5)) () (1 . #f) 4)) (eqv",
-"? only) (2 . #f) 5)) () (1 . #f) 4)) (car) (2 . #f) 4) (((PROC 0 0) (LSET 0 0 2)",
-" (GREF 0 0) (PROC 1 1) (LREF 2 3 2) (CALL 2)) ((((LREF 0 2 2) (PROC 1 0) (LREF 2",
-" 0 2) (CALL 2)) ((((LREF 0 3 3) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((PROC 0 0) ",
-"(LREF 1 2 1) (LREF 2 1 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (LREF 1 0 1) (PRO",
-"C 2 0) (LREF 3 0 3) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((",
-"((GREF 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((LREF 0 18 3) (LREF 1 2 1) (LRE",
-"F 2 3 2) (LREF 3 1 1) (LREF 4 0 1) (CALL 4)) () () (1 . #f) 6)) (car) (1 . #f) 4",
-")) (cdr) (2 . #f) 4)) (for-each) (3 . #f) 5)) () (1 . #f) 5)) () (1 . #f) 4)) ()",
-" (2 . #f) 4) (((GREF 0 0) (LREF 1 1 1) (LREF 2 1 2) (LREF 3 0 1) (CALL 3)) () (f",
-"or-each) (1 . #f) 5)) (cdr) (2 . #f) 4)) () (3 . #f) 4)) () (4 . #f) 5) (((GREF ",
-"0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (CA",
-"LL 2)) ((((GREF 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) () (car) (1 . #f) 4)) (",
-"cdr) (1 . #f) 4)) (cdr) (2 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2",
-")) ((((GREF 0 0) (PROC 1 0) (LREF 2 1 3) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LRE",
-"F 2 1 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (LREF 1 3 1) (LREF 2 0 1) (CALL 2)",
-") () (string->symbol) (1 . #f) 4)) (string-append) (1 . #f) 5)) (symbol->string)",
-" (1 . #f) 4)) (symbol->string) (3 . #f) 4) (((LREF 0 9 7) (PROC 1 0) (LREF 2 0 2",
-") (CALL 2)) ((((LREF 0 0 1) (COND 0 33) (LREF 0 1 1) (LREF 1 1 2) (CALL 1) 33 (G",
-"REF 0 0) (LREF 1 1 1) (LOAD 2 1) (LREF 3 1 2) (CALL 3)) () (error \"library not f",
-"ound\") (1 . #f) 5)) () (2 . #f) 4)) () (3 . #f) 6)) (import) (1 . #f) 5) (((PROC",
-" 0 0) (LREF 1 0 1) (LOADU 2) (CALL 2)) ((((PROC 0 0) (LSET 0 0 2) (PROC 0 1) (LR",
-"EF 1 0 1) (CALL 1)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (LOAD 3 1) (CALL 3)) (",
-"(((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 34) (LR",
-"EF 0 0 1) (LREF 1 0 2) (CALL 1) 34 (PROC 0 0) (PROC 1 1) (CALL 1)) ((((GREF 0 0)",
-" (PROC 1 0) (LREF 2 3 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 35) (GREF 0 0) (PROC ",
-"1 0) (CALL 1) 35 (LREF 0 1 1) (LOADF 1) (CALL 1)) ((((GREF 0 0) (LREF 1 2 1) (LR",
-"EF 2 5 2) (LREF 3 0 1) (CALL 3)) () (memq) (1 . #f) 5)) (features) (1 . #f) 3)) ",
-"(symbol?) (1 . #f) 4) (((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF ",
-"0 0 2) (COND 0 36) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 36 (PROC 0 0) (PROC 1 1) (",
-"CALL 1)) ((((GREF 0 0) (PROC 1 0) (LREF 2 5 2) (CALL 2)) ((((LREF 0 0 1) (COND 0",
-" 37) (GREF 0 0) (PROC 1 0) (LREF 2 6 2) (CALL 2) 37 (LREF 0 1 1) (LOADF 1) (CALL",
-" 1)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) ",
-"(LREF 2 0 2) (LOAD 3 1) (CALL 3)) ((((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)",
-") ((((LREF 0 0 2) (COND 0 38) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 38 (LREF 0 0 1)",
-" (LOADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 39) (GREF 0 0) (PR",
-"OC 1 0) (LREF 2 10 2) (CALL 2) 39 (GREF 0 1) (PROC 1 1) (LREF 2 2 2) (LOAD 3 2) ",
-"(CALL 3)) ((((LREF 0 20 7) (LREF 1 3 1) (LREF 2 0 1) (CALL 2)) () () (1 . #f) 4)",
-" (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 40) (LRE",
-"F 0 0 1) (LREF 1 0 2) (CALL 1) 40 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f",
-") 3) (((LREF 0 0 1) (COND 0 41) (GREF 0 0) (PROC 1 0) (LREF 2 12 2) (CALL 2) 41 ",
-"(GREF 0 1) (PROC 1 1) (LREF 2 4 2) (LOAD 3 2) (CALL 3)) ((((LREF 0 14 2) (PROC 1",
-" 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 6 1) (LREF 2 0 1) (CALL 2)) () ",
-"(not) (1 . #f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2))",
-" ((((LREF 0 0 2) (COND 0 42) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 42 (LREF 0 0 1) ",
-"(LOADF 1) (CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 43) (PROC 0 0) (LRE",
-"F 1 6 1) (CALL 1) 43 (GREF 0 0) (PROC 1 1) (LREF 2 6 2) (LOAD 3 1) (CALL 3)) (((",
-"(PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) ((((PROC 0 0) (LSET 0 0 2) (GREF 0 0",
-") (PROC 1 1) (LREF 2 16 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL",
-" 2)) ((((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 4",
-"4) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 44 (PROC 0 0) (PROC 1 1) (CALL 1)) ((((GRE",
-"F 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2)) ((((LREF 0 22 2) (PROC 1 0) (LREF 2 0 1",
-") (CALL 2)) ((((LREF 0 0 1) (COND 0 45) (GREF 0 0) (PROC 1 0) (LREF 2 5 2) (CALL",
-" 2) 45 (LREF 0 2 1) (LOADF 1) (CALL 1)) ((((LREF 0 7 2) (LREF 1 3 1) (LREF 2 0 1",
-") (CALL 2)) () () (1 . #f) 4)) (cdr) (1 . #f) 4)) () (1 . #f) 4)) (car) (1 . #f)",
-" 4) (((PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 46)",
-" (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 46 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2",
-" . #f) 3)) () (1 . #f) 4)) () (2 . #f) 3)) () (1 . #f) 4)) (null?) (2 . #f) 4) (",
-"((LREF 0 1 2) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) () () (1 . #f) 4)) (cdr) (2 . ",
-"#f) 4)) () (1 . #f) 4) (((PROC 0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0",
-" 0 2) (COND 0 47) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 47 (LREF 0 0 1) (LOADF 1) (",
-"CALL 1)) () () (2 . #f) 3) (((LREF 0 0 1) (COND 0 48) (PROC 0 0) (LREF 1 8 1) (C",
-"ALL 1) 48 (LOADT 0) (COND 0 52) (LREF 0 8 1) (LOADF 1) (CALL 1) 52 (LREF 0 8 1) ",
-"(LOADU 1) (CALL 1)) ((((PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) ((((PROC 0 0)",
-" (LSET 0 0 2) (GREF 0 0) (PROC 1 1) (LREF 2 18 2) (CALL 2)) ((((GREF 0 0) (PROC ",
-"1 0) (LREF 2 0 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 49) (GREF 0 0) (PROC 1 0) (L",
-"REF 2 1 2) (CALL 2) 49 (LREF 0 1 1) (LOADF 1) (CALL 1)) ((((LREF 0 22 2) (PROC 1",
-" 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 3 1) (LREF 2 0 1) (CALL 2)) (((",
-"(LREF 0 0 2) (COND 0 50) (LREF 0 0 1) (LREF 1 0 2) (CALL 1) 50 (GREF 0 0) (PROC ",
-"1 0) (LREF 2 4 2) (CALL 2)) ((((LREF 0 6 2) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((",
-"((PROC 0 0) (LREF 1 2 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 51) (LRE",
-"F 0 0 1) (LREF 1 0 2) (CALL 1) 51 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f",
-") 3)) () (1 . #f) 4)) () (1 . #f) 4)) (cdr) (2 . #f) 4)) () (1 . #f) 4)) () (1 .",
-" #f) 4)) (car) (1 . #f) 4)) (pair?) (2 . #f) 4) (((LREF 0 1 2) (LREF 1 1 1) (LRE",
-"F 2 0 1) (CALL 2)) () () (1 . #f) 4)) (cdr) (2 . #f) 4)) () (1 . #f) 4)) () (1 .",
-" #f) 3)) () (1 . #f) 4)) (eqv? or) (1 . #f) 5)) () (1 . #f) 4)) (cadr eqv? and) ",
-"(1 . #f) 5)) () (1 . #f) 4)) (cadr eqv? not) (1 . #f) 5)) () (1 . #f) 4)) (eqv? ",
-"library) (2 . #f) 5)) () (1 . #f) 4)) (car) (1 . #f) 4)) (pair?) (1 . #f) 4) (((",
-"PROC 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 53) (LREF ",
-"0 0 1) (LREF 1 0 2) (CALL 1) 53 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f) ",
-"3)) () (1 . #f) 4)) () (2 . #f) 3)) () (1 . #f) 4)) () (2 . #f) 3)) () (1 . #f) ",
-"4)) (eq? else) (2 . #f) 5) (((PROC 0 0) (LREF 1 0 1) (LOADF 2) (CALL 2)) ((((PRO",
-"C 0 0) (LSET 0 0 2) (GREF 0 0) (PROC 1 1) (LREF 2 3 2) (CALL 2)) ((((GREF 0 0) (",
-"PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((LREF 0 0 1) (COND 0 54) (LREF 0 1 1) (LOADU",
-" 1) (CALL 1) 54 (GREF 0 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((LREF 0 5 2) (PR",
-"OC 1 0) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 1) (COND 0 55) (GREF 0 0) (PROC 1 0)",
-" (LOAD 2 1) (GREF 3 2) (CALL 3) 55 (GREF 0 3) (PROC 1 1) (LREF 2 3 2) (CALL 2)) ",
-"((((GREF 0 0) (PROC 1 0) (LREF 2 4 2) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2",
-" 0 1) (LOADN 3) (CALL 3)) ((((GREF 0 0) (LREF 1 6 1) (LREF 2 2 1) (LREF 3 0 1) (",
-"CALL 3)) () (cons) (1 . #f) 5)) (append) (1 . #f) 5)) (cdar) (1 . #f) 4) (((LREF",
-" 0 5 2) (LREF 1 4 1) (LREF 2 0 1) (CALL 2)) () () (1 . #f) 4)) (make-identifier ",
-"begin default-environment cdr) (1 . #f) 5)) () (1 . #f) 4)) (caar) (1 . #f) 4)) ",
-"(null?) (2 . #f) 4) (((LREF 0 1 2) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) () () (1 ",
-". #f) 4)) (cdr) (2 . #f) 4)) () (1 . #f) 4)) () (2 . #f) 3)) () (3 . #f) 4)) (co",
-"nd-expand) (1 . #f) 5) (((GREF 0 0) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((GREF 0",
-" 0) (PROC 1 0) (LREF 2 1 2) (CALL 2)) ((((PROC 0 0) (LREF 1 2 1) (LREF 2 1 1) (L",
-"REF 3 0 1) (CALL 3)) ((((LREF 0 9 7) (PROC 1 0) (LREF 2 0 2) (CALL 2)) ((((PROC ",
-"0 0) (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 56) (LREF 0 0 1) ",
-"(LREF 1 0 2) (CALL 1) 56 (LREF 0 11 6) (PROC 1 0) (LREF 2 2 2) (CALL 2)) ((((PRO",
-"C 0 0) (LREF 1 1 1) (LREF 2 0 1) (CALL 2)) ((((LREF 0 0 2) (COND 0 57) (LREF 0 0",
-" 1) (LREF 1 0 2) (CALL 1) 57 (LREF 0 0 1) (LOADF 1) (CALL 1)) () () (2 . #f) 3))",
-" () (1 . #f) 4)) () (2 . #f) 4) (((GREF 0 0) (PROC 1 0) (LREF 2 11 9) (LREF 3 2 ",
-"2) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF",
-" 1 4 1) (LREF 2 0 1) (PROC 3 0) (CALL 3)) ((((GREF 0 0) (LREF 1 0 1) (PROC 2 0) ",
-"(LREF 3 5 3) (CALL 3)) ((((PROC 0 0) (PROC 1 1) (CALL 1)) ((((PROC 0 0) (PROC 1 ",
-"1) (CALL 1)) ((((GREF 0 0) (PROC 1 0) (LREF 2 2 2) (CALL 2)) ((((LREF 0 0 1) (CO",
-"ND 0 58) (GREF 0 0) (PROC 1 0) (LREF 2 3 2) (CALL 2) 58 (LREF 0 1 1) (LOADF 1) (",
-"CALL 1)) ((((GREF 0 0) (LREF 1 2 1) (LREF 2 0 1) (LOAD 3 1) (CALL 3)) () (eq? be",
-"gin) (1 . #f) 5)) (car) (1 . #f) 4)) (pair?) (1 . #f) 4) (((LREF 0 0 1) (COND 0 ",
-"59) (GREF 0 0) (LREF 1 1 1) (LREF 2 2 2) (CALL 2) 59 (GREF 0 1) (LREF 1 1 1) (LR",
-"EF 2 2 2) (CALL 2)) () (cdr list) (1 . #f) 4)) () (1 . #f) 3) (((PROC 0 0) (LREF",
-" 1 1 1) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 0 1) (PROC 2 0) (LREF 3 0 2",
-") (CALL 3)) ((((GREF 0 0) (LREF 1 0 1) (LREF 2 0 2) (LREF 3 9 2) (CALL 3)) () (e",
-"val) (2 . #f) 5)) (for-each) (2 . #f) 5)) () (1 . #f) 4)) () (2 . #f) 3)) (for-e",
-"ach) (1 . #f) 5)) (with-dynamic-environment) (1 . #f) 5)) (list) (1 . #f) 4)) (c",
-"ons) (1 . #f) 5)) () (1 . #f) 4)) () (3 . #f) 4)) () (1 . #f) 5)) (cddr) (1 . #f",
-") 4)) (cadr) (3 . #f) 4)) (define-library) (2 . #f) 5) (((PROC 0 0) (PROC 1 1) (",
-"CALL 1)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOADN 3) (CALL 3)) ((((GREF 0 0) (",
-"PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((LREF 0 8 6) (PROC 1 0) (LREF 2 0",
-" 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LOADN 3) (CALL 3)) ((((GREF 0",
-" 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((LREF 0 11 10) (PROC 1 0) (L",
-"REF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 12 8) (LREF 3 0 1) (CALL 3",
-")) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (GREF 3 1) (CALL 3)) ((((GREF 0 0) (PRO",
-"C 1 0) (LOAD 2 1) (LOADN 3) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF ",
-"3 0 1) (CALL 3)) ((((LREF 0 16 4) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0",
-") (PROC 1 1) (LREF 2 0 1) (CALL 2)) ((((PROC 0 0) (LREF 1 0 1) (PROC 2 1) (CALL ",
-"2)) ((((PROC 0 0) (LREF 1 0 1) (CALL 1)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LO",
-"ADN 3) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((",
-"GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) ",
-"(LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 ",
-"1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF",
-" 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOA",
-"D 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (",
-"CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0",
-") (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 ",
-"1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL",
-" 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (P",
-"ROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (",
-"LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3))",
-" ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC ",
-"1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF",
-" 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) (((",
-"(GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0)",
-" (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0",
-" 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GRE",
-"F 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LO",
-"AD 2 1) (LREF 3 0 1) (CALL 3)) ((((GREF 0 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) ",
-"(CALL 3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 29 2) (LREF 3 0 1) (CALL 3)) ((((LREF",
-" 0 30 2) (PROC 1 0) (LOAD 2 0) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (CALL 1)) ((((",
-"GREF 0 0) (LREF 1 31 1) (LREF 2 32 2) (LREF 3 0 1) (CALL 3)) () (dictionary-for-",
-"each) (1 . #f) 5)) (global-objects) (1 . #f) 3)) (boolean?) (1 . #f) 4)) (for-ea",
-"ch) (1 . #f) 5)) (cons define) (1 . #f) 5)) (cons lambda) (1 . #f) 5)) (cons quo",
-"te) (1 . #f) 5)) (cons set!) (1 . #f) 5)) (cons if) (1 . #f) 5)) (cons begin) (1",
-" . #f) 5)) (cons define-macro) (1 . #f) 5)) (cons let) (1 . #f) 5)) (cons let*) ",
-"(1 . #f) 5)) (cons letrec) (1 . #f) 5)) (cons letrec*) (1 . #f) 5)) (cons let-va",
-"lues) (1 . #f) 5)) (cons let*-values) (1 . #f) 5)) (cons define-values) (1 . #f)",
-" 5)) (cons quasiquote) (1 . #f) 5)) (cons unquote) (1 . #f) 5)) (cons unquote-sp",
-"licing) (1 . #f) 5)) (cons and) (1 . #f) 5)) (cons or) (1 . #f) 5)) (cons cond) ",
-"(1 . #f) 5)) (cons case) (1 . #f) 5)) (cons else) (1 . #f) 5)) (cons =>) (1 . #f",
-") 5)) (cons do) (1 . #f) 5)) (cons when) (1 . #f) 5)) (cons unless) (1 . #f) 5))",
-" (cons parameterize) (1 . #f) 5)) (cons define-record-type) (1 . #f) 5)) () (2 .",
-" #f) 3) (((GREF 0 0) (LREF 1 0 1) (LREF 2 1 2) (LREF 3 0 2) (LREF 4 0 2) (CALL 4",
-")) () (dictionary-set!) (2 . #f) 6)) () (2 . #f) 4) (((PROC 0 0) (PROC 1 1) (GRE",
-"F 2 0) (CALL 2)) ((((LREF 0 0 1) (PROC 1 0) (CALL 1)) ((((PROC 0 0) (PROC 1 1) (",
-"CALL 1)) ((((GREF 0 0) (PROC 1 0) (LREF 2 1 3) (CALL 2)) ((((LREF 0 0 1) (COND 0",
-" 60) (LREF 0 22 9) (LREF 1 1 1) (CALL 1) 60 (GREF 0 0) (LREF 1 1 1) (LREF 2 2 3)",
-" (CALL 2)) () (car) (1 . #f) 4)) (null?) (1 . #f) 4) (((PROC 0 0) (LREF 1 1 1) (",
-"LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (PROC 1 0) (LREF 2 22 9) (LREF 3 0 2) (CALL ",
-"3)) ((((GREF 0 0) (PROC 1 0) (LREF 2 0 1) (CALL 2)) ((((GREF 0 0) (LREF 1 2 1) (",
-"LREF 2 0 1) (PROC 3 0) (CALL 3)) ((((LREF 0 25 5) (PROC 1 0) (LREF 2 3 2) (CALL ",
-"2)) ((((LREF 0 7 2) (LREF 1 1 1) (LREF 2 6 2) (LREF 3 0 1) (CALL 3)) () () (1 . ",
-"#f) 5)) () (1 . #f) 4)) (with-dynamic-environment) (1 . #f) 5)) (list) (1 . #f) ",
-"4)) (cons) (2 . #f) 5)) () (1 . #f) 4)) () (2 . #t) 3)) () (2 . #f) 3) (((LREF 0",
-" 0 1) (GSET 0 0) (GREF 0 1) (PROC 1 0) (LOAD 2 2) (LOADN 3) (CALL 3)) ((((GREF 0",
-" 0) (PROC 1 0) (LOAD 2 1) (LREF 3 0 1) (CALL 3)) ((((LREF 0 21 6) (LREF 1 15 1) ",
-"(LREF 2 0 1) (CALL 2)) () () (1 . #f) 4)) (cons picrin) (1 . #f) 5)) (eval cons ",
-"user) (1 . #f) 5)) (eval) (1 . #f) 4)) () (1 . #f) 4)) () (1 . #f) 4)) (cons pic",
-"rin) (1 . #f) 5)) (cons base) (1 . #f) 5)) (set-car! default-environment) (1 . #",
-"f) 5)) (dictionary-ref) (1 . #f) 5)) () (1 . #f) 4)) (cons picrin) (1 . #f) 5)) ",
-"(cons base) (1 . #f) 5)) () (1 . #f) 4)) (cons picrin) (1 . #f) 5)) (cons base) ",
-"(1 . #f) 5) (((GREF 0 0) (LREF 1 6 1) (LREF 2 6 9) (LREF 3 6 7) (LREF 4 6 6) (LR",
-"EF 5 6 5) (LREF 6 6 4) (LREF 7 6 3) (LREF 8 6 2) (CALL 8)) () (values) (1 . #f) ",
-"10)) () (1 . #f) 3) (((GREF 0 0) (PROC 1 0) (CALL 1)) ((((GREF 0 0) (LREF 1 1 1)",
-" (LREF 2 0 1) (LREF 3 1 2) (LREF 4 1 3) (CALL 4)) () (dictionary-set!) (1 . #f) ",
-"6)) (macro-objects) (3 . #f) 3)) () (1 . #f) 4)) (make-dictionary) (1 . #f) 3)) ",
-"(make-parameter) (1 . #f) 5)) (cons picrin) (1 . #f) 5)) (cons user) (10 . #f) 5",
-")) () (1 . #f) 12)) () (1 . #f) 3) (((LREF 0 0 2) (GSET 0 0) (LREF 0 0 3) (GSET ",
-"0 1) (LREF 0 0 4) (GSET 0 2) (LREF 0 0 5) (GSET 0 3) (LREF 0 0 6) (GSET 0 4) (LR",
-"EF 0 0 7) (GSET 0 5) (LREF 0 0 8) (GSET 0 6) (LREF 0 0 1) (LOADU 1) (CALL 1)) ()",
-" (current-library find-library make-library library-environment library-exports ",
-"library-import library-export) (8 . #f) 3)) (current-library find-library make-l",
-"ibrary library-environment library-exports library-import library-export call-wi",
-"th-values) (1 . #f) 5)",
-};
-#endif
-
 void
-pic_boot(pic_state *PIC_UNUSED(pic))
+pic_init_eval(pic_state *PIC_UNUSED(pic))
 {
 #if PIC_USE_EVAL
-  pic_load_native(pic, &boot_compile_rom[0][0]);
-#endif
-#if PIC_USE_LIBRARY
-  pic_load_native(pic, &boot_library_rom[0][0]);
+  pic_load_native(pic, &eval_rom[0][0]);
 #endif
 }
diff --git a/lib/ext/lib.c b/lib/ext/lib.c
deleted file mode 100644
index 824c5772..00000000
--- a/lib/ext/lib.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * See Copyright Notice in picrin.h
- */
-
-#include "picrin.h"
-#include "picrin/extra.h"
-
-#if PIC_USE_LIBRARY
-
-void
-pic_deflibrary(pic_state *pic, const char *lib)
-{
-  pic_value name = pic_intern_cstr(pic, lib), v;
-
-  v = pic_funcall(pic, "find-library", 1, name);
-  if (! pic_bool(pic, v)) {
-    pic_funcall(pic, "make-library", 1, name);
-  }
-}
-
-void
-pic_in_library(pic_state *pic, const char *lib)
-{
-  pic_value name = pic_intern_cstr(pic, lib);
-
-  pic_funcall(pic, "current-library", 1, name);
-}
-
-void
-pic_export(pic_state *pic, int n, ...)
-{
-  size_t ai = pic_enter(pic);
-  va_list ap;
-
-  va_start(ap, n);
-  while (n--) {
-    pic_value var = pic_intern_cstr(pic, va_arg(ap, const char *));
-    pic_funcall(pic, "library-export", 2, var, var);
-  }
-  va_end(ap);
-  pic_leave(pic, ai);
-}
-
-#endif
diff --git a/lib/ext/main.c b/lib/ext/main.c
new file mode 100644
index 00000000..6c62a875
--- /dev/null
+++ b/lib/ext/main.c
@@ -0,0 +1,60 @@
+/**
+ * See Copyright Notice in picrin.h
+ */
+
+#include "picrin.h"
+#include "picrin/extra.h"
+
+int
+main(int argc, char *argv[])
+{
+  pic_state *pic;
+  pic_value e, port;
+
+  pic = pic_open(pic_default_allocf, NULL);
+
+  pic_try {
+    if (argc == 1) {            /* repl */
+      while (1) {
+        pic_printf(pic, "> ");
+        e = pic_read(pic, pic_stdin(pic));
+        if (pic_eof_p(pic, e))
+          break;
+        pic_printf(pic, "~s\n", pic_funcall(pic, "eval", 1, e));
+      }
+    } else if (argc == 2) {     /* load file */
+      FILE *file = fopen(argv[1], "r");
+      if (! file) {
+        fprintf(stderr, "could not open file %s\n", argv[1]);
+        exit(1);
+      }
+      port = pic_fopen(pic, file, "r");
+      while (1) {
+        e = pic_read(pic, port);
+        if (pic_eof_p(pic, e))
+          break;
+        pic_void(pic, pic_funcall(pic, "eval", 1, e));
+      }
+    } else if (argc >= 2 && strcmp(argv[1], "-c") == 0) { /* compile */
+      if (argc == 2) {
+        port = pic_stdin(pic);
+      } else {
+        FILE *file = fopen(argv[2], "r");
+        if (! file) {
+          fprintf(stderr, "could not open file %s\n", argv[2]);
+          exit(1);
+        }
+        port = pic_fopen(pic, file, "r");
+      }
+      pic_printf(pic, "~s\n", pic_funcall(pic, "compile", 1, pic_funcall(pic, "expand", 2, pic_read(pic, port), pic_ref(pic, "default-environment"))));
+    } else {
+      fprintf(stderr, "usage: mini-picrin [-c] [file]\n");
+      exit(1);
+    }
+  }
+  pic_catch(e) {
+    pic_print_error(pic, pic_stderr(pic), e);
+  }
+
+  pic_close(pic);
+}
diff --git a/lib/include/picconf.h b/lib/include/picconf.h
index 6fe9e034..e896685c 100644
--- a/lib/include/picconf.h
+++ b/lib/include/picconf.h
@@ -11,7 +11,6 @@
 /** enable specific features */
 /* #define PIC_USE_WRITE 1 */
 /* #define PIC_USE_EVAL 1 */
-/* #define PIC_USE_LIBRARY 1 */
 
 /** essential external functions */
 /* #define PIC_JMPBUF jmp_buf */
diff --git a/lib/include/picrin.h b/lib/include/picrin.h
index c0b60459..b4bee49a 100644
--- a/lib/include/picrin.h
+++ b/lib/include/picrin.h
@@ -334,6 +334,8 @@ void pic_defvar(pic_state *, const char *name, pic_value v);
 pic_value pic_funcall(pic_state *, const char *name, int n, ...);
 pic_value pic_values(pic_state *, int n, ...);
 pic_value pic_vvalues(pic_state *, int n, va_list);
+pic_value pic_load(pic_state *, pic_value irep); /* TODO */
+void pic_load_native(pic_state *pic, const char *); /* TODO */
 
 
 /*
diff --git a/lib/include/picrin/extra.h b/lib/include/picrin/extra.h
index cb312646..f7588a1d 100644
--- a/lib/include/picrin/extra.h
+++ b/lib/include/picrin/extra.h
@@ -17,20 +17,6 @@ pic_value pic_fopen(pic_state *, FILE *, const char *mode);
 
 pic_value pic_read(pic_state *, pic_value port);
 
-pic_value pic_load(pic_state *, pic_value irep);
-void pic_load_native(pic_state *pic, const char *);
-
-/*
- * library
- */
-
-#if PIC_USE_LIBRARY
-void pic_deflibrary(pic_state *, const char *lib);
-void pic_in_library(pic_state *, const char *lib);
-void pic_export(pic_state *, int n, ...);
-#endif
-
-
 /* for debug */
 
 #if PIC_USE_WRITE
diff --git a/lib/include/picrin/setup.h b/lib/include/picrin/setup.h
index 695ed5da..773b6bfa 100644
--- a/lib/include/picrin/setup.h
+++ b/lib/include/picrin/setup.h
@@ -20,10 +20,6 @@
 # define PIC_USE_EVAL 1
 #endif
 
-#ifndef PIC_USE_LIBRARY
-# define PIC_USE_LIBRARY 1
-#endif
-
 #ifndef PIC_JMPBUF
 # include <setjmp.h>
 # define PIC_JMPBUF jmp_buf
diff --git a/lib/ext/load.c b/lib/load.c
similarity index 100%
rename from lib/ext/load.c
rename to lib/load.c
diff --git a/lib/state.c b/lib/state.c
index f1a9d75f..ef4f06bb 100644
--- a/lib/state.c
+++ b/lib/state.c
@@ -111,8 +111,7 @@ void pic_init_weak(pic_state *);
 void pic_init_load(pic_state *);
 void pic_init_file(pic_state *);
 void pic_init_state(pic_state *);
-
-void pic_boot(pic_state *);
+void pic_init_eval(pic_state *);
 
 #define DONE pic_leave(pic, ai);
 
@@ -147,8 +146,9 @@ pic_init_core(pic_state *pic)
 #if PIC_USE_LIBC
   pic_init_file(pic); DONE;
 #endif
-
-  pic_boot(pic); DONE;
+#if PIC_USE_EVAL
+  pic_init_eval(pic); DONE;
+#endif
 }
 
 pic_state *
diff --git a/piclib/compile.scm b/piclib/eval.scm
similarity index 100%
rename from piclib/compile.scm
rename to piclib/eval.scm
diff --git a/tools/mkboot.scm b/tools/mkboot.scm
index fcaf4f89..e5c9fbe9 100644
--- a/tools/mkboot.scm
+++ b/tools/mkboot.scm
@@ -51,25 +51,16 @@
    "#include \"picrin/extra.h\"\n"
    "\n"
    "#if PIC_USE_EVAL\n"
-   "static const char boot_compile_rom[][80] = {\n"
-   ,(generate-rom)
-   "};\n"
-   "#endif\n"
-   "\n"
-   "#if PIC_USE_LIBRARY\n"
-   "static const char boot_library_rom[][80] = {\n"
+   "static const char eval_rom[][80] = {\n"
    ,(generate-rom)
    "};\n"
    "#endif\n"
    "\n"
    "void\n"
-   "pic_boot(pic_state *PIC_UNUSED(pic))\n"
+   "pic_init_eval(pic_state *PIC_UNUSED(pic))\n"
    "{\n"
    "#if PIC_USE_EVAL\n"
-   "  pic_load_native(pic, &boot_compile_rom[0][0]);\n"
-   "#endif\n"
-   "#if PIC_USE_LIBRARY\n"
-   "  pic_load_native(pic, &boot_library_rom[0][0]);\n"
+   "  pic_load_native(pic, &eval_rom[0][0]);\n"
    "#endif\n"
    "}\n"))