diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_100C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs.v
similarity index 96%
rename from 18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_100C.ccs.v
rename to 18T_hs/verilog/sky130_osu_sc_18T_hs.v
index 7878b9f..74766c7 100644
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_100C.ccs.v
+++ b/18T_hs/verilog/sky130_osu_sc_18T_hs.v
@@ -1,4 +1,4 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P60_100C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 22:09:48 CST 2021 for SDF version 2.1
+// Verilog for library /home/tdene/Desktop/OSU_130_PDK/char/liberate/VERILOG/sky130_osu_sc_18T_hs_TT_1P8_25C.ccs created by Liberate 19.2.1.591 on Tue Nov 16 01:45:09 CST 2021 for SDF version 2.1
 
 // type: sky130_osu_sc_18T_hs__addf 
 `timescale 1ns/10ps
@@ -197,37 +197,24 @@
 
 	// Function
 	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
+	wire int_fwire_1;
 
 	and (CO, A, B);
-	not (B__bar, B);
+	and (CON, A, B);
 	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
 
 	// Timing
 	specify
 		(A => CO) = 0;
 		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
 	endspecify
 endmodule
 `endcelldefine
@@ -241,37 +228,24 @@
 
 	// Function
 	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
+	wire int_fwire_1;
 
 	and (CO, A, B);
-	not (B__bar, B);
+	and (CON, A, B);
 	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
 
 	// Timing
 	specify
 		(A => CO) = 0;
 		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
 	endspecify
 endmodule
 `endcelldefine
@@ -588,25 +562,22 @@
 // type: sky130_osu_sc_18T_hs__dff 
 `timescale 1ns/10ps
 `celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
+module sky130_osu_sc_18T_hs__dff_1 (Q, D, CK);
+	output Q;
 	input D, CK;
 	reg notifier;
 	wire delayed_D, delayed_CK;
 
 	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+	wire int_fwire_IQ, xcr_0;
 
 	altos_dff_err (xcr_0, delayed_CK, delayed_D);
 	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
 	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
 
 	// Timing
 	specify
 		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
 		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$width (posedge CK &&& D, 0, 0, notifier);
@@ -620,25 +591,22 @@
 // type: sky130_osu_sc_18T_hs__dff 
 `timescale 1ns/10ps
 `celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
+module sky130_osu_sc_18T_hs__dff_l (Q, D, CK);
+	output Q;
 	input D, CK;
 	reg notifier;
 	wire delayed_D, delayed_CK;
 
 	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+	wire int_fwire_IQ, xcr_0;
 
 	altos_dff_err (xcr_0, delayed_CK, delayed_D);
 	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
 	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
 
 	// Timing
 	specify
 		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
 		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$width (posedge CK &&& D, 0, 0, notifier);
@@ -1167,6 +1135,50 @@
 endmodule
 `endcelldefine
 
