Are they squares?
Date: 7 February 2013

Drag the red points

Z_1 = (4, 6)
O_1 = (3, 5)
g_3 = LineBisector(O_1, Z_1)
A = (1, 9)
B = (2, 9)
a = Segment(A, B)
C = (3, 9)
D = (4, 9)
b = Segment(C, D)
E = (5, 9)
F = (6, 9)
c = Segment(E, F)
G = (7, 9)
I = (1, 7)
J = (2, 7)
e = Segment(I, J)
K = (3, 7)
L = (4, 7)
f = Segment(K, L)
M = (5, 7)
N = (6, 7)
g = Segment(M, N)
O = (7, 7)
P = (8, 7)
h = Segment(O, P)
Q = (2, 10)
i = Line(A, Q)
B' = Mirror(B, i)
j = Segment(A, B')
k = Segment(B', Q)
l = Segment(Q, B)
R = (4, 10)
m = Line(R, b)
S = Midpoint(b)
n = OrthogonalLine(S, b)
R' = Mirror(R, n)
p = Segment(C, D)
q = Segment(D, R)
r = Segment(R, R')
s = Segment(R', C)
T = (6, 10)
t = Segment(F, T)
a_1 = Line(T, c)
b_1 = Line(E, t)
U = Intersect(b_1, a_1)
c_1 = Segment(U, T)
d_1 = Segment(E, U)
H = Point(Circle[G, 1])
d = Segment(G, H)
V = (7, 9)
W = (8, 10)
e_1 = Line(V, W)
f_1 = Line(G, e_1)
H' = Mirror(H, f_1)
G' = Mirror(G, f_1)
H'_1 = Mirror(H, f_1)
d' = Segment(G', H'_1)
g_1 = Line(H', H)
G'_1 = Mirror(G, g_1)
G'_2 = Mirror(G, g_1)
H'_2 = Mirror(H, g_1)
d'_1 = Segment(G'_2, H'_2)
G'' = Mirror(G', g_1)
Z = Mirror(H'_1, g_1)
d'' = Segment(G'', Z)
poly1, h_1, i_1, j_1, k_1, A_1, B_1 = Polygon(I, J, 4)
poly2, b', a_2, b_2, q_1 = Polygon(B', A, B, Q)
poly3, r', c_2, d_2, r_1 = Polygon(R', C, D, R)
poly4, u, e_2, f_2, t_1 = Polygon(U, E, F, T)
poly5, h', g_2, h_2, g'_1 = Polygon(H', G, H, G'_1)
C_1 = (3, 8)
D_1 = (4, 8)
poly6, k_2, l_1, d_3, c_3 = Polygon(K, L, D_1, C_1)
ConstantArea, m_1, n_1, p_1, s_1, E_1, F_1 = Polygon(M, N, 4)
poly8, i_2, j_2, l_2, m_2, G_1, H_1 = Polygon(O, P, 4)
n_2 = OrthogonalLine(M, g)
p_2 = OrthogonalLine(N, g)
q_2 = Circle(M, 1 / Distance[M, N])
r_2 = Ray(M, F_1)
I_1 = Intersect(q_2, r_2, 1)
s_2 = OrthogonalLine(I_1, r_2)
J_1 = Intersect(p_2, s_2)
poly7, i_3, m_3, n_3, j_3 = Polygon(I_1, M, N, J_1)
t_2 = Ray(O, H_1)
e_3 = Circle(O, 2 - Distance[O, P])
K_1 = Intersect(e_3, t_2, 1)
a_3 = OrthogonalLine(K_1, t_2)
b_3 = Ray(P, G_1)
L_1 = Intersect(a_3, b_3)
poly9, k_3, o, p_3, l_3 = Polygon(K_1, O, P, L_1)
M_1 = (1, 5)
Q_1 = (5, 5)
S_1 = (7, 5)
T_1 = (8, 5)
U_1 = (2, 6)
V_1 = Midpoint(M_1, U_1)
f_3 = Circle(V_1, M_1)
W_1 = Point(f_3)
N_1 = Mirror(W_1, V_1)
poly10, n_4, m_4, w_1, u_1 = Polygon(N_1, M_1, W_1, U_1)
P_1 = Point(g_3)
h_3 = Circle(P_1, 1.4142135623730951)
A_2 = Intersect(h_3, g_3, 2)
poly11, a_4, o_1, p_4, z_1 = Polygon(A_2, O_1, P_1, Z_1)
R_1 = Point(Circle[Q_1, 1])
q_3 = Segment(Q_1, R_1)
poly12, r_3, s_3, t_3, b_4, B_2, C_2 = Polygon(Q_1, R_1, 4)
c_4 = LineBisector(S_1, T_1)
D_2 = Rotate(T_1, 90*°, S_1)
d_4 = LineBisector(D_2, S_1)
E_2 = Intersect(c_4, d_4)
F_2 = (8, 6)
poly13, d_5, s_4, t_4, f_4 = Polygon(D_2, S_1, T_1, F_2)