CERCLES-02
kitcircle := S = (1/4)*a*b*c/R, e = sqrt(-a^2*c^2+c^4-b^2*c^2-a^2*b^2+a^4+b^4)/sqrt(a^2*b^2+a^2*c^2+b^2*c^2), {cos(omega) = (1/2)*(a^2+b^2+c^2)/sqrt(a^2*b^2+a^2*c^2+b^2*c^2), sin(omega) = (1/2)*a*b*c/(R*sqrt(a^2*b^2+a^2*c^2+b^2*c^2))}, r = (1/2)*c*b*a/((a+b+c)*R), s = (1/2)*a+(1/2)*b+(1/2)*c;
WW1:= sqrt(a^2*b^2+a^2*c^2+b^2*c^2);
WW2:= sqrt(-a^2*c^2+c^4-b^2*c^2-a^2*b^2+a^4+b^4);
WW3:= sqrt(a^6-a^4*b^2-a^4*c^2-a^2*b^4+3*a^2*b^2*c^2-a^2*c^4+b^6-b^4*c^2-b^2*c^4+c^6);
WW4:= sqrt(b^3-b^2*c-b*c^2+c^3-a*b^2+3*a*b*c-a*c^2-a^2*b-a^2*c+a^3);
Equation cercle (d\303\251terminant \303\240 la Kimberling)
circ:= proc (x, y) options operator, arrow; [y^2+x^2, x, y, 1] end proc;
Le principe du d\303\251terminant
Matrix([circ(xi,eta), seq(circ(xi[j],eta[j]), j=1..3)]); #latexx(0), latexz(%);
matri:= Matrix([za,zb,zc]); mafac:= Diag(x+y+z,p1+q1+r1,p2+q2+r2,p3+q3+r3);
magic:= Matrix(map( circ@op@bary2proj, [px,pp1,pp2,pp3]));
SubMatrix(magic,1..4,2..4); FActor(mafac.%. (1/matri));
matri4:= DiagonalMatrix([1, matri]);
tmp:= FActor(mafac.magic. (1/matri4));
Row(tmp,1);
tmp[1,1]*(x+y+z): collect(%, px, distributed);
finafac:= <<-1, +ya^2+xa^2, yb^2+xb^2, yc^2+xc^2> | <<0|0|0>, mun>>;
FActor(tmp.%): map(factor@simplify, collect(%, px, distributed), rule123);
FActor(mafac.magic. (1/matri4).finafac): (FActor@simplify)(%, rule123):
subs(seq(seq( cat(k,j)=k[j], j=[1,2,3]), k=[p,q,r]), %);
# latexx(mafac), latexy(matri4), latexy(finafac), latexz(%);
Equation cercle par centre et rayon
basique : pythagore
-pytha(pp,px)+rho2:
tmp:= collect(%*(x+y+z)^2, rho2, factor);
-k*tmp+rho2*(x+y+z)^2+eqcircum(px)-(x+y+z)*ps(pu,px): {coeffs(expand(%), px)}:
eli:= (factor@eliminate)(%, {k,u,v, w});
pp2uu:= unapply(subs(eli[1], pu), p,q,r)@OP;
eq_dou:= eqcircum(px)+rho2*(x+y+z)^2-ps(pu,px)*(x+y+z);
test ok
factor(subs(zipq(pu, pp2uu(pp)), eq_dou)-tmp);;
#latexx(0),latexy(eq_dou), latexz(pp2uu(pp));
wolf:= (l*alpha+m*beta+n*gamma)*(a*alpha+b*beta+c*gamma)+(a*beta*gamma+b*gamma*alpha+c*alpha*beta):subs(alpha=x/a, beta=y/b, gamma=z/c, %):
eq_wolf:= xcollect(%*a*b*c, [x+y+z], factor);
R\303\250gle de calcul
subs(zipq(px,pa), eq_wolf)/b/c;
(eq_dou-eq_wolf)/(x+y+z): collect(factor(%), [x,y,z]):
solve({coeffs}(%, px),{l,m,n}): subs(%, [l,m,n]);
condilou, elimination des pp2uu
evalms(pp2uu(pp)-pu): eli:= eliminate(%, {p,q}):
tmp:= select(has,op(eli[2]),{v});
(factor@subs)(zipq(pu,pp2uu(pp)), op(1,tmp));
(factor@subs)(zipq(pu,pp2uu(pp)), op(2,tmp));
collect(op(2,tmp), pu, factor, distributed):
condilou:= xcollect(%,[rot3(a^2+b^2-c^2)]);
evalms(pp2uu(pp)-k*pp2uu(px)): eliq:= [eliminate](%, {k,p,q});;
(reduce@subs)(eliq[1][1], pp);
(reduce@subs)(eliq[2][1], pp): collect(%, px, distributed);
lequi:= unapply(%,x,y,z)@OP:
Quelles sont les coniques qui s'\303\251crivent ainsi
eq_dou-k*evalm(px &* mm &* px); {coeffs}(expand(%), px) union {condilou};
eli:= eliminate(%, {k,u,v,w,rho2}):
collect(eli[2], [m11,m22,m33]);
condicir:= subs(AAA=%, BBB= eli[1], proc(MM) zipq(mm,MM):
subs(%, AAA), subs(%,BBB) end):
(eq2mm@eqcircum)(px); tmpa,tmpb:= condicir(%): tmpa; subs(apbpc, factor(tmpb));
subs(%, pu), subs(%,rho2); (simplify@subs)(%%, eq_dou);
eq2mm(eqincircle); tmpa, tmpb:= condicir(%): factor(tmpa);
factor(tmpb): uu_in:= subs(%, pu): %, (factor@subs)(%%, isolate(defR2, b+a-c), rho2);
bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2+eqn2):
tmq:= (reduce@factor@evalmm)(%):;
collect(tmq[1]/rotp(1), px, factor, distributed);
invcircum:= unapply([rot3](%), x,y,z)@OP:
# simplify(%%, a2toAA): collect(%, px, factor, distributed);
subs(ency_, tmq); funinv:= unapply(reduce(%),x,y,z)@op;
Quels sont les points o\303\271 arrive un pp2uu ?
Une coordonn\303\251e \303\240 la fois
evalms(pp2uu(pp)-k*pu); eli:= eliminate(%, {k,p}): nops([%]);
collect(op(eli[2]), q); delta:= factor(discrim(%, q)/r^2); indets(%);
conilou:= select(has,%%, a^4);
inconic, perspecteur 76, centre 141
coni_in(pp)-subs(zipq(pu,px),conilou): {coeffs}(%, px);
solve(%, {p,q,r}): subs(%, pp); ency(%);
(reduce@barymul)(%%, complem(%%)); ency(%);
Les contacts de l'ellipse sont les pp2uu des sommets
pp2uu(pa), pp2uu(pb), pp2uu(pc);
(numer@pp2uu)(px)[1]; discrim(%, y);
Les points \303\240 l'infini donneraient.... le centre de gravit\303\251
(reduce@pp2uu)(pp): (reduce@factor@subs)(zipq(pp, prm_inf(pdr)),%);
Il faut conilou n\303\251gatif pour que q soit r\303\251el
solq:= factor([solve](op(eli[2]), {q})):
subs(apbpc, conilou=-con^2, solq):
solqq:= simplify(%) assuming a>0,b>0,c>0,R>0, con>0, -b^2*v+u*b^2+c^2*w-u*c^2 >0:
Test de conjugaison
factor(subs(solqq[1],q/r)+subs(solqq[2],q/r)): indets(%);
defR2;
(factor@subs)(eli[1], solqq[1], pp):
(factor@subs)(con^2=-conilou, collect(%, con)): tmp:= (expand@reduce)(%):
(reduce@factor@subs)(con^2=-conilou, defR2, tmp):
tmp1:= collect(%, con, factor):
collect(add(k, k=tmp1), con, factor):
tmp2:= expand(evalmm(subs(con=-con, %)*tmp1)):
tmp3:= (reduce@factor@subs)(con^2=-conilou, defR2, tmp2):
Et on a enfin une \303\251quation sym\303\251trique
tmp4:= collect(tmp3, [con,R], U-> collect(U, pu, factor, distributed)); factor(rot(tmp4[1])/tmp4[2]);
subs(con=0, tmp4); part1:= Vector(map(U-> a*b*c*map(V->V/a/b/c,U),%));
part2:= (Vector@map2)(select,has,tmp4,R);
Le graphe des points dont un multiple v\303\251rifie condilou
Pour un point u:v:w, il n'est pas toujours possible de trouver un k qui aille bien.
condi1:= subs(u=k*u,v=k*v,w=k*w, condilou): factor(discrim(%, k));
subs(zipq(pu, pX(8)), ency_, condi1); solve(%);
(factor@subs)(ency_, cetriangle, bary2proj(pp2uu(pp))):
funlou:= unapply(subsop(3=NULL, %),p,q,r)@op;
(expand@subs)(zipq(pu, projx), ency_, conilou):evalf(%/10000);
pl1:= implicitplot(%, X=-0.4..1, Y=-1..0, grid=[50,50], thickness=3):
pl2:= pointplot([seq](funlou(xyz[j]), j=1..jmax)):
pl20:= pointplot([seq](`if`(ff[j]=1,funlou(xyz[j]),NULL), j=1..jmax)):
[color=blue]: pl0:= dralinpts(pa,pb,%),dralinpts(pb,pc,%),dralinpts(pc,pa,%):
pl3:= drawna(pX(141),"c",2,[color=blue]):
Magnifique accord des deux graphes
display(pl0, pl1, pl3, pl20, view=[-1.5..1.5,-1.5..0.5], scaling=constrained);
ckoi:= (reduce@factor@subs)(eli[1][1], pp): map(length, %);
ckoi2:= simplify(ckoi, {condilou}):map(length, %);
Cercles en tout genre (il faut Digits = 30)
Digits:=30:
Le kit circle
# valr := r = (1/2)*a*b*c/((a+b+c)*R)
# kitcircle:= isolate(defR, S), vale, valom, valr, s=(a+b+c)/2;
kitcircle := S = (1/4)*a*b*c/R, e = sqrt(-a^2*c^2+c^4-b^2*c^2-a^2*b^2+a^4+b^4)/sqrt(a^2*b^2+a^2*c^2+b^2*c^2), {cos(omega) = (1/2)*(a^2+b^2+c^2)/sqrt(a^2*b^2+a^2*c^2+b^2*c^2), sin(omega) = (1/2)*a*b*c/(R*sqrt(a^2*b^2+a^2*c^2+b^2*c^2))}, s = (1/2)*a+(1/2)*b+(1/2)*c, r = (1/2)*a*b*c/((a+b+c)*R);
WW1:= sqrt(a^2*b^2+a^2*c^2+b^2*c^2);
WW2:= sqrt(-a^2*c^2+c^4-b^2*c^2-a^2*b^2+a^4+b^4);
WW3:= sqrt(a^6-a^4*b^2-a^4*c^2-a^2*b^4+3*a^2*b^2*c^2-a^2*c^4+b^6-b^4*c^2-b^2*c^4+c^6);
WW4:= sqrt(b^3-b^2*c-b*c^2+c^3-a*b^2+3*a*b*c-a*c^2-a^2*b-a^2*c+a^3);
pytha(pp,px): factor(%):
collect(%, px, U->collect(U, pp, factor, distributed), distributed):
subs(a2toAA,%);
map(1/id, defR2)*a^2*b^2*c^2: ruleR:= -(expand@(rhs=lhs))(%);
Antipodes sur le circumcircle
_P:= pp; _O1:=pX(3);
_PP:= collect(reflection(_O1,pp), pp, factor);
_P1:= prm_cir(pdr); _PP1:= (elimifacu@reflection)(_O1,%): collect(%, pdr): Vector(%);;;
Circumcircle
num_cent:=3; cent:= pX(%): rad2:= (R)^2;
(factor@pp2uu)(cent): ccir_uu:= (Vector@factor@subs)(apbpc,%); ici_uu:=%: ency(%);
subs(rho2=rad2, zipq(Vector(pu), ici_uu), eq_dou):
(factor@subs)(defR2, %);
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
fac:=1:
ici_eqn:= Sum(coeff(eqn0,x,2)*x^2,j)+fac*Sum(coeff(coeff(eqn0,y),z)/fac*y*z,j);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
rad2-eqn0/(x+y+z)^2;
tmp:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(pX(3),px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax): nops(%);
Points \303\240 l'infini sans isogon nomm\303\251
seq(`if`(ff[j]=1 and gg[j]=0,j,NULL), j=1..jmax); nops([%]);
12,19,36,58,101; seq(ency( (bary2norm)(pX(j))-bary2norm(pX(2))), j=%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Incircle + antipodie
num_cent:=1; cent:= pX(%): rad2:= (subs(kitcircle, r))^2;
in_rad:= map(sqrt, rad2) assuming a>0,b>0,c>0,R>0; ici_rad:= %:
(factor@pp2uu)(cent): in_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
antipodie
_O1:= pX(3); _O2:= cent;
(R*bary2norm(cent)- ici_rad*bary2norm(pX(3)))/(R-ici_rad):
(reduce@FActor@evalmm)(%): _V:= (elimifacu@FActor@subs)(defR2, %); ency(%);
(R*bary2norm(cent) + ici_rad*bary2norm(pX(3)))/(R+ici_rad):
(reduce@FActor@evalmm)(%): _U:= (elimifacu@FActor@subs)(defR2, %);ency(%);
(reduce@factor@wedge)(wedge(_P,_U),wedge(_PP,_V)):
collect(%, pp, factor): _Q:= Vector(xcollect(%, [rot3](-a+b+c)));
(elimifacu@factor@wedge)(wedge(_PP,_U),wedge(_P,_V)):
collect(%, pp, factor): _QQ:= Vector(xcollect(-%, [rot3](-a+b+c)));
(reduce@factor)(bary2norm(_Q)+bary2norm(_QQ))=cent;
fac:=a^2: subs(zipq(pp, prm_cir(pdr)), _Q):
%[1]: map(U-> U/fac, op(1,%))*fac*op(2,%):
_Qprm:= Vector([rot3](%));
fac:=a^2: subs(zipq(pp, prm_cir(pdr)), _QQ):
%[1]: map(U-> U/fac, op(1,%))*fac*op(2,%):
_QQprm:= Vector([rot3](%));
unapply(eqn0, x,y,z)@OP: map(factor@%, [_Q,_QQ,_Qprm,_QQprm]):
subs(eqcircum(pp)=0, %);;
facxx, facyz:=-1/4, 1/2:
ici_eqn:= facxx*Sum(coeff(eqn0,x,2)/facxx*x^2,j)+
facyz*Sum(coeff(coeff(eqn0,y),z)/facyz*y*z,j);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax): nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Nine points (new)
num_cent:=5; cent:= pX(%): rad2:= (R/2)^2;
(factor@pp2uu)(cent): in_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
Essai pour plubo
# subs(apbpc, in_uu); (factor)(add(k,k=in_uu)); in_uu-%*Vector([1,1,1]): FActor(%);
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
facxx, facyz:=-1/4, 1/2: j:='j':
ici_eqn:= facxx*Sum( simplify(coeff(eqn0,x,2)/facxx)*x^2,j)+
facyz*Sum(coeff(coeff(eqn0,y),z)/facyz*y*z,j);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax): nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Bevan : circumcircle of excentral triangle (new)
num_cent:=40; cent:= pX(%): rad2:= (2*R)^2;
(factor@pp2uu)(cent): bev_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
map(normal@simplify, bev_uu, {ruleR}):
bev_uu:= (EXpand@subs)(isolate(ruleR, a^4), %);
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
facxx, facyz:=1, a+b+c: j:='j':
ici_eqn:= facxx*Sum( simplify(coeff(eqn0,x,2)/facxx)*x^2,j)+
facyz*Sum(coeff(coeff(eqn0,y),z)/facyz*y*z,j);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
Digits:=20:
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax): nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Digits:=10:
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Brocard (new)
num_cent:=182; cent:= pX(%);
rad2:= subs(kitcircle, defR2, (e*R/cos(omega)/2)^2 );
(factor@pp2uu)(cent): broc_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
broc_uu:= map(sort, subs(apbpc, broc_uu), [a,b,c]);
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
facxx, facyz:=1/(a^2+b^2+c^2) $2: j:='j':
A(facxx)*Sum( simplify(coeff(eqn0,x,2)/facxx)*x^2,j)+
A(facyz)*Sum(coeff(coeff(eqn0,y),z)/facyz*y*z,j):
ici_eqn:= sort(%, [x,y,z]);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
Digits:=20:
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax); nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Digits:=10:
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Spieker +antipodie
j:='j': num_cent:=10; cent:= pX(%);
rad2:= subs(kitcircle, valR22, (r/2)^2 );
(factor@pp2uu)(cent): spie_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
isolate(defR2, a+b-c):
spie_rad:= (sqrt@factor@subs)(%, rad2) assuming a>0,b>0,c>0,R>0;ici_rad:=%:
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
antipodie
_O1:= pX(3); _O2:= cent;
(R*bary2norm(cent)- ici_rad*bary2norm(pX(3)))/(R-ici_rad):
(reduce@FActor@evalmm)(%): _V:= (elimifacu@FActor@subs)(defR2, %); ency(%);
(R*bary2norm(cent) + ici_rad*bary2norm(pX(3)))/(R+ici_rad):
(reduce@FActor@evalmm)(%): _U:= (elimifacu@FActor@subs)(defR2, %);ency(%);
(reduce@factor@wedge)(wedge(_P,_U),wedge(_PP,_V)):
collect(%, pp, factor): _Q:= Vector(xcollect(%, [rot3](-a+b+c)));
(elimifacu@factor@wedge)(wedge(_PP,_U),wedge(_P,_V)):
collect(%, pp, factor): _QQ:= Vector(xcollect(-%, [rot3](-a+b+c)));
(reduce@factor)(bary2norm(_Q)+bary2norm(_QQ))=cent;
fac:=a^2: subs(zipq(pp, prm_cir(pdr)), _Q):
_Qprm:= Vector(%);
fac:=a^2: subs(zipq(pp, prm_cir(pdr)), _QQ):
_QQprm:= Vector(%);
unapply(eqn0, x,y,z)@OP: map(factor@%, [_Q,_QQ,_Qprm,_QQprm]):
subs(eqcircum(pp)=0, %);;
fac:= b+c-a: unapply(convert(_Q,list),p,q,r)@op: tokim(%,pp):
collect(%[1]/fac, pp, factor): xcollect(%, [a*b+2*b*c+a^2+a*c,p,a], factor);
fac:= 1: unapply(convert(_QQ,list),p,q,r)@op: tokim(%,pp):
collect(%[1]/fac, pp, factor): xcollect(%, [-a*b+2*b*c+a^2-a*c,p,a], factor);
facxx, facyz:=1/16, (a+b+c)/8: j:='j':
A(facxx)*Sum( simplify(coeff(eqn0,x,2)/facxx)*x^2,j)+
A(facyz)*Sum(simplify(coeff(coeff(eqn0,y),z)/facyz)*y*z,j):
ici_eqn:= sort(%, [x,y,z,a,b,c]);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
Digits:=20:
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax); nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
tmq: funinv(xyz[1319]): false667:=%/add(k,k=%); map(convert,%,rational);
true667:= xyz[667];map(convert,%,rational);
(reduce@subs)(ency_, pX(667)): %/add(k, k=%);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Digits:=10:
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
orthocentroidal (new)
j:='j':
cent:= -(reduce@factor)(bary2norm(pX(2))+bary2norm(pX(4))); num_cent:=ency(%);
rad2:= (factor@pytha)(cent, pX(2));
WW3;
(factor@pp2uu)(cent): oc_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
facxx, facyz:=1/3, 1/3: j:='j':
A(facxx)*Sum( simplify(coeff(eqn0,x,2)/facxx)*x^2,j)+
A(facyz)*Sum(simplify(coeff(coeff(eqn0,y),z)/facyz)*y*z,j):
ici_eqn:= sort(%, [a,b,c,x,y,z]);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
(reduce@factor@evalmm@subs)(enzy_, tmp_inv): zuninv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
Digits:=20:
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax); nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
for j in ici_inv do zuninv(zxyz[j]); %/add(k,k=%)-zxyz[qqr[j]];
if add(abs(k),k=%) > Float(1,-10) then print(j) fi;
od:
zuninv(zxyz[3528]); evalf(%/add(k,k=%),10);
[-.5595776774, -1.087050205, 2.646627883]
qqr[3544];
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Digits:=10:
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Fuhrmann (new)
j:='j':
cent:= -(reduce@factor)(bary2norm(pX(4))+bary2norm(pX(8))); num_cent:=ency(%);
rad2:= (factor@pytha)(cent, pX(4));
ruleW:= WW4^2=W4^2;
(sqrt@subs)(ruleW, apbpc, rad2): fuhr_rad:= simplify(%) assuming R>0,W4>0;
(factor@pp2uu)(cent): fuhr_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
Plus bo
(FActor@simplify)( subs(apbpc,fuhr_uu), {ruleW}): tmp:= collect(%, [W4, R], factor):;
isolate(ruleW, a^3); collect(subs(%, tmp[3]), [R,W4], factor);
sort(rot(%), [a,b,c]): collect(%, [R,W4], factor): fuhr_uu:= Vector([rot3](%));
(FActor@subs)(defR2, W4=WW4, %-ici_uu);
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
facxx, facyz:=1/(a+b+c) $2: j:='j':
A(facxx)*Sum( simplify(coeff(eqn0,x,2)/facxx)*x^2,j)+
A(facyz)*Sum(simplify(coeff(coeff(eqn0,y),z)/facyz)*y*z,j):
ici_eqn:= sort(%, [a,b,c,x,y,z]);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
Digits:=20:
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax); nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Digits:=10:
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Lemoine 1 (new)
j:='j':
num_cent:=182; cent:= pX(%);
rad2:= subs(kitcircle, valR22, (R/cos(omega)/2)^2 );
ruleW:= WW1^2=W1^2;
(factor@pp2uu)(cent): lem1_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
subs(apbpc, ruleW, rad2): lem1_rad:= simplify(sqrt(%), symbolic);
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
facxx, facyz:=1/(a^2+b^2+c^2)^2 $2: j:='j':
A(facxx)*Sum( simplify(coeff(eqn0,x,2)/facxx)*x^2,j)+
A(facyz)*Sum(simplify(coeff(coeff(eqn0,y),z)/facyz)*y*z,j):
ici_eqn:= sort(%, [a,b,c,x,y,z]);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
Digits:=20:
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax); nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Digits:=10:
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Lemoine 2 (new)
j:='j':
num_cent:=6; cent:= pX(%);
rad2:= subs(kitcircle, valR22, (a*b*c/(a^2+b**2+c**2))^2 );
ruleW:= WW1^2=W1^2;
(factor@pp2uu)(cent): lem2_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
facxx, facyz:=2/(a^2+b^2+c^2)^2, 1/(a^2+b^2+c^2)^2: j:='j':
A(facxx)*Sum( simplify(coeff(eqn0,x,2)/facxx)*x^2,j)+
A(facyz)*Sum(simplify(coeff(coeff(eqn0,y),z)/facyz)*y*z,j):
ici_eqn:= sort(%, [a,b,c,x,y,z]);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
Digits:=20:
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax); nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
qqr[2692]; funinv(xyz[2692]): false788:= %/add(k,k=%); map(convert,%,rational);
true788:= xyz[788]; ff[788]; enc_dat[788]/subs(ency_, fac_ency);
_i:= 3369: _j:= qqr[_i]; funinv(xyz[_i]): false||_j:= %/add(k,k=%); map(convert,%,rational);
true||_j:= xyz[_j]; ff[_j]; #enc_dat[788]/subs(ency_, fac_ency);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Digits:=10:
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
sine-triple-angle (new)
j:='j':
num_cent:=49; cent:= pX(%);
(R/(1+8*cos(A)*cos(B)*cos(C)))^2: rad2:= (factor@subs)(kashi, defR2,%); ;
ruleW:= WW3^2=W3^2;
(factor@pp2uu)(cent): sta_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
rad2; numer(%)/subs(isolate(ruleW, a^6), apbpc, denom(%)):
sta_rad:= map(sqrt,%) assuming a>0,b>0,c>0,R>0,-2*a^2*b^2*c^2+W3^2>0;
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
facxx, facyz:=1/(a^6-a^4*b^2-a^4*c^2-a^2*b^4+a^2*b^2*c^2-a^2*c^4+b^6-b^4*c^2-b^2*c^4+c^6)^2 $2: j:='j':
A(facxx)*Sum( factor(coeff(eqn0,x,2)/facxx)*x^2,j)+
A(facyz)*Sum(factor(coeff(coeff(eqn0,y),z)/facyz)*y*z,j):
ici_eqn:= sort(%, [a,b,c,x,y,z]);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
Digits:=20:
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax); nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Digits:=10:
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Apollonius (new)
j:='j':
num_cent:=970; cent:= pX(%);
apol_rad:= (factor@subs)(kitcircle, valR22, (r^2+s^2)/4/r);
rad2:= (factor@subs)(defR2, apol_rad^2); ;
# ruleW:= WW3^2=W3^2;
(factor@pp2uu)(cent): apol_uu:= (Vector@factor@subs)(defR2,%); ici_uu:=%: ency(%);
subs(rho2=rad2, valR22, zipq(Vector(pu), ici_uu), eq_dou):
eqn0:= sort(collect(%, px, factor, distributed), [x,y,z]);
circlefunction:= subs(y=0,z=0,x=1,eqn0)/b/c;
facxx, facyz:=(a+b+c)/4, 1/2 : j:='j':
A(facxx)*Sum( factor(coeff(eqn0,x,2)/facxx)*x^2,j)+
A(facyz)*Sum(factor(coeff(coeff(eqn0,y),z)/facyz)*y*z,j):
ici_eqn:= sort(%, [a,b,c,x,y,z]);
(factor@mm2persp@eq2mm)(eqn0): ici_persp:= elimifacu(%); ency(%);
tmp_inv:= bary2norm(cent)+(bary2norm(px)-bary2norm(cent))*rad2/(rad2-eqn0/(x+y+z)^2):
#tmq:= (reduce@factor@evalmm)(%): (Vector@factor@subs)(defR2, %):
#collect(-%/rotp(a^2), px, normal@expand, distributed);
les fonctions funon, funinv, funsym
(reduce@factor@evalmm@subs)(ency_, tmp_inv): funinv:= unapply(%,x,y,z)@op:
funon:= unapply(subs(ency_, eqn0), x,y,z)@op:
(reduce@subs)(ency_, reflection(cent,px)): funsym:= unapply(%,x,y,z)@op:
Bien r\303\251gler le seuil... ou bien passer \303\240 20 chiffres
Digits:=20:
ici_on:= [seq](`if`((abs@funon)(xyz[j])<Float(1,-6),j,NULL),j=1..jmax); nops(%);
Les inverses-in-circle
qqr:= table(): for j to jmax do if ff[j]=1 then next fi;
tmp:= ency(funinv(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: # j:='j':
ici_inv:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=ici_inv);
On doit retrouver le nombre de points sur le cercle
[seq](`if`(qqr[j]=j,j,NULL),j=ici_inv): nops(%);
Les antipodaux
qqr:= table(): for j in ici_on do tmp:= ency(funsym(xyz[j])):
if tmp <>`?` then qqr[j]:= tmp; fi; od: j:='j':
lesk:= sort(map(op,[indices](qqr))); nops(%);
bad_points=seq(`if`(qqr[qqr[j]]=j,NULL,j), j=lesk);
Digits:=10:
Il faut envoyer cela ***si besoin*** dans un r\303\251pertoire lisible et navigable
if false then
try close(fd); catch : end try;
fd := open("/home/douillet/public_html/etc/alt_data.csv", WRITE):
for j in lesk do
fprintf(fd, """%d"";""%d""\134n", j, qqr[j]);
od: close(fd); j:='j':
fi:
Les antipodes-- apollonius
_O1:= pX(3); _O2:= pX(970); _U:= pX(573); _V:= pX(386);
harmo(_O1,_O2,_U,_V);
_P:= pp;
_PP:= collect(reflection(_O1,pp), pp, factor);
(reduce@factor@wedge)(wedge(_P,_U),wedge(_PP,_V)):
collect(%, pp, factor):
_Q:= Vector(xcollect(%, [rot3](a^2*b+a^2*c-a*b*c-b^3-c^3), factor ));
(elimifacu@factor@wedge)(wedge(_PP,_U),wedge(_P,_V));
collect(%, pp, factor):
_QQ:= Vector(xcollect(-%, [rot3](a*b+a*c+b^2+b*c+c^2), factor));
On teste l'antipodie
(reduce@factor)(bary2norm(_Q)+bary2norm(_QQ)): zipd(%, _O2);
fac:=a^2: subs(zipq(pp, prm_cir(pdr)), _Q):
%[1]: map(U-> U/fac, op(1,%))*fac*op(2,%)/(a+b+c):
_Qprm:= Vector([rot3](%));
fac:=a^2: subs(zipq(pp, prm_cir(pdr)), _QQ):
%[1]: map(U-> U/fac, op(1,%))*fac*op(2,%)/rotp(a+b):
_QQprm:= Vector([rot3](%));
kic:= [rot3]((b^2/(-rho+tau)+c^2/(rho-sigma))/(sigma-tau));
barydiv(_QQprm, kic); ency(%);
Les antipodes-- spieker
_O1:= pX(3); _O2:= pX(10); _U:= pX(958); _V:= pX(1376);
harmo(_O1,_O2,_U,_V);
_P:= pp;
_PP:= collect(reflection(_O1,pp), pp, factor);
(reduce@factor@wedge)(wedge(_P,_U),wedge(_PP,_V)):
collect(%, pp, factor):
_Q:= Vector(xcollect(%, [ rot3(b+c-a), rot3(a^2+a*b+a*c+2*b*c)], factor ));
(elimifacu@factor@wedge)(wedge(_PP,_U),wedge(_P,_V));
collect(%, pp, factor):
_QQ:= Vector(xcollect(-%, [ rot3(a^2-a*b-a*c+2*b*c)], factor));
On teste l'antipodie
(reduce@factor)(bary2norm(_Q)+bary2norm(_QQ)): zipd(%, _O2);
fac:=a^2: subs(zipq(pp, prm_cir(pdr)), _Q):
%[1]: map(U-> U/fac, op(1,%))*fac*op(2,%):
_Qprm:= Vector([rot3](%));
fac:=a^2: subs(zipq(pp, prm_cir(pdr)), _QQ):
%[1]: map(U-> U/fac, op(1,%))*fac*op(2,%):
_QQprm:= Vector([rot3](%));
kic:= [rot3]((b^2/(-rho+tau)+c^2/(rho-sigma))/(sigma-tau));
barydiv(_QQprm, kic); ency(%);
jmax;
TTdSMApJNVJUQUJMRV9TQVZFLzI0NzU3MTY4WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjMSIlIiUsJiokJSRldGFHIiIjIiIiKiQlI3hpR0YqRissJiokJkYpNiNGK0YqRisqJCZGLUYxRipGKywmKiQmRik2I0YqRipGKyokJkYtRjdGKkYrLCYqJCZGKTYjIiIkRipGKyokJkYtRj1GKkYrRi1GM0Y5RkBGKUYwRjZGPEYrRitGK0YrRiY=TTdSMApJNVJUQUJMRV9TQVZFLzU3Mzg2NjY0WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjKiIkIiQlI3hhRyUjeGJHJSN4Y0clI3lhRyUjeWJHJSN5Y0ciIiJGLUYtRiY=TTdSMApJNFJUQUJMRV9TQVZFLzU2MDEwNzJYLCUpYW55dGhpbmdHNiMlKWRpYWdvbmFsRzYiW2dsISIjISEhIyUiJSIlLCglInhHIiIiJSJ5R0YqJSJ6R0YqLCglI3AxR0YqJSNxMUdGKiUjcjFHRiosKCUjcDJHRiolI3EyR0YqJSNyMkdGKiwoJSNwM0dGKiUjcTNHRiolI3IzR0YqRic=TTdSMApJNVJUQUJMRV9TQVZFLzIzNTU2MjAwWCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjMSIlIiUsJiomLCglInhHIiIiJSJ5R0YrJSJ6R0YrISIjLCgqJkYqRislI3lhR0YrRisqJkYsRislI3liR0YrRisqJkYtRislI3ljR0YrRisiIiNGKyomRilGLiwoKiZGKkYrJSN4YUdGK0YrKiZGLEYrJSN4YkdGK0YrKiZGLUYrJSN4Y0dGK0YrRjZGKywmKiYsKCUjcDFHRislI3ExR0YrJSNyMUdGK0YuLCgqJkZCRitGMUYrRisqJkZDRitGM0YrRisqJkZERitGNUYrRitGNkYrKiZGQUYuLCgqJkZCRitGOkYrRisqJkZDRitGPEYrRisqJkZERitGPkYrRitGNkYrLCYqJiwoJSNwMkdGKyUjcTJHRislI3IyR0YrRi4sKComRlFGK0YxRitGKyomRlJGK0YzRitGKyomRlNGK0Y1RitGK0Y2RisqJkZQRi4sKComRlFGK0Y6RitGKyomRlJGK0Y8RitGKyomRlNGK0Y+RitGK0Y2RissJiomLCglI3AzR0YrJSNxM0dGKyUjcjNHRitGLiwoKiZGam5GK0YxRitGKyomRltvRitGM0YrRisqJkZcb0YrRjVGK0YrRjZGKyomRmluRi4sKComRmpuRitGOkYrRisqJkZbb0YrRjxGK0YrKiZGXG9GK0Y+RitGK0Y2RisqJkYpISIiRjhGKyomRkFGZ29GSkYrKiZGUEZnb0ZZRisqJkZpbkZnb0Zib0YrKiZGKUZnb0YvRisqJkZBRmdvRkVGKyomRlBGZ29GVEYrKiZGaW5GZ29GXW9GK0YrRitGK0YrRiY=TTdSMApJNVJUQUJMRV9TQVZFLzUxOTg2MTc2WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjLSIlIiQqJiwoJSJ4RyIiIiUieUdGKiUiekdGKiEiIiwoKiZGKUYqJSN4YUdGKkYqKiZGK0YqJSN4YkdGKkYqKiZGLEYqJSN4Y0dGKkYqRioqJiwoJSNwMUdGKiUjcTFHRiolI3IxR0YqRi0sKComRjdGKkYwRipGKiomRjhGKkYyRipGKiomRjlGKkY0RipGKkYqKiYsKCUjcDJHRiolI3EyR0YqJSNyMkdGKkYtLCgqJkZARipGMEYqRioqJkZBRipGMkYqRioqJkZCRipGNEYqRipGKiomLCglI3AzR0YqJSNxM0dGKiUjcjNHRipGLSwoKiZGSUYqRjBGKkYqKiZGSkYqRjJGKkYqKiZGS0YqRjRGKkYqRioqJkYoRi0sKComRilGKiUjeWFHRipGKiomRitGKiUjeWJHRipGKiomRixGKiUjeWNHRipGKkYqKiZGNkYtLCgqJkY3RipGU0YqRioqJkY4RipGVUYqRioqJkY5RipGV0YqRipGKiomRj9GLSwoKiZGQEYqRlNGKkYqKiZGQUYqRlVGKkYqKiZGQkYqRldGKkYqRioqJkZIRi0sKComRklGKkZTRipGKiomRkpGKkZVRipGKiomRktGKkZXRipGKkYqRipGKkYqRipGJg==TTdSMApJNVJUQUJMRV9TQVZFLzIxODcxNDg4WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjLSIlIiQlInhHJSNwMUclI3AyRyUjcDNHJSJ5RyUjcTFHJSNxMkclI3EzRyUiekclI3IxRyUjcjJHJSNyM0dGJg==TTdSMApJNVJUQUJMRV9TQVZFLzU1MzkzMTM2WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjMSIlIiUiIiIiIiFGKEYoRiglI3hhRyUjeGJHJSN4Y0dGKCUjeWFHJSN5YkclI3ljR0YoRidGJ0YnRiY=TTdSMApJNVJUQUJMRV9TQVZFLzIwNTkzMzQ0WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjMSIlIiUqJiw6KiYlInhHIiIjJSN5YUdGKyIiIioqRipGLUYsRi0lInlHRi0lI3liR0YtRisqKkYqRi1GLEYtJSJ6R0YtJSN5Y0dGLUYrKiZGL0YrRjBGK0YtKipGL0YtRjBGLUYyRi1GM0YtRisqJkYyRitGM0YrRi0qJkYqRislI3hhR0YrRi0qKkYqRi1GOEYtRi9GLSUjeGJHRi1GKyoqRipGLUY4Ri1GMkYtJSN4Y0dGLUYrKiZGL0YrRjpGK0YtKipGL0YtRjpGLUYyRi1GPEYtRisqJkYyRitGPEYrRi1GLSwoRipGLUYvRi1GMkYtISIiKiYsOiomJSNwMUdGK0YsRitGLSoqRkVGLUYsRi0lI3ExR0YtRjBGLUYrKipGRUYtRixGLSUjcjFHRi1GM0YtRisqJkZHRitGMEYrRi0qKkZHRi1GMEYtRklGLUYzRi1GKyomRklGK0YzRitGLSomRkVGK0Y4RitGLSoqRkVGLUY4Ri1GR0YtRjpGLUYrKipGRUYtRjhGLUZJRi1GPEYtRisqJkZHRitGOkYrRi0qKkZHRi1GOkYtRklGLUY8Ri1GKyomRklGK0Y8RitGLUYtLChGRUYtRkdGLUZJRi1GQSomLDoqJiUjcDJHRitGLEYrRi0qKkZXRi1GLEYtJSNxMkdGLUYwRi1GKyoqRldGLUYsRi0lI3IyR0YtRjNGLUYrKiZGWUYrRjBGK0YtKipGWUYtRjBGLUZlbkYtRjNGLUYrKiZGZW5GK0YzRitGLSomRldGK0Y4RitGLSoqRldGLUY4Ri1GWUYtRjpGLUYrKipGV0YtRjhGLUZlbkYtRjxGLUYrKiZGWUYrRjpGK0YtKipGWUYtRjpGLUZlbkYtRjxGLUYrKiZGZW5GK0Y8RitGLUYtLChGV0YtRllGLUZlbkYtRkEqJiw6KiYlI3AzR0YrRixGK0YtKipGY29GLUYsRi0lI3EzR0YtRjBGLUYrKipGY29GLUYsRi0lI3IzR0YtRjNGLUYrKiZGZW9GK0YwRitGLSoqRmVvRi1GMEYtRmdvRi1GM0YtRisqJkZnb0YrRjNGK0YtKiZGY29GK0Y4RitGLSoqRmNvRi1GOEYtRmVvRi1GOkYtRisqKkZjb0YtRjhGLUZnb0YtRjxGLUYrKiZGZW9GK0Y6RitGLSoqRmVvRi1GOkYtRmdvRi1GPEYtRisqJkZnb0YrRjxGK0YtRi0sKEZjb0YtRmVvRi1GZ29GLUZBRipGRUZXRmNvRi9GR0ZZRmVvRjJGSUZlbkZnb0YmTTdSMApJNVJUQUJMRV9TQVZFLzQ1ODQ3OTIwWColKWFueXRoaW5nRzYiNiJbZ2whJCUhISEiJSIlKiYsOiomJSJ4RyIiIyUjeWFHRisiIiIqKkYqRi1GLEYtJSJ5R0YtJSN5YkdGLUYrKipGKkYtRixGLSUiekdGLSUjeWNHRi1GKyomRi9GK0YwRitGLSoqRi9GLUYwRi1GMkYtRjNGLUYrKiZGMkYrRjNGK0YtKiZGKkYrJSN4YUdGK0YtKipGKkYtRjhGLUYvRi0lI3hiR0YtRisqKkYqRi1GOEYtRjJGLSUjeGNHRi1GKyomRi9GK0Y6RitGLSoqRi9GLUY6Ri1GMkYtRjxGLUYrKiZGMkYrRjxGK0YtRi0sKEYqRi1GL0YtRjJGLSEiIkYqRi9GMkYmTTdSMApJNVJUQUJMRV9TQVZFLzE1NTY4ODMyWCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjMSIlIiUhIiIsJiokJSN5YUciIiMiIiIqJCUjeGFHRitGLCwmKiQlI3liR0YrRiwqJCUjeGJHRitGLCwmKiQlI3ljR0YrRiwqJCUjeGNHRitGLCIiIUYsRjlGOUY5RjlGLEY5RjlGOUY5RixGJg==TTdSMApJNVJUQUJMRV9TQVZFLzQ4ODA3NjU2WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjMSIlIiUqJiwoKiglImNHIiIjJSJ4RyIiIiUieUdGLUYtKiglImJHRitGLEYtJSJ6R0YtRi0qKCUiYUdGK0YuRi1GMUYtRi1GLSwoRixGLUYuRi1GMUYtISIiKiYsKCooJSNxMUdGLSUjcjFHRi1GM0YrRi0qKCUjcDFHRi1GOUYtRipGK0YtKihGPEYtRjpGLUYwRitGLUYtLChGPEYtRjlGLUY6Ri1GNSomLCgqKCUjcTJHRi0lI3IyR0YtRjNGK0YtKiglI3AyR0YtRkJGLUYqRitGLSooRkVGLUZDRi1GMEYrRi1GLSwoRkVGLUZCRi1GQ0YtRjUqJiwoKiglI3EzR0YtJSNyM0dGLUYzRitGLSooRktGLSUjcDNHRi1GKkYrRi0qKEZORi1GTEYtRjBGK0YtRi0sKEZORi1GS0YtRkxGLUY1RixGPEZFRk5GLkY5RkJGS0YxRjpGQ0ZMRiY=TTdSMApJNVJUQUJMRV9TQVZFLzIzODI3MjY0WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjMSIlIiUqJiwoKiglImNHIiIjJSJ4RyIiIiUieUdGLUYtKiglImJHRitGLEYtJSJ6R0YtRi0qKCUiYUdGK0YuRi1GMUYtRi1GLSwoRixGLUYuRi1GMUYtISIiKiYsKCooJiUicUc2I0YtRi0mJSJyR0Y7Ri1GM0YrRi0qKCYlInBHRjtGLUY5Ri1GKkYrRi0qKEY/Ri1GPEYtRjBGK0YtRi0sKEY/Ri1GOUYtRjxGLUY1KiYsKCooJkY6NiNGK0YtJkY9RkdGLUYzRitGLSooJkZARkdGLUZGRi1GKkYrRi0qKEZKRi1GSEYtRjBGK0YtRi0sKEZKRi1GRkYtRkhGLUY1KiYsKCooJkY6NiMiIiRGLSZGPUZRRi1GM0YrRi0qKEZQRi0mRkBGUUYtRipGK0YtKihGVUYtRlNGLUYwRitGLUYtLChGVUYtRlBGLUZTRi1GNUYsRj9GSkZVRi5GOUZGRlBGMUY8RkhGU0YmTTdSMApJNVJUQUJMRV9TQVZFLzE3NTIyODY0WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjKiIkIiQiIiEsJCokJSJjRyIiIyMiIiJGKywkKiQlImJHRitGLEYoRicsJCokJSJhR0YrRixGLkYxRidGJg==TTdSMApJNVJUQUJMRV9TQVZFLzE5NTc3OTIwWCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjKiIkIiQsLiokJSJiRyIiIyIiIiomRilGKyUiY0dGK0YqKiYlImFHRitGKUYrISIjKiRGLUYqRisqJkYvRitGLUYrRjAqJEYvRipGKywqRi5GMEYoRitGMSEiIkYzRissKkYoRjVGMkYwRjFGK0YzRitGNCwuRjNGK0YyRipGLkYwRjFGK0YsRjBGKEYrLCpGLEYwRjFGK0YoRitGM0Y1RjZGOCwuRihGK0YuRipGLEYwRjNGK0YyRjBGMUYrRiY=TTdSMApJNVJUQUJMRV9TQVZFLzQ2NDE5OTY4WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkKiolImFHIiIiJSJiR0YpJSJjR0YpLCwqKCUid0dGKSwoKiRGKiIiIyEiIiokRihGMUYxKiRGK0YxRjJGKSUidkdGKUYpKiZGK0YxRi5GMUYpKiZGKkYxRjVGMUYpKihGLkYpRihGMSUidUdGKUYyKihGOUYpRihGMUY1RilGMkYpKipGKEYpRipGKUYrRiksLCooRipGMUY1RilGLkYpRjJGNkYpKiZGOUYxRihGMUYpKigsKEYwISIjRjNGKUY0RilGKUYuRilGOUYpRjIqKEY5RilGKkYxRjVGKUYyRikqKkYoRilGKkYpRitGKSwsKihGNUYpRitGMUYuRilGMkY+RilGN0YpKihGOUYpRitGMUYuRilGMiooLChGNEZBRjNGKUYwRilGKUY5RilGNUYpRjJGKUYmTTdSMApJNFJUQUJMRV9TQVZFLzU3Nzk3NTJYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQqKCwoKiYsKCokJSJhRyIiIyIiIiokJSJiR0YtRi4qJCUiY0dGLSEiIkYuJSJ2R0YuRi4qJiUidUdGLkYsRi0hIiMqJiwoRjFGLkYrRi5GL0YzRi4lIndHRi5GLkYuJSJSR0YuJSRjb25HRi4qKCwoKiZGMEYtRjRGLkY3KiZGKkYuRjZGLkYuKiYsKEYrRjNGL0YuRjFGLkYuRjpGLkYuRi5GO0YuRjxGLiooLCgqJkZCRi5GNEYuRi4qJkY5Ri5GNkYuRi4qJkYyRi1GOkYuRjdGLkY7Ri5GPEYuRiY=TTdSMApJNFJUQUJMRV9TQVZFLzYxMDY3MjBYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQsJComJSJhRyIiIywoKiZGKUYqJSRyaG9HIiIiRioqJiwoKiRGKUYqISIiKiQlImJHRipGMiokJSJjR0YqRi5GLiUmc2lnbWFHRi5GLiomLChGNUYyRjFGMkYzRi5GLiUkdGF1R0YuRi5GMkYyKiZGNEYqLCgqJiwoRjFGLkYzRi5GNUYyRi5GLUYuRi4qJkY0RipGN0YuISIjKiYsKEYxRjJGM0YuRjVGLkYuRjpGLkYuRjIqJkY2RiosKComLChGNUYuRjFGLkYzRjJGLkYtRi5GLiomRkJGLkY3Ri5GLiomRjZGKkY6Ri5GQEYyRiY=TTdSMApJNFJUQUJMRV9TQVZFLzU0NDYxMjBYKiUpYW55dGhpbmdHNiI2IltnbCEjJSEhISIkIiQqJCUiUkciIiNGJ0YnRiY=TTdSMApJNVJUQUJMRV9TQVZFLzcwMzk5MTc2WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCoqJCUieEciIiMiIiIqKiwmKiQlImFHRipGKyokJSJjR0YqISIiRislImJHISIjRilGKyUieUdGK0YrKiosJkYuRisqJEYzRipGMkYrRjFGNCUiekdGK0YpRitGKyouRi9GKiwoRi5GK0Y4RjJGMEYyRitGM0Y0RjFGNEY1RitGOUYrRissKioqLCZGOEYrRjBGMkYrRi9GNEYpRitGNUYrRisqLkYzRiosKEYwRitGLkYrRjhGMkYrRi9GNEYxRjRGOUYrRilGK0YyKiRGNUYqRisqKkY3RitGMUY0RjlGK0Y1RitGMiwqKi5GMUYqLChGLkYrRjhGK0YwRjJGK0YvRjRGM0Y0RilGK0Y1RitGMioqRj5GK0YvRjRGOUYrRilGK0YyKipGLUYrRjNGNEY5RitGNUYrRjIqJEY5RipGK0YmTTdSMApJNVJUQUJMRV9TQVZFLzUwMzk2MDk2WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqKiwoJSJiRyEiIiUiY0dGKyUiYUciIiJGLkYqRi5GLEYuLChGLUYuRipGLkYsRi5GK0YrKiosKEYtRi5GLEYuRipGK0YuRi1GLkYsRi5GL0YrKiosKEYqRi5GLUYuRixGK0YuRi1GLkYqRi5GL0YrRiY=TTdSMApJNVJUQUJMRV9TQVZFLzM5OTY5NDcyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkKiYsKComLCYlImJHIiIiJSJjRyEiIiIiIyUicEdGLEYsKiYlImFHRi8lInFHRixGLComJSJyR0YsRjJGL0YsRiwsKEYrRixGLUYsRjJGLkYsKiYsKComRjBGLEYrRi9GLComLCZGMkYsRi1GLkYvRjNGLEYsKiZGNUYsRitGL0YsRiwsKEYyRixGLUYsRitGLkYsKiYsKComRjBGLEYtRi9GLComRi1GL0YzRixGLComLCZGMkYsRitGLkYvRjVGLEYsRiwsKEYrRixGMkYsRi1GLkYsRiY=TTdSMApJNVJUQUJMRV9TQVZFLzQwMzIzNzI4WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkKiYsKComLCYlImJHIiIiJSJjR0YsIiIjJSJwR0YsRiwqJiUiYUdGLiUicUdGLEYsKiYlInJHRixGMUYuRixGLCwoRitGLEYtRixGMSEiIkY2KiYsKComRi9GLEYrRi5GLComLCZGMUYsRi1GLEYuRjJGLEYsKiZGNEYsRitGLkYsRiwsKEYxRixGLUYsRitGNkY2KiYsKComRi9GLEYtRi5GLComRi1GLkYyRixGLComLCZGK0YsRjFGLEYuRjRGLEYsRiwsKEYrRixGMUYsRi1GNkY2RiY=TTdSMApJNVJUQUJMRV9TQVZFLzUxMTAxNDQwWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkKigsKComLCYlImJHIiIiJSJjRyEiIiIiIywmJSZzaWdtYUdGLCUkdGF1R0YuRi5GLComRitGLywmJSRyaG9HRi5GMkYsRi5GLComRi1GLywmRjVGLEYxRi5GLkYsRiwlImFHRi8sKEYrRixGLUYsRjhGLkYsKigsKComLCZGLUYsRjhGLkYvRjRGLkYsRjZGLComRjhGL0YwRi5GLEYsRitGLywoRjhGLEYtRixGK0YuRiwqKCwoKiYsJkY4RixGK0YuRi9GN0YuRixGPkYsRjNGLEYsRi1GLywoRitGLEY4RixGLUYuRixGJg==TTdSMApJNVJUQUJMRV9TQVZFLzQ1OTU4MzM2WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkKigsKComLCYlImJHIiIiJSJjR0YsIiIjLCYlJnNpZ21hR0YsJSR0YXVHISIiRjJGLComRitGLiwmJSRyaG9HRjJGMUYsRjJGLComRi1GLiwmRjVGLEYwRjJGMkYsRiwlImFHRi4sKEYrRixGLUYsRjhGMkYyKigsKComLCZGOEYsRi1GLEYuRjRGMkYsRjZGLComRjhGLkYvRjJGLEYsRitGLiwoRjhGLEYtRixGK0YyRjIqKCwoKiYsJkYrRixGOEYsRi5GN0YyRixGPkYsRjNGLEYsRi1GLiwoRitGLEY4RixGLUYyRjJGJg==TTdSMApJNVJUQUJMRV9TQVZFLzcxOTEzODMyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLC4qKiwsKiYlImFHIiIiJSJjR0YsRiwqJkYrRiwlImJHRixGLCokRi8iIiMhIiIqJEYtRjFGMiomRi9GLEYtRixGMUYsLChGL0YsRitGLEYtRjJGMiwoRitGLEYtRixGL0YyRjIlInhHRjFGMioqRjZGLEY1RjJGN0YsJSJ5R0YsRiwqKkY1RixGNkYyJSJ6R0YsRjdGLEYsKixGNkYsRitGLEY1RjIsKEYvRjJGLUYyRitGLEYyRjlGMUYsKipGK0YsRj1GMkY7RixGOUYsISIjKixGNUYsRitGLEY2RjJGPUYyRjtGMUYsLC4qLEY9RixGL0YsRjVGMkY2RjJGN0YxRiwqKkY9RixGNUYyRjdGLEY5RixGMioqRi9GLEY2RjJGO0YsRjdGLEYxKiosLCokRitGMUYsRi5GMkYqRj9GNEYyRjNGLEYsRjVGMkY9RjJGOUYxRjIqKkY1RixGPUYyRjtGLEY5RixGMiosRjVGLEYvRixGNkYyRj1GMkY7RjFGLCwuKixGPUYsRi1GLEY1RjJGNkYyRjdGMUYsKipGLUYsRjVGMkY3RixGOUYsRjEqKkY9RixGNkYyRjtGLEY3RixGMiosRjZGLEYtRixGNUYyRj1GMkY5RjFGLCoqRjZGLEY9RjJGO0YsRjlGLEYyKiosLEZHRixGLkY/RipGMkYwRixGNEYyRixGNkYyRj1GMkY7RjFGMkYmTTdSMApJNVJUQUJMRV9TQVZFLzQ2NjE1NzIwWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqLCw2KiQlImFHIiInIiIiKiZGKyIiJSUiY0ciIiMhIiQqJkYrRi8lImJHRjFGMiomRitGMUYwRi8iIiQqJkYrRjFGNEYvRjYqKEYrRjFGNEYxRjBGMUY2KiRGMEYsISIiKiZGNEYvRjBGMUYtKiRGNEYsRjoqJkY0RjFGMEYvRi1GLSwoRjRGLUYrRi1GMEY6RjosKEYrRi1GNEYtRjBGLUY6LChGK0YtRjBGLUY0RjpGOiwoRjRGOkYwRjpGK0YtRjojRjpGLywkKiwsNkYqRi1GLkY6RjNGMkY1RjpGN0Y2RjhGMkY5Ri1GO0Y2RjxGOkY9RjJGLUY+RjpGP0Y6RkBGOkZBRjojRi1GLywkKiwsNkYqRi1GLkYyRjNGOkY1RjZGN0Y6RjhGMkY5RjpGO0YyRjxGLUY9RjZGLUY+RjpGP0Y6RkBGOkZBRjpGRkYmTTdSMApJNVJUQUJMRV9TQVZFLzUzNDA2MTEyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqMCUiYkciIiIlImNHRiosMCokJSJhRyIiJUYqKiZGLiIiI0YpRjEhIiMqJkYuRjFGK0YxRjIqKEYuRjFGKUYqRitGKkYvKiRGKUYvRioqJkYpRjFGK0YxRjIqJEYrRi9GKkYqLChGKUYqRi5GKkYrISIiRjksKEYuRipGKUYqRitGKkY5LChGLkYqRitGKkYpRjlGOSwoRilGOUYrRjlGLkYqRjlGOSwkKjBGK0YqRi5GKiwwRi1GKkYwRjJGM0YyKihGLkYqRilGMUYrRipGL0Y1RipGNkYyRjdGKkYqRjhGOUY6RjlGO0Y5RjxGOUY5LCQqMEYuRipGKUYqLDBGLUYqRjBGMkYzRjIqKEYuRipGKUYqRitGMUYvRjVGKkY2RjJGN0YqRipGOEY5RjpGOUY7RjlGPEY5RjlGJg==TTdSMApJNVJUQUJMRV9TQVZFLzcyMjE2MjA4WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCYqJiUiYkciIiIlImNHRiohIiIqJCUiUkciIiMiIiUsJiomJSJhR0YqRitGKkYsRi1GMCwmKiZGM0YqRilGKkYsRi1GMEYmTTdSMApJNVJUQUJMRV9TQVZFLzQwMTMwMDQ4WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqMiUiYkciIiMlImNHRiosMComJSJhR0YqRikiIiVGKiooRi5GKkYpRipGK0YqIiImKiZGLkYqRitGL0YqKiRGKSIiJyEiIiomRilGL0YrRioiIiIqJkYpRipGK0YvRjcqJEYrRjRGNUY3LCgqJEYuRipGNyokRilGKkY3KiRGK0YqRjchIiMsKEYuRjdGKUY3RitGN0Y1LChGKUY1RitGNUYuRjdGNSwoRilGN0YuRjdGK0Y1RjUsKEYuRjdGK0Y3RilGNUY1RjUqMkYuRipGK0YqLDAqJEYuRjRGNyomRi5GL0YpRipGPiomRi5GL0YrRipGNUYwISImRjJGNUY4Rj5GOUY3RjdGOkY+Rj9GNUZARjVGQUY1RkJGNSoyRi5GKkYpRiosMEZFRjdGRkY1RkdGPkYtRjVGMEZIRjNGN0Y2Rj5GN0Y6Rj5GP0Y1RkBGNUZBRjVGQkY1RiY=TTdSMApJNVJUQUJMRV9TQVZFLzE1MTI1ODE2WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkKiosMComJSJhRyIiIyUiYkciIiVGKyooRipGK0YsRislImNHRisiIiYqJkYqRitGL0YtRisqJEYsIiInISIiKiZGLEYtRi9GKyIiIiomRixGK0YvRi1GNiokRi9GM0Y0RjYsKCokRipGK0Y2KiRGLEYrRjYqJEYvRitGNiEiIyUiUkdGK0YqRj0sJCoqLDAqJEYqRjNGNiomRipGLUYsRitGPSomRipGLUYvRitGNEYuISImRjFGNEY3Rj1GOEY2RjZGOUY9Rj5GK0YsRj1GNCwkKiosMEZCRjZGQ0Y0RkRGPUYpRjRGLkZFRjJGNkY1Rj1GNkY5Rj1GPkYrRi9GPUY0RiY=TTdSMApJNVJUQUJMRV9TQVZFLzM5NjczMDMyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqJiwuKiQlImFHIiIkIiIiKiZGK0YtJSJjRyIiIyEiIyomRitGLSUiYkdGMEYxKihGK0YtRjNGLUYvRi1GLSokRi9GLCEiIiokRjNGLEY2Ri0sKEYrRi1GM0YtRi9GLUY2I0Y2IiIlLCQqJiwuRipGLSomRitGMEYzRi1GMEY0RjZGN0Y2RjVGLSomRjNGLUYvRjBGMEYtRjhGNiNGLUY6LCQqJiwuRipGLSomRitGMEYvRi1GMEY0RjYqJkYzRjBGL0YtRjBGN0YtRjVGNkYtRjhGNkZARiY=TTdSMApJNVJUQUJMRV9TQVZFLzE5Mjk4MzkyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkKiYsKComLC4qJiUiYkciIiMlImNHIiIiISIiKiRGLiIiJEYvKiYlImFHRi9GLEYtRi8qJEYsRjJGLyomRjRGL0YuRi1GLyomRixGL0YuRi1GMEYvJSJwR0YvRi8qKEY0Ri8sKiokRjRGLUYvKiZGNEYvRixGL0YvKiZGNEYvRi5GL0YvKiZGLEYvRi5GL0YtRi8lInFHRi9GLyooJSJyR0YvRjRGL0Y6Ri9GL0YvLChGLEYvRi5GL0Y0RjBGLyomLCgqKEY4Ri9GLEYvLCpGPkYvRj1GLUY8Ri8qJEYsRi1GL0YvRi8qJiwuKiZGNEYtRixGL0YvRjdGLyokRjRGMkYvKiZGNEYtRi5GL0YwRjZGMEYxRi9GL0Y/Ri9GLyooRkFGL0YsRi9GRkYvRi9GLywoRjRGL0YuRi9GLEYwRi8qJiwoKihGOEYvRi5GLywqRjxGLUY+Ri9GPUYvKiRGLkYtRi9GL0YvKihGP0YvRi5GL0ZSRi9GLyomLC5GTEYvRitGL0ZLRi9GSkYwRjNGMEY1Ri9GL0ZBRi9GL0YvLChGLEYvRjRGL0YuRjBGL0YmTTdSMApJNVJUQUJMRV9TQVZFLzUzNzg2NjA4WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCgqJiwuKiYlImJHIiIjJSJjRyIiIkYuKiYlImFHRi5GK0YsRi4qJEYrIiIkISIiKiRGLUYyRjMqJkYwRi5GLUYsRi4qJkYrRi5GLUYsRi5GLiUicEdGLkYzKihGMEYuLCoqJkYwRi5GK0YuRjMqJkYrRi5GLUYuRiwqJEYwRixGLiomRjBGLkYtRi5GM0YuJSJxR0YuRjMqKCUickdGLkYwRi5GOUYuRjMsKCooRjdGLkYrRi4sKkY9ISIjRjtGLkY6Ri4qJEYrRixGM0YuRi4qJiwuRjZGLiomRjBGLEYrRi5GLiokRjBGMkYzKiZGMEYsRi1GLkYuRjVGLkY0RjNGLkY+Ri5GMyooRkBGLkYrRi5GQ0YuRi4sKCooRjdGLkYtRi4sKkY6RixGO0YzRj1GMyokRi1GLEYuRi5GMyooRj5GLkYtRi5GTkYuRjMqJiwuRkpGLkYqRi5GSUYzRkhGLkYvRi5GMUYzRi5GQEYuRjNGJg==TTdSMApJNVJUQUJMRV9TQVZFLzIwNDcxMjE2WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkKiYsKCooLC4qJiUiYkciIiMlImNHIiIiISIiKiRGLiIiJEYvKiYlImFHRi9GLEYtRi8qJEYsRjJGLyomRjRGL0YuRi1GLyomRixGL0YuRi1GMEYvRjRGLSwmJSZzaWdtYUdGLyUkdGF1R0YwRjBGLyoqRjRGLywqKiRGNEYtRi8qJkY0Ri9GLEYvRi8qJkY0Ri9GLkYvRi8qJkYsRi9GLkYvRi1GL0YsRi0sJiUkcmhvR0YwRjpGL0YwRi8qKkYuRi0sJkZCRi9GOUYwRjBGNEYvRjxGL0YvRi8sKEYsRi9GLkYvRjRGMEYvKiYsKCoqRjRGLUY4RjBGLEYvLCpGQEYvRj9GLUY+Ri8qJEYsRi1GL0YvRi8qKCwuKiZGNEYtRixGL0YvRjdGLyokRjRGMkYvKiZGNEYtRi5GL0YwRjZGMEYxRi9GL0YsRi1GQUYwRi8qKkYuRi1GREYwRixGL0ZJRi9GL0YvLChGNEYvRi5GL0YsRjBGLyomLCgqKkY0Ri1GOEYwRi5GLywqRj5GLUZARi9GP0YvKiRGLkYtRi9GL0YvKipGLEYtRkFGMEYuRi9GVUYvRi8qKCwuRk9GL0YrRi9GTkYvRk1GMEYzRjBGNUYvRi9GLkYtRkRGMEYvRi8sKEYsRi9GNEYvRi5GMEYvRiY=TTdSMApJNVJUQUJMRV9TQVZFLzUwMjAzMDcyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCgqKCwuKiYlImJHIiIjJSJjRyIiIkYuKiYlImFHRi5GK0YsRi4qJEYrIiIkISIiKiRGLUYyRjMqJkYwRi5GLUYsRi4qJkYrRi5GLUYsRi5GLkYwRiwsJiUmc2lnbWFHRi4lJHRhdUdGM0YzRjMqKkYwRi4sKiomRjBGLkYrRi5GMyomRitGLkYtRi5GLCokRjBGLEYuKiZGMEYuRi1GLkYzRi5GK0YsLCYlJHJob0dGM0Y5Ri5GM0YzKipGLUYsLCZGQUYuRjhGM0YzRjBGLkY7Ri5GMywoKipGMEYsRjdGM0YrRi4sKkY/ISIjRj1GLkY8Ri4qJEYrRixGM0YuRi4qKCwuRjZGLiomRjBGLEYrRi5GLiokRjBGMkYzKiZGMEYsRi1GLkYuRjVGLkY0RjNGLkYrRixGQEYzRjMqKkYtRixGQ0YzRitGLkZGRi5GLiwoKipGMEYsRjdGM0YtRi4sKkY8RixGPUYzRj9GMyokRi1GLEYuRi5GMyoqRitGLEZARjNGLUYuRlFGLkYzKigsLkZNRi5GKkYuRkxGM0ZLRi5GL0YuRjFGM0YuRi1GLEZDRjNGM0YmTTdSMApJNVJUQUJMRV9TQVZFLzc1NTA0MzQ0WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqLCw2KiQlImFHIiInIiIlKiZGK0YtJSJiRyIiIyEjNSomRitGLSUiY0dGMEYxKiZGK0YwRjNGLSIiKSomRitGMEYvRi1GNSooRitGMEYvRjBGM0YwIiIqKiZGL0YwRjNGLUYwKiZGL0YtRjNGMEYwKiRGM0YsISIjKiRGL0YsRjwiIiIsKEYvRj5GK0Y+RjMhIiJGQCwoRitGPkYvRj5GM0Y+RkAsKEYrRj5GM0Y+Ri9GQEZALChGL0ZARjNGQEYrRj5GQCNGQEY4LCQqLCw2RipGMEYuISIpRjJGPEY0RjxGNiIjNUY3ISIqRjlGSEY6RklGO0YwRj0hIiVGPkY/RkBGQUZARkJGQEZDRkAjRj5GOCwkKiwsNkYqRjBGLkY8RjJGSEY0RklGNkY8RjdGSkY5RklGOkZIRjtGS0Y9RjBGPkY/RkBGQUZARkJGQEZDRkBGTEYmTTdSMApJNVJUQUJMRV9TQVZFLzI0MTc2NzkyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqLiUiYUciIiIsTCokRikiIiZGKiomRikiIiUlImNHRiohIiIqJkYpRi8lImJHRipGMSomRikiIiRGMyIiIyEiIyomRilGNUYwRjZGNyooRilGNUYzRipGMEYqRjUqKEYpRjZGM0Y2RjBGKkYxKiZGMEY1RilGNkY2KihGKUY2RjNGKkYwRjZGMSomRjNGNUYpRjZGNiomRilGKkYzRi9GKiomRilGKkYwRi9GKiooRilGKkYzRjZGMEY2Ri0qKEYpRipGMEY1RjNGKiEiJCooRilGKkYzRjVGMEYqRkIqJEYzRi1GMSomRjNGL0YwRipGNiomRjNGNUYwRjZGMSomRjNGKkYwRi9GNiokRjBGLUYxKiZGMEY1RjNGNkYxRiosKEYzRipGKUYqRjBGMUYxLChGKUYqRjNGKkYwRipGMSwoRilGKkYwRipGM0YxRjEsKEYzRjFGMEYxRilGKkYxRjEqLkYzRiosTEYsRipGLkY3RjJGMUY0RjdGOEYqRjlGNUY6RipGO0YqRjwhIiZGPUY2Rj5GKkY/RjdGQEYqRkFGNUZDRkJGREYxRkVGKkZGRjZGR0YxRkhGKkZJRjdGKkZKRjFGS0YxRkxGMUZNRjEqLkYwRiosTEYsRipGMkY3Ri5GMUY0RipGOEY3RjlGNUY6RlBGO0Y2RjxGKkY9RipGPkY3Rj9GKkZARipGQUZCRkNGNUZERipGRUYxRkZGN0ZHRipGSEYxRklGNkYqRkpGMUZLRjFGTEYxRk1GMUYmTTdSMApJNVJUQUJMRV9TQVZFLzE1Njc2NTIwWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkKiYsJiosLCoqJCUiYUciIiMiIiIqJCUiYkdGLSEiIiomRjBGLiUiY0dGLkYuKiRGM0YtRjFGLkYsRjFGMCEiI0YzRjUlI1c0R0YtRi4qKCwoRitGLkYvRjFGNEYxRi5GMEYxRjNGMUYxRi4lIlJHRi0qJiwmKiwsKkYvRi5GNEYxKiZGLEYuRjNGLkYuRitGMUYuRjBGMUYzRjVGLEY1RjZGLUYuKigsKEY0RjFGK0YxRi9GLkYuRjNGMUYsRjFGMUYuRjlGLSomLCYqLCwqRitGMUYvRjFGNEYuKiZGLEYuRjBGLkYuRi5GM0YxRixGNUYwRjVGNkYtRi4qKCwoRitGMUYvRjFGNEYuRi5GLEYxRjBGMUYxRi5GOUYtRiY=TTdSMApJNVJUQUJMRV9TQVZFLzY5OTI3NDk2WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkIiIhRidGJ0YmTTdSMApJNVJUQUJMRV9TQVZFLzQwMTAyMTY4WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqMiUiYkciIiMlImNHRiosMComJSJhR0YqRikiIiVGKiooRi5GKkYpRipGK0YqIiImKiZGLkYqRitGL0YqKiRGKSIiJyEiIiomRilGL0YrRioiIiIqJkYpRipGK0YvRjcqJEYrRjRGNUY3LCgqJEYuRipGNyokRilGKkY3KiRGK0YqRjchIiMsKEYuRjdGKUY3RitGN0Y1LChGKUY1RitGNUYuRjdGNSwoRilGN0YuRjdGK0Y1RjUsKEYuRjdGK0Y3RilGNUY1RjUqMkYuRipGK0YqLDAqJEYuRjRGNyomRi5GL0YpRipGPiomRi5GL0YrRipGNUYwISImRjJGNUY4Rj5GOUY3RjdGOkY+Rj9GNUZARjVGQUY1RkJGNSoyRi5GKkYpRiosMEZFRjdGRkY1RkdGPkYtRjVGMEZIRjNGN0Y2Rj5GN0Y6Rj5GP0Y1RkBGNUZBRjVGQkY1RiY=TTdSMApJNVJUQUJMRV9TQVZFLzI0NDQxODU2WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqKiUiYkciIiMlImNHRiosKCokJSJhR0YqIiIiKiRGK0YqISIjKiRGKUYqRjFGLywoRi1GL0YyRi9GMEYvRjEhIiIqKkYuRipGK0YqLChGLUYqRjJGNEYwRipGL0YzRjEqKkYuRipGKUYqLChGMkYqRi1GKkYwRjRGL0YzRjFGJg==TTdSMApJNVJUQUJMRV9TQVZFLzM2OTMxNzEyWColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqMiUiYkciIiMlImNHRiosam4qJEYrIiM5ISIiKiYlImFHIiIlRikiIzUhIicqJkYxIiInRikiIilGMiomRjFGN0YpRjZGLyokRilGLkYvKiZGKUY2RitGNyIiJiomRilGN0YrRjZGOyomRilGM0YrRjIhIioqJkYpRjJGK0YzRj4qJkYpRipGKyIjN0Y7KiZGKUZBRitGKkY7KihGKUYqRitGKkYxRjMiIiIqKEYxRjdGKUYqRitGMiEiIyooRjFGKkYpRjZGK0Y2ISIpKihGMUYqRilGM0YrRiohIzcqJkYxRipGK0ZBRjIqKEYxRjJGK0Y3RilGKiIiKiooRjFGMkYpRjdGK0YqRk0qJkYxRjJGK0YzRjQqKEYxRjJGKUYyRitGNiEiJCooRjFGMkYpRjZGK0YyRlEqKEYxRjZGKUYqRitGNkYvKihGMUY2RilGNkYrRipGLyomRjFGNkYrRjdGMiooRjFGN0YpRjJGK0YqRkYqKEYxRjZGKUYyRitGMiIiJComRjFGN0YrRjZGLyooRjFGKkYpRjdGK0YyRkEqKEYxRipGKUYqRitGM0ZKKihGMUYqRilGMkYrRjdGQSomRjFGKkYpRkFGMkZELChGKUZERjFGREYrRi9GLywoRjFGREYpRkRGK0ZERi8sKEYxRkRGK0ZERilGL0YvLChGKUYvRitGL0YxRkRGLyw2KiRGMUY2RkQqJkYxRjJGKUYqRi8qJkYxRjJGK0YqRi8qJkYxRipGKUYyRi8qKEYxRipGKUYqRitGKkZEKiZGMUYqRitGMkYvKiRGKUY2RkQqJkYpRjJGK0YqRi8qJkYpRipGK0YyRi8qJEYrRjZGREZGRi8qMkYxRipGK0YqLGpuRi1GRComRjFGM0YpRjJGNiokRjFGLkZEKiZGMUYzRitGMkZNRjVGREY4ISIlKiZGMUZBRilGKkZccComRjFGQUYrRiohIiZGOkZccEY8RkRGP0Y2RkBGXHBGQ0ZBRkVGSkZHRkRGSUYvRktGX3BGTEZKRk5GKkZPRk1GUEZYRlJGUUZTRjdGVEZERlVGX3BGVkY+RldGWEZZRl9wRlpGKkZlbkZBRmZuRj5GREZobkYvRmluRi9Gam5GL0Zbb0YvRlxvRkYqMkYxRipGKUYqLGpuRmlvRk1Gam9GREZbcEY2RjBGTUY1Rl9wRjhGX3BGXXBGX3BGXnBGXHBGOUZERjpGREY8RlxwRj1GNkZCRlxwRkNGQUZFRj5GR0ZERklGQUZMRipGTkZKRlBGUUZSRlhGU0ZERlRGN0ZVRkRGVkZKRldGWEZZRlxwRlpGPkZlbkYvRmZuRipGZ25GX3BGREZobkYvRmluRi9Gam5GL0Zbb0YvRlxvRkZGJg==TTdSMApJNVJUQUJMRV9TQVZFLzM5NzUxNzg0WColKWFueXRoaW5nRzYiNiJbZ2whIyUhISEiJCIkLCQqLixWKiQlImFHIiIoIiIiKiglImJHIiIkRitGLSUiY0dGMCEiJyooRi8iIiZGK0YtRjFGLSIiJSooRitGMEYxRjBGL0YtISIlKihGK0YwRi9GMEYxRi1GNyooRitGNUYvRi1GMSIiI0Y6KihGK0Y1RjFGLUYvRjpGOiooRitGNEYvRi1GMUYtIiInKiZGL0YwRjFGNUY3KiZGL0Y1RjFGMEY3KiZGL0Y0RjFGOkY6KiZGK0Y6Ri9GNEY6KiZGK0Y6RjFGNEY6KiZGK0Y1Ri9GMCEiIyomRitGNUYxRjBGRComRi9GOkYxRjRGOiomRi9GPUYxRi1GOiomRi9GLUYxRj1GOiomRitGPUYvRi1GOiomRitGPUYxRi1GOiomRitGLUYvRj1GLSomRitGLUYxRj1GLSooRjFGNEYrRi1GL0YtRjUqKEYrRjpGL0YwRjFGOkY3KihGK0Y6RjFGMEYvRjpGNyooRitGMEYvRjpGMUY6Ri1GLUYrISIiLChGL0YtRitGLUYxRlFGUSwoRitGLUYvRi1GMUYtRlEsKEYrRi1GMUYtRi9GUUZRLChGL0ZRRjFGUUYrRi1GUSNGUUY1LCQqLixWRi5GNyooRi9GNUYrRi1GMUY6RjpGM0Y9KihGK0Y6RjFGLUYvRjVGOkY2RjJGOEY3RjxGNSokRi9GLEYtRj9GREZCRjoqJkYrRjBGMUY1RjcqJkYrRjBGL0Y1RkRGRUY3KiZGK0Y0Ri9GOkY6KiZGK0Y0RjFGOkY6RkZGOkZHRjpGSEYtRklGLUZKRjpGS0Y6RkxGOkZNRjVGTkYtRk9GN0ZQRjdGLUYvRlFGUkZRRlNGUUZURlFGVUZRRlYsJCouLFYqJEYxRixGLSooRi9GOkYrRi1GMUY1RjpGLkY3RjNGNSooRitGOkYvRi1GMUY1RjpGNkY3RjhGMkY8RjVGPkZERkBGOkZBRjpGZ25GREZobkY3RkNGN0ZpbkY6RmpuRjpGR0YtRkhGOkZJRjpGSkYtRktGOkZMRjpGTUY9Rk5GN0ZPRi1GUEY3Ri1GMUZRRlJGUUZTRlFGVEZRRlVGUUZWRiY=