+// type: sky130_osu_sc_18T_hs__dlat 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dlat_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+
+	// Function
+	not (Q, D);
+
+	// Timing
+	specify
+		if (CK)
+			(D => Q) = 0;
+		if (~CK)
+			(D => Q) = 0;
+		ifnone (D => Q) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_hs__dlat 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_hs__dlat_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+
+	// Function
+	not (Q, D);
+
+	// Timing
+	specify
+		if (CK)
+			(D => Q) = 0;
+		if (~CK)
+			(D => Q) = 0;
+		ifnone (D => Q) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
 // type: sky130_osu_sc_18T_hs__inv 
 `timescale 1ns/10ps
 `celldefine
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_TT_1P8_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_TT_1P8_25C.ccs.v
deleted file mode 100644
index 73e92b4..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_TT_1P8_25C.ccs.v
+++ /dev/null
@@ -1,2155 +0,0 @@
-// Verilog for library /home/tdene/Desktop/OSU_130_PDK/char/liberate/VERILOG/sky130_osu_sc_12T_ls_TT_1P8_25C.ccs created by Liberate 19.2.1.591 on Tue Nov 16 01:45:09 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_12T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	and (CO, A, B);
-	and (CON, A, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (S, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		(A => CON) = 0;
-		(B => CON) = 0;
-		(A => S) = 0;
-		(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	and (CO, A, B);
-	and (CON, A, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (S, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		(A => CON) = 0;
-		(B => CON) = 0;
-		(A => S) = 0;
-		(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dlat 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dlat_1 (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-
-	// Function
-	not (Q, D);
-
-	// Timing
-	specify
-		if (CK)
-			(D => Q) = 0;
-		if (~CK)
-			(D => Q) = 0;
-		ifnone (D => Q) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dlat 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dlat_l (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-
-	// Function
-	not (Q, D);
-
-	// Timing
-	specify
-		if (CK)
-			(D => Q) = 0;
-		if (~CK)
-			(D => Q) = 0;
-		ifnone (D => Q) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P56_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P56_-40C.ccs.v
deleted file mode 100644
index 62d0e12..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P56_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P56_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 17:03:28 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P76_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P76_-40C.ccs.v
deleted file mode 100644
index ce71c60..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P76_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P76_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 17:40:54 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_-40C.ccs.v
deleted file mode 100644
index 34fa0c8..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P95_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 18:20:06 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_100C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_100C.ccs.v
deleted file mode 100644
index f920793..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_100C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P95_100C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 18:59:28 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_150C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_150C.ccs.v
deleted file mode 100644
index 4f85fbd..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ff_1P95_150C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ff_1P95_150C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 19:36:37 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P28_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P28_-40C.ccs.v
deleted file mode 100644
index c468de8..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P28_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P28_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 20:15:17 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P44_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P44_-40C.ccs.v
deleted file mode 100644
index 1af51f4..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P44_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P44_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 20:53:58 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_-40C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_-40C.ccs.v
deleted file mode 100644
index 4929c30..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P60_-40C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 21:31:49 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_150C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_150C.ccs.v
deleted file mode 100644
index 1bcc954..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_ss_1P60_150C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_ss_1P60_150C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 22:48:24 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P20_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P20_25C.ccs.v
deleted file mode 100644
index 4ed2bca..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P20_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P20_25C.ccs created by Liberate 19.2.1.215 on Thu Feb 18 23:27:22 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P35_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P35_25C.ccs.v
deleted file mode 100644
index 019154a..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P35_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P35_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 00:06:57 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P44_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P44_25C.ccs.v
deleted file mode 100644
index 77c4d40..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P44_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P44_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 00:46:41 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P50_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P50_25C.ccs.v
deleted file mode 100644
index 5777503..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P50_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P50_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 01:23:54 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P62_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P62_25C.ccs.v
deleted file mode 100644
index 48d2e64..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P62_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P62_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 02:02:50 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P68_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P68_25C.ccs.v
deleted file mode 100644
index f3d08a6..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P68_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P68_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 02:42:40 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_100C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_100C.ccs.v
deleted file mode 100644
index 58bdf9e..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_100C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P80_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 03:21:05 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_150C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_150C.ccs.v
deleted file mode 100644
index 2b5d2fe..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_150C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P80_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 04:00:58 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_25C.ccs.v
deleted file mode 100644
index d4a8feb..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P80_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P80_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 04:41:56 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P89_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P89_25C.ccs.v
deleted file mode 100644
index 644cf98..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_1P89_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_1P89_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 05:19:57 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_2P10_25C.ccs.v b/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_2P10_25C.ccs.v
deleted file mode 100644
index dd6be06..0000000
--- a/18T_hs/verilog/sky130_osu_sc_18T_hs_tt_2P10_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_hs_tt_2P10_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 05:59:16 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_hs__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_hs__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls.v
similarity index 96%
rename from 18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_-40C.ccs.v
rename to 18T_ls/verilog/sky130_osu_sc_18T_ls.v
index 634ffdc..aeada9f 100644
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_-40C.ccs.v
+++ b/18T_ls/verilog/sky130_osu_sc_18T_ls.v
@@ -1,4 +1,4 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P60_-40C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 00:18:12 CST 2021 for SDF version 2.1
+// Verilog for library /home/tdene/Desktop/OSU_130_PDK/char/liberate/VERILOG/sky130_osu_sc_18T_ls_TT_1P8_25C.ccs created by Liberate 19.2.1.591 on Tue Nov 16 01:45:09 CST 2021 for SDF version 2.1
 
 // type: sky130_osu_sc_18T_ls__addf 
 `timescale 1ns/10ps
@@ -197,37 +197,24 @@
 
 	// Function
 	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
+	wire int_fwire_1;
 
 	and (CO, A, B);
-	not (B__bar, B);
+	and (CON, A, B);
 	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
 
 	// Timing
 	specify
 		(A => CO) = 0;
 		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
 	endspecify
 endmodule
 `endcelldefine
@@ -241,37 +228,24 @@
 
 	// Function
 	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
+	wire int_fwire_1;
 
 	and (CO, A, B);
-	not (B__bar, B);
+	and (CON, A, B);
 	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
 
 	// Timing
 	specify
 		(A => CO) = 0;
 		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
 	endspecify
 endmodule
 `endcelldefine
@@ -588,25 +562,22 @@
 // type: sky130_osu_sc_18T_ls__dff 
 `timescale 1ns/10ps
 `celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
+module sky130_osu_sc_18T_ls__dff_1 (Q, D, CK);
+	output Q;
 	input D, CK;
 	reg notifier;
 	wire delayed_D, delayed_CK;
 
 	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+	wire int_fwire_IQ, xcr_0;
 
 	altos_dff_err (xcr_0, delayed_CK, delayed_D);
 	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
 	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
 
 	// Timing
 	specify
 		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
 		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$width (posedge CK &&& D, 0, 0, notifier);
@@ -620,25 +591,22 @@
 // type: sky130_osu_sc_18T_ls__dff 
 `timescale 1ns/10ps
 `celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
+module sky130_osu_sc_18T_ls__dff_l (Q, D, CK);
+	output Q;
 	input D, CK;
 	reg notifier;
 	wire delayed_D, delayed_CK;
 
 	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+	wire int_fwire_IQ, xcr_0;
 
 	altos_dff_err (xcr_0, delayed_CK, delayed_D);
 	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
 	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
 
 	// Timing
 	specify
 		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
 		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$width (posedge CK &&& D, 0, 0, notifier);
@@ -1167,6 +1135,50 @@
 endmodule
 `endcelldefine
 
+// type: sky130_osu_sc_18T_ls__dlat 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dlat_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+
+	// Function
+	not (Q, D);
+
+	// Timing
+	specify
+		if (CK)
+			(D => Q) = 0;
+		if (~CK)
+			(D => Q) = 0;
+		ifnone (D => Q) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ls__dlat 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ls__dlat_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+
+	// Function
+	not (Q, D);
+
+	// Timing
+	specify
+		if (CK)
+			(D => Q) = 0;
+		if (~CK)
+			(D => Q) = 0;
+		ifnone (D => Q) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
 // type: sky130_osu_sc_18T_ls__inv 
 `timescale 1ns/10ps
 `celldefine
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_TT_1P8_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_TT_1P8_25C.ccs.v
deleted file mode 100644
index 73e92b4..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_TT_1P8_25C.ccs.v
+++ /dev/null
@@ -1,2155 +0,0 @@
-// Verilog for library /home/tdene/Desktop/OSU_130_PDK/char/liberate/VERILOG/sky130_osu_sc_12T_ls_TT_1P8_25C.ccs created by Liberate 19.2.1.591 on Tue Nov 16 01:45:09 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_12T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	and (CO, A, B);
-	and (CON, A, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (S, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		(A => CON) = 0;
-		(B => CON) = 0;
-		(A => S) = 0;
-		(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	and (CO, A, B);
-	and (CON, A, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (S, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		(A => CON) = 0;
-		(B => CON) = 0;
-		(A => S) = 0;
-		(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dlat 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dlat_1 (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-
-	// Function
-	not (Q, D);
-
-	// Timing
-	specify
-		if (CK)
-			(D => Q) = 0;
-		if (~CK)
-			(D => Q) = 0;
-		ifnone (D => Q) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dlat 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dlat_l (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-
-	// Function
-	not (Q, D);
-
-	// Timing
-	specify
-		if (CK)
-			(D => Q) = 0;
-		if (~CK)
-			(D => Q) = 0;
-		ifnone (D => Q) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P56_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P56_-40C.ccs.v
deleted file mode 100644
index 143dd67..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P56_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P56_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 19:56:46 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P76_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P76_-40C.ccs.v
deleted file mode 100644
index 132fb38..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P76_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P76_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 20:34:19 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_-40C.ccs.v
deleted file mode 100644
index 8491004..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P95_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 21:11:17 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_100C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_100C.ccs.v
deleted file mode 100644
index a0fa2b0..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_100C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P95_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 21:49:21 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_150C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_150C.ccs.v
deleted file mode 100644
index 73f1658..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ff_1P95_150C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ff_1P95_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 22:26:51 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P28_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P28_-40C.ccs.v
deleted file mode 100644
index 217f9b9..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P28_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P28_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 23:04:36 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P44_-40C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P44_-40C.ccs.v
deleted file mode 100644
index 8760c4e..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P44_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P44_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 23:42:14 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_100C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_100C.ccs.v
deleted file mode 100644
index ccda147..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_100C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P60_100C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 00:55:31 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_150C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_150C.ccs.v
deleted file mode 100644
index 71c4321..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_ss_1P60_150C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_ss_1P60_150C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 01:32:56 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P20_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P20_25C.ccs.v
deleted file mode 100644
index dc36024..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P20_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P20_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 02:08:21 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P35_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P35_25C.ccs.v
deleted file mode 100644
index f7f3116..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P35_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P35_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 02:45:12 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P44_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P44_25C.ccs.v
deleted file mode 100644
index a9c532d..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P44_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P44_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 03:21:05 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P50_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P50_25C.ccs.v
deleted file mode 100644
index a599fa6..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P50_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P50_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 03:58:01 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P62_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P62_25C.ccs.v
deleted file mode 100644
index ea9542d..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P62_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P62_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 04:34:40 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P68_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P68_25C.ccs.v
deleted file mode 100644
index d0d8623..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P68_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P68_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 05:10:02 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_100C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_100C.ccs.v
deleted file mode 100644
index dc769bb..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_100C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P80_100C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 05:47:09 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_150C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_150C.ccs.v
deleted file mode 100644
index 037e847..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_150C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P80_150C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 06:24:40 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_25C.ccs.v
deleted file mode 100644
index 7042078..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P80_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P80_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 07:01:49 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P89_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P89_25C.ccs.v
deleted file mode 100644
index 33f0529..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_1P89_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_1P89_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 07:39:44 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_2P10_25C.ccs.v b/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_2P10_25C.ccs.v
deleted file mode 100644
index f8a36be..0000000
--- a/18T_ls/verilog/sky130_osu_sc_18T_ls_tt_2P10_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ls_tt_2P10_25C.ccs created by Liberate 19.2.1.215 on Sat Feb 20 08:17:42 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P56_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms.v
similarity index 96%
rename from 18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P56_-40C.ccs.v
rename to 18T_ms/verilog/sky130_osu_sc_18T_ms.v
index ad7e00f..1e952aa 100644
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P56_-40C.ccs.v
+++ b/18T_ms/verilog/sky130_osu_sc_18T_ms.v
@@ -1,4 +1,4 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P56_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 06:37:47 CST 2021 for SDF version 2.1
+// Verilog for library /home/tdene/Desktop/OSU_130_PDK/char/liberate/VERILOG/sky130_osu_sc_18T_ms_TT_1P8_25C.ccs created by Liberate 19.2.1.591 on Tue Nov 16 01:45:09 CST 2021 for SDF version 2.1
 
 // type: sky130_osu_sc_18T_ms__addf 
 `timescale 1ns/10ps
@@ -197,37 +197,24 @@
 
 	// Function
 	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
+	wire int_fwire_1;
 
 	and (CO, A, B);
-	not (B__bar, B);
+	and (CON, A, B);
 	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
 
 	// Timing
 	specify
 		(A => CO) = 0;
 		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
 	endspecify
 endmodule
 `endcelldefine
@@ -241,37 +228,24 @@
 
 	// Function
 	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
+	wire int_fwire_1;
 
 	and (CO, A, B);
-	not (B__bar, B);
+	and (CON, A, B);
 	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
+	and (int_fwire_0, A__bar, B);
+	not (B__bar, B);
+	and (int_fwire_1, A, B__bar);
+	or (S, int_fwire_1, int_fwire_0);
 
 	// Timing
 	specify
 		(A => CO) = 0;
 		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
+		(A => CON) = 0;
+		(B => CON) = 0;
+		(A => S) = 0;
+		(B => S) = 0;
 	endspecify
 endmodule
 `endcelldefine
@@ -588,25 +562,22 @@
 // type: sky130_osu_sc_18T_ms__dff 
 `timescale 1ns/10ps
 `celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
+module sky130_osu_sc_18T_ms__dff_1 (Q, D, CK);
+	output Q;
 	input D, CK;
 	reg notifier;
 	wire delayed_D, delayed_CK;
 
 	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+	wire int_fwire_IQ, xcr_0;
 
 	altos_dff_err (xcr_0, delayed_CK, delayed_D);
 	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
 	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
 
 	// Timing
 	specify
 		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
 		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$width (posedge CK &&& D, 0, 0, notifier);
@@ -620,25 +591,22 @@
 // type: sky130_osu_sc_18T_ms__dff 
 `timescale 1ns/10ps
 `celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
+module sky130_osu_sc_18T_ms__dff_l (Q, D, CK);
+	output Q;
 	input D, CK;
 	reg notifier;
 	wire delayed_D, delayed_CK;
 
 	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
+	wire int_fwire_IQ, xcr_0;
 
 	altos_dff_err (xcr_0, delayed_CK, delayed_D);
 	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
 	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
 
 	// Timing
 	specify
 		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
 		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
 		$width (posedge CK &&& D, 0, 0, notifier);
@@ -1167,6 +1135,50 @@
 endmodule
 `endcelldefine
 
+// type: sky130_osu_sc_18T_ms__dlat 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dlat_1 (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+
+	// Function
+	not (Q, D);
+
+	// Timing
+	specify
+		if (CK)
+			(D => Q) = 0;
+		if (~CK)
+			(D => Q) = 0;
+		ifnone (D => Q) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
+// type: sky130_osu_sc_18T_ms__dlat 
+`timescale 1ns/10ps
+`celldefine
+module sky130_osu_sc_18T_ms__dlat_l (Q, D, CK);
+	output Q;
+	input D, CK;
+	reg notifier;
+
+	// Function
+	not (Q, D);
+
+	// Timing
+	specify
+		if (CK)
+			(D => Q) = 0;
+		if (~CK)
+			(D => Q) = 0;
+		ifnone (D => Q) = 0;
+	endspecify
+endmodule
+`endcelldefine
+
 // type: sky130_osu_sc_18T_ms__inv 
 `timescale 1ns/10ps
 `celldefine
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_TT_1P8_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_TT_1P8_25C.ccs.v
deleted file mode 100644
index 73e92b4..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_TT_1P8_25C.ccs.v
+++ /dev/null
@@ -1,2155 +0,0 @@
-// Verilog for library /home/tdene/Desktop/OSU_130_PDK/char/liberate/VERILOG/sky130_osu_sc_12T_ls_TT_1P8_25C.ccs created by Liberate 19.2.1.591 on Tue Nov 16 01:45:09 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_12T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	and (CO, A, B);
-	and (CON, A, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (S, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		(A => CON) = 0;
-		(B => CON) = 0;
-		(A => S) = 0;
-		(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	and (CO, A, B);
-	and (CON, A, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (S, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		(A => CON) = 0;
-		(B => CON) = 0;
-		(A => S) = 0;
-		(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dff_1 (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dff_l (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dlat 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dlat_1 (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-
-	// Function
-	not (Q, D);
-
-	// Timing
-	specify
-		if (CK)
-			(D => Q) = 0;
-		if (~CK)
-			(D => Q) = 0;
-		ifnone (D => Q) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__dlat 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__dlat_l (Q, D, CK);
-	output Q;
-	input D, CK;
-	reg notifier;
-
-	// Function
-	not (Q, D);
-
-	// Timing
-	specify
-		if (CK)
-			(D => Q) = 0;
-		if (~CK)
-			(D => Q) = 0;
-		ifnone (D => Q) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_12T_ls__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_12T_ls__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P76_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P76_-40C.ccs.v
deleted file mode 100644
index d5b39fa..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P76_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P76_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 07:15:10 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_-40C.ccs.v
deleted file mode 100644
index ef75f6f..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P95_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 07:52:10 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_100C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_100C.ccs.v
deleted file mode 100644
index 0d4f1fa..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_100C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P95_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 08:30:56 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_150C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_150C.ccs.v
deleted file mode 100644
index 419f1c4..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ff_1P95_150C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ff_1P95_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 09:07:46 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P28_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P28_-40C.ccs.v
deleted file mode 100644
index d5d743b..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P28_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P28_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 09:46:10 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P44_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P44_-40C.ccs.v
deleted file mode 100644
index 178234e..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P44_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P44_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 10:26:30 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_-40C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_-40C.ccs.v
deleted file mode 100644
index 3e19e9b..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_-40C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P60_-40C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 11:05:17 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_100C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_100C.ccs.v
deleted file mode 100644
index 194a160..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_100C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P60_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 11:43:53 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_150C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_150C.ccs.v
deleted file mode 100644
index a1f4eb6..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_ss_1P60_150C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_ss_1P60_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 12:22:44 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P20_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P20_25C.ccs.v
deleted file mode 100644
index 26e2882..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P20_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P20_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 13:00:39 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P35_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P35_25C.ccs.v
deleted file mode 100644
index ddeae80..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P35_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P35_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 13:38:03 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P44_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P44_25C.ccs.v
deleted file mode 100644
index c177eae..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P44_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P44_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 14:15:32 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P50_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P50_25C.ccs.v
deleted file mode 100644
index 703ae69..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P50_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P50_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 14:53:03 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P62_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P62_25C.ccs.v
deleted file mode 100644
index 9d2d8d4..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P62_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P62_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 15:31:14 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P68_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P68_25C.ccs.v
deleted file mode 100644
index c81a5ad..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P68_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P68_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 16:09:11 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_100C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_100C.ccs.v
deleted file mode 100644
index eee3fbc..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_100C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P80_100C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 16:47:03 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_150C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_150C.ccs.v
deleted file mode 100644
index c1b15f4..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_150C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P80_150C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 17:26:19 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_25C.ccs.v
deleted file mode 100644
index efe9c71..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P80_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P80_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 18:04:16 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P89_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P89_25C.ccs.v
deleted file mode 100644
index 8525d41..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_1P89_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_1P89_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 18:42:12 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
diff --git a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_2P10_25C.ccs.v b/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_2P10_25C.ccs.v
deleted file mode 100644
index 6f5cd78..0000000
--- a/18T_ms/verilog/sky130_osu_sc_18T_ms_tt_2P10_25C.ccs.v
+++ /dev/null
@@ -1,2143 +0,0 @@
-// Verilog for library /import/okita1/hlusk/CellRechar/test/osugooglelib/char/liberate/VERILOG/sky130_osu_sc_18T_ms_tt_2P10_25C.ccs created by Liberate 19.2.1.215 on Fri Feb 19 19:20:10 CST 2021 for SDF version 2.1
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_1 (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addf_l (CO, CON, S, A, B, CI);
-	output CO, CON, S;
-	input A, B, CI;
-
-	// Function
-	wire A__bar, B__bar, CI__bar;
-	wire int_fwire_0, int_fwire_1, int_fwire_2;
-	wire int_fwire_3, int_fwire_4, int_fwire_5;
-	wire int_fwire_6, int_fwire_7, int_fwire_8;
-	wire int_fwire_9;
-
-	and (int_fwire_0, B, CI);
-	and (int_fwire_1, A, CI);
-	and (int_fwire_2, A, B);
-	or (CO, int_fwire_2, int_fwire_1, int_fwire_0);
-	not (CI__bar, CI);
-	not (B__bar, B);
-	and (int_fwire_3, B__bar, CI__bar);
-	not (A__bar, A);
-	and (int_fwire_4, A__bar, CI__bar);
-	and (int_fwire_5, A__bar, B__bar);
-	or (CON, int_fwire_5, int_fwire_4, int_fwire_3);
-	and (int_fwire_6, A__bar, B__bar, CI);
-	and (int_fwire_7, A__bar, B, CI__bar);
-	and (int_fwire_8, A, B__bar, CI__bar);
-	and (int_fwire_9, A, B, CI);
-	or (S, int_fwire_9, int_fwire_8, int_fwire_7, int_fwire_6);
-
-	// Timing
-	specify
-		if ((B & ~CI))
-			(A => CO) = 0;
-		if ((~B & CI))
-			(A => CO) = 0;
-		ifnone (A => CO) = 0;
-		if ((A & ~CI))
-			(B => CO) = 0;
-		if ((~A & CI))
-			(B => CO) = 0;
-		ifnone (B => CO) = 0;
-		if ((A & ~B))
-			(CI => CO) = 0;
-		if ((~A & B))
-			(CI => CO) = 0;
-		ifnone (CI => CO) = 0;
-		if ((B & ~CI))
-			(A => CON) = 0;
-		if ((~B & CI))
-			(A => CON) = 0;
-		ifnone (A => CON) = 0;
-		if ((A & ~CI))
-			(B => CON) = 0;
-		if ((~A & CI))
-			(B => CON) = 0;
-		ifnone (B => CON) = 0;
-		if ((A & ~B))
-			(CI => CON) = 0;
-		if ((~A & B))
-			(CI => CON) = 0;
-		ifnone (CI => CON) = 0;
-		if ((B & CI))
-			(A => S) = 0;
-		if ((~B & ~CI))
-			(A => S) = 0;
-		ifnone (A => S) = 0;
-		if ((B & ~CI))
-			(A => S) = 0;
-		if ((~B & CI))
-			(A => S) = 0;
-		if ((A & CI))
-			(B => S) = 0;
-		if ((~A & ~CI))
-			(B => S) = 0;
-		ifnone (B => S) = 0;
-		if ((A & ~CI))
-			(B => S) = 0;
-		if ((~A & CI))
-			(B => S) = 0;
-		if ((A & B))
-			(CI => S) = 0;
-		if ((~A & ~B))
-			(CI => S) = 0;
-		ifnone (CI => S) = 0;
-		if ((A & ~B))
-			(CI => S) = 0;
-		if ((~A & B))
-			(CI => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_1 (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__addh 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__addh_l (CO, CON, S, A, B);
-	output CO, CON, S;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1, int_fwire_2;
-
-	and (CO, A, B);
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	or (CON, CO, int_fwire_0);
-	and (int_fwire_1, A__bar, B);
-	and (int_fwire_2, A, B__bar);
-	or (S, int_fwire_2, int_fwire_1);
-
-	// Timing
-	specify
-		(A => CO) = 0;
-		(B => CO) = 0;
-		if (B)
-			(A => CON) = 0;
-		if (~B)
-			(A => CON) = 0;
-		if (A)
-			(B => CON) = 0;
-		if (~A)
-			(B => CON) = 0;
-		if (~B)
-			(A => S) = 0;
-		if (B)
-			(A => S) = 0;
-		if (~A)
-			(B => S) = 0;
-		if (A)
-			(B => S) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_6 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__and2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__and2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	and (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__ant (A);
-	input A;
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0, int_fwire_1;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, B0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__aoi22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__aoi22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-	wire int_fwire_2, int_fwire_3;
-
-	not (B1__bar, B1);
-	not (A1__bar, A1);
-	and (int_fwire_0, A1__bar, B1__bar);
-	not (B0__bar, B0);
-	and (int_fwire_1, A1__bar, B0__bar);
-	not (A0__bar, A0);
-	and (int_fwire_2, A0__bar, B1__bar);
-	and (int_fwire_3, A0__bar, B0__bar);
-	or (Y, int_fwire_3, int_fwire_2, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		if ((A1 & ~B0 & ~B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		if ((A0 & ~B0 & ~B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & B1))
-			(B0 => Y) = 0;
-		if ((~A0 & ~A1 & B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & B0))
-			(B1 => Y) = 0;
-		if ((~A0 & ~A1 & B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__buf 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__buf_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	buf (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_1 (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dff 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dff_l (Q, QN, D, CK);
-	output Q, QN;
-	input D, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, xcr_0;
-
-	altos_dff_err (xcr_0, delayed_CK, delayed_D);
-	altos_dff (int_fwire_IQ, notifier, delayed_CK, delayed_D, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-	specify
-		(posedge CK => (Q+:D)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$width (posedge CK &&& D, 0, 0, notifier);
-		$width (negedge CK &&& D, 0, 0, notifier);
-		$width (posedge CK &&& ~D, 0, 0, notifier);
-		$width (negedge CK &&& ~D, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_1 (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffr_l (Q, QN, D, RN, CK);
-	output Q, QN;
-	input D, RN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire xcr_0;
-
-	not (int_fwire_r, RN);
-	altos_dff_r_err (xcr_0, delayed_CK, delayed_D, int_fwire_r);
-	altos_dff_r (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, RN);
-	not (D__bar, D);
-	and (adacond1, D__bar, RN);
-
-	specify
-		if (CK)
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& RN, posedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& RN, negedge D &&& RN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge RN &&& D, posedge CK &&& D, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& D, posedge RN &&& D, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$width (negedge RN &&& CK, 0, 0, notifier);
-		$width (negedge RN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_1 (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffs 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffs_l (Q, QN, D, SN, CK);
-	output Q, QN;
-	input D, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_s;
-	wire xcr_0;
-
-	not (int_fwire_s, SN);
-	altos_dff_s_err (xcr_0, delayed_CK, delayed_D, int_fwire_s);
-	altos_dff_s (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, D, SN);
-	not (D__bar, D);
-	and (adacond1, D__bar, SN);
-
-	specify
-		if (CK)
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if (CK)
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& SN, posedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& SN, negedge D &&& SN, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$recovery (posedge SN &&& ~D, posedge CK &&& ~D, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& ~D, posedge SN &&& ~D, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge SN &&& CK, 0, 0, notifier);
-		$width (negedge SN &&& ~CK, 0, 0, notifier);
-		$width (posedge CK &&& adacond0, 0, 0, notifier);
-		$width (negedge CK &&& adacond0, 0, 0, notifier);
-		$width (posedge CK &&& adacond1, 0, 0, notifier);
-		$width (negedge CK &&& adacond1, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_1 (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__dffsr 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__dffsr_l (Q, QN, D, RN, SN, CK);
-	output Q, QN;
-	input D, RN, SN, CK;
-	reg notifier;
-	wire delayed_D, delayed_RN, delayed_SN, delayed_CK;
-
-	// Function
-	wire int_fwire_IQ, int_fwire_IQN, int_fwire_r;
-	wire int_fwire_s, xcr_0;
-
-	not (int_fwire_s, delayed_SN);
-	not (int_fwire_r, delayed_RN);
-	altos_dff_sr_err (xcr_0, delayed_CK, delayed_D, int_fwire_s, int_fwire_r);
-	altos_dff_sr_0 (int_fwire_IQ, notifier, delayed_CK, delayed_D, int_fwire_s, int_fwire_r, xcr_0);
-	buf (Q, int_fwire_IQ);
-	not (int_fwire_IQN, int_fwire_IQ);
-	buf (QN, int_fwire_IQN);
-
-	// Timing
-
-	// Additional timing wires
-	wire adacond0, adacond1, adacond2;
-	wire adacond3, adacond4, adacond5;
-	wire adacond6, adacond7, adacond8;
-	wire CK__bar, D__bar;
-
-
-	// Additional timing gates
-	and (adacond0, RN, SN);
-	and (adacond1, D, SN);
-	and (adacond2, CK, SN);
-	not (CK__bar, CK);
-	and (adacond3, CK__bar, SN);
-	not (D__bar, D);
-	and (adacond4, D__bar, RN);
-	and (adacond5, CK, RN);
-	and (adacond6, CK__bar, RN);
-	and (adacond7, D, RN, SN);
-	and (adacond8, D__bar, RN, SN);
-
-	specify
-		if ((CK & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (Q+:1'b0)) = 0;
-		ifnone (negedge RN => (Q+:1'b0)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (Q+:1'b1)) = 0;
-		ifnone (posedge RN => (Q+:1'b1)) = 0;
-		if ((CK & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (Q+:1'b1)) = 0;
-		ifnone (negedge SN => (Q+:1'b1)) = 0;
-		(posedge CK => (Q+:D)) = 0;
-		if ((CK & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & ~SN))
-			(posedge RN => (QN-:1'b1)) = 0;
-		ifnone (posedge RN => (QN-:1'b1)) = 0;
-		if ((CK & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		if ((~CK & ~D & ~SN))
-			(negedge RN => (QN-:1'b0)) = 0;
-		ifnone (negedge RN => (QN-:1'b0)) = 0;
-		if ((CK & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		if ((~CK & ~D & RN))
-			(negedge SN => (QN-:1'b1)) = 0;
-		ifnone (negedge SN => (QN-:1'b1)) = 0;
-		(posedge CK => (QN-:D)) = 0;
-		$setuphold (posedge CK &&& adacond0, posedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK &&& adacond0, negedge D &&& adacond0, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, posedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge CK, negedge D, 0, 0, notifier,,, delayed_CK, delayed_D);
-		$setuphold (posedge SN &&& CK, posedge RN &&& CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN &&& ~CK, posedge RN &&& ~CK, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$setuphold (posedge SN, posedge RN, 0, 0, notifier,,, delayed_SN, delayed_RN);
-		$recovery (posedge RN &&& adacond1, posedge CK &&& adacond1, 0, notifier);
-		$recovery (posedge RN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond1, posedge RN &&& adacond1, 0, notifier);
-		$hold (posedge CK, posedge RN, 0, notifier);
-		$recovery (posedge SN &&& adacond4, posedge CK &&& adacond4, 0, notifier);
-		$recovery (posedge SN, posedge CK, 0, notifier);
-		$hold (posedge CK &&& adacond4, posedge SN &&& adacond4, 0, notifier);
-		$hold (posedge CK, posedge SN, 0, notifier);
-		$width (negedge RN &&& adacond2, 0, 0, notifier);
-		$width (negedge RN &&& adacond3, 0, 0, notifier);
-		$width (negedge SN &&& adacond5, 0, 0, notifier);
-		$width (negedge SN &&& adacond6, 0, 0, notifier);
-		$width (posedge CK &&& adacond7, 0, 0, notifier);
-		$width (negedge CK &&& adacond7, 0, 0, notifier);
-		$width (posedge CK &&& adacond8, 0, 0, notifier);
-		$width (negedge CK &&& adacond8, 0, 0, notifier);
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_1 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_10 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_2 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_3 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_4 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_6 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_8 (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__inv 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__inv_l (Y, A);
-	output Y;
-	input A;
-
-	// Function
-	not (Y, A);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__mux2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__mux2_1 (Y, A0, A1, S0);
-	output Y;
-	input A0, A1, S0;
-
-	// Function
-	wire int_fwire_0, int_fwire_1, S0__bar;
-
-	and (int_fwire_0, A1, S0);
-	not (S0__bar, S0);
-	and (int_fwire_1, A0, S0__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((~A0 & A1))
-			(S0 => Y) = 0;
-		if ((A0 & ~A1))
-			(S0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nand2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nand2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	or (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__nor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__nor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (Y, A__bar, B__bar);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai21 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai21_l (Y, A0, A1, B0);
-	output Y;
-	input A0, A1, B0;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire int_fwire_0;
-
-	not (B0__bar, B0);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_0, A0__bar, A1__bar);
-	or (Y, int_fwire_0, B0__bar);
-
-	// Timing
-	specify
-		(A0 => Y) = 0;
-		(A1 => Y) = 0;
-		if ((A0 & A1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__oai22 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__oai22_l (Y, A0, A1, B0, B1);
-	output Y;
-	input A0, A1, B0, B1;
-
-	// Function
-	wire A0__bar, A1__bar, B0__bar;
-	wire B1__bar, int_fwire_0, int_fwire_1;
-
-	not (B1__bar, B1);
-	not (B0__bar, B0);
-	and (int_fwire_0, B0__bar, B1__bar);
-	not (A1__bar, A1);
-	not (A0__bar, A0);
-	and (int_fwire_1, A0__bar, A1__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if ((~A1 & B0 & B1))
-			(A0 => Y) = 0;
-		if ((~A1 & B0 & ~B1))
-			(A0 => Y) = 0;
-		if ((~A1 & ~B0 & B1))
-			(A0 => Y) = 0;
-		ifnone (A0 => Y) = 0;
-		if ((~A0 & B0 & B1))
-			(A1 => Y) = 0;
-		if ((~A0 & B0 & ~B1))
-			(A1 => Y) = 0;
-		if ((~A0 & ~B0 & B1))
-			(A1 => Y) = 0;
-		ifnone (A1 => Y) = 0;
-		if ((A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((A0 & ~A1 & ~B1))
-			(B0 => Y) = 0;
-		if ((~A0 & A1 & ~B1))
-			(B0 => Y) = 0;
-		ifnone (B0 => Y) = 0;
-		if ((A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((A0 & ~A1 & ~B0))
-			(B1 => Y) = 0;
-		if ((~A0 & A1 & ~B0))
-			(B1 => Y) = 0;
-		ifnone (B1 => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_1 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_2 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_4 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_8 (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__or2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__or2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	or (Y, A, B);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif1 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tiehi (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b1);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms_ 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tielo (Y);
-	output Y;
-
-	// Function
-	buf (Y, 1'b0);
-
-	// Timing
-	specify
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_1 (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__tnbufi 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__tnbufi_l (Y, A, OE);
-	output Y;
-	input A, OE;
-
-	// Function
-	notif0 (Y, A, OE);
-
-	// Timing
-	specify
-		(A => Y) = 0;
-		(OE => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xnor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xnor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (B__bar, B);
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B__bar);
-	and (int_fwire_1, A, B);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (B)
-			(A => Y) = 0;
-		if (~B)
-			(A => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-// type: sky130_osu_sc_18T_ms__xor2 
-`timescale 1ns/10ps
-`celldefine
-module sky130_osu_sc_18T_ms__xor2_l (Y, A, B);
-	output Y;
-	input A, B;
-
-	// Function
-	wire A__bar, B__bar, int_fwire_0;
-	wire int_fwire_1;
-
-	not (A__bar, A);
-	and (int_fwire_0, A__bar, B);
-	not (B__bar, B);
-	and (int_fwire_1, A, B__bar);
-	or (Y, int_fwire_1, int_fwire_0);
-
-	// Timing
-	specify
-		if (~B)
-			(A => Y) = 0;
-		if (B)
-			(A => Y) = 0;
-		if (~A)
-			(B => Y) = 0;
-		if (A)
-			(B => Y) = 0;
-	endspecify
-endmodule
-`endcelldefine
-
-
-`ifdef _udp_def_altos_latch_
-`else
-`define _udp_def_altos_latch_
-primitive altos_latch (q, v, clk, d);
-	output q;
-	reg q;
-	input v, clk, d;
-
-	table
-		* ? ? : ? : x;
-		? 1 0 : ? : 0;
-		? 1 1 : ? : 1;
-		? x 0 : 0 : -;
-		? x 1 : 1 : -;
-		? 0 ? : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_err_
-`else
-`define _udp_def_altos_dff_err_
-primitive altos_dff_err (q, clk, d);
-	output q;
-	reg q;
-	input clk, d;
-
-	table
-		(0x) ? : ? : 0;
-		(1x) ? : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_
-`else
-`define _udp_def_altos_dff_
-primitive altos_dff (q, v, clk, d, xcr);
-	output q;
-	reg q;
-	input v, clk, d, xcr;
-
-	table
-		*  ?   ? ? : ? : x;
-		? (x1) 0 0 : ? : 0;
-		? (x1) 1 0 : ? : 1;
-		? (x1) 0 1 : 0 : 0;
-		? (x1) 1 1 : 1 : 1;
-		? (x1) ? x : ? : -;
-		? (bx) 0 ? : 0 : -;
-		? (bx) 1 ? : 1 : -;
-		? (x0) b ? : ? : -;
-		? (x0) ? x : ? : -;
-		? (01) 0 ? : ? : 0;
-		? (01) 1 ? : ? : 1;
-		? (10) ? ? : ? : -;
-		?  b   * ? : ? : -;
-		?  ?   ? * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_err_
-`else
-`define _udp_def_altos_dff_r_err_
-primitive altos_dff_r_err (q, clk, d, r);
-	output q;
-	reg q;
-	input clk, d, r;
-
-	table
-		 ?   0 (0x) : ? : -;
-		 ?   0 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 0  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 0  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_r_
-`else
-`define _udp_def_altos_dff_r_
-primitive altos_dff_r (q, v, clk, d, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, r, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 0;
-		?  b   ? (1?) ? : 0 : -;
-		?  x   0 (1?) ? : 0 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 0 : -;
-		? (x1) 0  ?   0 : ? : 0;
-		? (x1) 1  0   0 : ? : 1;
-		? (x1) 0  ?   1 : 0 : 0;
-		? (x1) 1  0   1 : 1 : 1;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 0  ?   ? : 0 : -;
-		? (bx) 1  0   ? : 1 : -;
-		? (x0) 0  ?   ? : ? : -;
-		? (x0) 1  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 0  ?   ? : ? : 0;
-		? (01) 1  0   ? : ? : 1;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_err_
-`else
-`define _udp_def_altos_dff_s_err_
-primitive altos_dff_s_err (q, clk, d, s);
-	output q;
-	reg q;
-	input clk, d, s;
-
-	table
-		 ?   1 (0x) : ? : -;
-		 ?   1 (x0) : ? : -;
-		(0x) ?  0   : ? : 0;
-		(0x) 1  x   : ? : 0;
-		(1x) ?  0   : ? : 1;
-		(1x) 1  x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_s_
-`else
-`define _udp_def_altos_dff_s_
-primitive altos_dff_s (q, v, clk, d, s, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, xcr;
-
-	table
-		*  ?   ?  ?   ? : ? : x;
-		?  ?   ?  1   ? : ? : 1;
-		?  b   ? (1?) ? : 1 : -;
-		?  x   1 (1?) ? : 1 : -;
-		?  ?   ? (10) ? : ? : -;
-		?  ?   ? (x0) ? : ? : -;
-		?  ?   ? (0x) ? : 1 : -;
-		? (x1) 0  0   0 : ? : 0;
-		? (x1) 1  ?   0 : ? : 1;
-		? (x1) 1  ?   1 : 1 : 1;
-		? (x1) 0  0   1 : 0 : 0;
-		? (x1) ?  ?   x : ? : -;
-		? (bx) 1  ?   ? : 1 : -;
-		? (bx) 0  0   ? : 0 : -;
-		? (x0) 1  ?   ? : ? : -;
-		? (x0) 0  0   ? : ? : -;
-		? (x0) ?  0   x : ? : -;
-		? (01) 1  ?   ? : ? : 1;
-		? (01) 0  0   ? : ? : 0;
-		? (10) ?  ?   ? : ? : -;
-		?  b   *  ?   ? : ? : -;
-		?  ?   ?  ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_err_
-`else
-`define _udp_def_altos_dff_sr_err_
-primitive altos_dff_sr_err (q, clk, d, s, r);
-	output q;
-	reg q;
-	input clk, d, s, r;
-
-	table
-		 ?   1 (0x)  ?   : ? : -;
-		 ?   0  ?   (0x) : ? : -;
-		 ?   0  ?   (x0) : ? : -;
-		(0x) ?  0    0   : ? : 0;
-		(0x) 1  x    0   : ? : 0;
-		(0x) 0  0    x   : ? : 0;
-		(1x) ?  0    0   : ? : 1;
-		(1x) 1  x    0   : ? : 1;
-		(1x) 0  0    x   : ? : 1;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_0
-`else
-`define _udp_def_altos_dff_sr_0
-primitive altos_dff_sr_0 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   ?   1   ? : ? : 0;
-		?  ?   ?   1   0   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_dff_sr_1
-`else
-`define _udp_def_altos_dff_sr_1
-primitive altos_dff_sr_1 (q, v, clk, d, s, r, xcr);
-	output q;
-	reg q;
-	input v, clk, d, s, r, xcr;
-
-	table
-	//	v,  clk, d, s, r : q' : q;
-
-		*  ?   ?   ?   ?   ? : ? : x;
-		?  ?   ?   0   1   ? : ? : 0;
-		?  ?   ?   1   ?   ? : ? : 1;
-		?  b   ? (1?)  0   ? : 1 : -;
-		?  x   1 (1?)  0   ? : 1 : -;
-		?  ?   ? (10)  0   ? : ? : -;
-		?  ?   ? (x0)  0   ? : ? : -;
-		?  ?   ? (0x)  0   ? : 1 : -;
-		?  b   ?  0   (1?) ? : 0 : -;
-		?  x   0  0   (1?) ? : 0 : -;
-		?  ?   ?  0   (10) ? : ? : -;
-		?  ?   ?  0   (x0) ? : ? : -;
-		?  ?   ?  0   (0x) ? : 0 : -;
-		? (x1) 0  0    ?   0 : ? : 0;
-		? (x1) 1  ?    0   0 : ? : 1;
-		? (x1) 0  0    ?   1 : 0 : 0;
-		? (x1) 1  ?    0   1 : 1 : 1;
-		? (x1) ?  ?    0   x : ? : -;
-		? (x1) ?  0    ?   x : ? : -;
-		? (1x) 0  0    ?   ? : 0 : -;
-		? (1x) 1  ?    0   ? : 1 : -;
-		? (x0) 0  0    ?   ? : ? : -;
-		? (x0) 1  ?    0   ? : ? : -;
-		? (x0) ?  0    0   x : ? : -;
-		? (0x) 0  0    ?   ? : 0 : -;
-		? (0x) 1  ?    0   ? : 1 : -;
-		? (01) 0  0    ?   ? : ? : 0;
-		? (01) 1  ?    0   ? : ? : 1;
-		? (10) ?  0    ?   ? : ? : -;
-		? (10) ?  ?    0   ? : ? : -;
-		?  b   *  0    ?   ? : ? : -;
-		?  b   *  ?    0   ? : ? : -;
-		?  ?   ?  ?    ?   * : ? : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_r_
-`else
-`define _udp_def_altos_latch_r_
-primitive altos_latch_r (q, v, clk, d, r);
-	output q;
-	reg q;
-	input v, clk, d, r;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 0;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 0 : -;
-		? 1 0 0 : ? : 0;
-		? 1 0 x : ? : 0;
-		? 1 1 0 : ? : 1;
-		? x 0 0 : 0 : -;
-		? x 0 x : 0 : -;
-		? x 1 0 : 1 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_s_
-`else
-`define _udp_def_altos_latch_s_
-primitive altos_latch_s (q, v, clk, d, s);
-	output q;
-	reg q;
-	input v, clk, d, s;
-
-	table
-		* ? ? ? : ? : x;
-		? ? ? 1 : ? : 1;
-		? 0 ? 0 : ? : -;
-		? 0 ? x : 1 : -;
-		? 1 1 0 : ? : 1;
-		? 1 1 x : ? : 1;
-		? 1 0 0 : ? : 0;
-		? x 1 0 : 1 : -;
-		? x 1 x : 1 : -;
-		? x 0 0 : 0 : -;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_0
-`else
-`define _udp_def_altos_latch_sr_0
-primitive altos_latch_sr_0 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 0 : ? : 1;
-		? ? ? ? 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
-
-`ifdef _udp_def_altos_latch_sr_1
-`else
-`define _udp_def_altos_latch_sr_1
-primitive altos_latch_sr_1 (q, v, clk, d, s, r);
-	output q;
-	reg q;
-	input v, clk, d, s, r;
-
-	table
-		* ? ? ? ? : ? : x;
-		? 1 1 ? 0 : ? : 1;
-		? 1 0 0 ? : ? : 0;
-		? ? ? 1 ? : ? : 1;
-		? ? ? 0 1 : ? : 0;
-		? 0 * ? ? : ? : -;
-		? 0 ? * 0 : 1 : 1;
-		? 0 ? 0 * : 0 : 0;
-		? * 1 ? 0 : 1 : 1;
-		? * 0 0 ? : 0 : 0;
-		? ? 1 * 0 : 1 : 1;
-		? ? 0 0 * : 0 : 0;
-	endtable
-endprimitive
-`endif
