From d421519ccacb80dbdd5396456e9c5626bd139532 Mon Sep 17 00:00:00 2001 From: Jan Kosata Date: Wed, 12 Oct 2022 14:39:38 +0200 Subject: [PATCH] Limit cycle classes (#55) * fixed loading for version changes * ordering revamped to have fixed order * limit cycle unique classification * 2d result test added --- Project.toml | 2 +- src/classification.jl | 11 +++++-- src/modules/LimitCycles.jl | 1 + src/modules/LimitCycles/Hopf.jl | 10 ++++-- src/modules/LimitCycles/analysis.jl | 15 +++++++++ src/saving.jl | 4 +-- src/solve_homotopy.jl | 47 ++++++++++++++-------------- src/types.jl | 2 +- test/parametron.jl | 19 ++++++----- test/parametron_result.jld2 | Bin 1804107 -> 1826581 bytes 10 files changed, 71 insertions(+), 40 deletions(-) create mode 100644 src/modules/LimitCycles/analysis.jl diff --git a/Project.toml b/Project.toml index fbdc55b4..31978bce 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "HarmonicBalance" uuid = "e13b9ff6-59c3-11ec-14b1-f3d2cc6c135e" authors = ["Jan Kosata ", "Javier del Pino "] -version = "0.6.1" +version = "0.6.2" [deps] BijectiveHilbert = "91e7fc40-53cd-4118-bd19-d7fcd1de2a54" diff --git a/src/classification.jl b/src/classification.jl index 2030642c..977a555b 100644 --- a/src/classification.jl +++ b/src/classification.jl @@ -21,14 +21,19 @@ classify_solutions!(res, "sqrt(u1^2 + v1^2) > 1.0" , "large_amplitude") """ function classify_solutions!(res::Result, condition::String, name::String; physical=true) + values = classify_solutions(res, condition; physical=physical) + res.classes[name] = values +end + + +function classify_solutions(res::Result, condition::String; physical=true) expr = Num(eval(Meta.parse(condition))) function cond_func(s::OrderedDict, res) physical && !is_physical(s, res) && return false s = [key => real(s[key]) for key in keys(s)] # make values real Bool(substitute_all(expr, s).val) end - values = classify_solutions(res, cond_func) - res.classes[name] = values + classify_solutions(res, cond_func) end @@ -43,7 +48,7 @@ end "Return an array of booleans classifying the solution in `res` according to `f` (`f` takes a solution dictionary, return a boolean)" function classify_solutions(res::Result, f::Function) - values = similar(res.solutions, Vector{Bool}) + values = similar(res.solutions, BitVector) for (idx, soln) in enumerate(res.solutions) values[idx] = [f(get_single_solution(res, index=idx, branch=b), res) for b in 1:length(soln)] end diff --git a/src/modules/LimitCycles.jl b/src/modules/LimitCycles.jl index d1d51647..bf3f9cc6 100644 --- a/src/modules/LimitCycles.jl +++ b/src/modules/LimitCycles.jl @@ -5,5 +5,6 @@ using Symbolics using DocStringExtensions include("LimitCycles/Hopf.jl") +include("LimitCycles/analysis.jl") end \ No newline at end of file diff --git a/src/modules/LimitCycles/Hopf.jl b/src/modules/LimitCycles/Hopf.jl index ab974192..e5cc14d3 100644 --- a/src/modules/LimitCycles/Hopf.jl +++ b/src/modules/LimitCycles/Hopf.jl @@ -4,7 +4,7 @@ export replace_Hopf_variable! using HarmonicBalance: is_rearranged, rearrange_standard, _remove_brackets using HarmonicBalance.LinearResponse: get_implicit_Jacobian, get_Jacobian -import HarmonicBalance: is_stable, is_physical, is_Hopf_unstable, order_branches!, classify_binaries! +import HarmonicBalance: is_stable, is_physical, is_Hopf_unstable, order_branches!, classify_binaries!, find_branch_order #import HarmonicBalance.get_steady_states; export get_steady_states @@ -97,7 +97,13 @@ function _classify_limit_cycles!(res::Result, Δω::Num) res.classes[c][idx] .*= abs.(getindex.(res.solutions[idx], Δω_idx)) .> 1E-10 end - order_branches!(res, ["physical", "stable", "Hopf"]) # shuffle the branches to have relevant ones first + classify_unique!(res, Δω) + + unique_stable = find_branch_order(map(.*, res.classes["stable"], res.classes["unique"])) + + # branches which are unique but never stable + unique_unstable = setdiff(find_branch_order(map(.*, res.classes["unique"], res.classes["physical"])), unique_stable) + order_branches!(res, vcat(unique_stable, unique_unstable)) # shuffle to have relevant branches first end diff --git a/src/modules/LimitCycles/analysis.jl b/src/modules/LimitCycles/analysis.jl new file mode 100644 index 00000000..46b80ebd --- /dev/null +++ b/src/modules/LimitCycles/analysis.jl @@ -0,0 +1,15 @@ + + +import HarmonicBalance.classify_solutions + +function classify_unique!(res::Result, Δω; class_name="unique") + + # 1st degeneracy: arbitrary sign of Δω + c1 = classify_solutions(res, string(Δω) * ">= 0") + + # 2nd degeneracy: ambiguity in the fixed phase, manifests as the sign of var + var = HarmonicBalance._remove_brackets(get_Hopf_variables(res.problem.eom, Δω)[1]) + c2 = classify_solutions(res, string(var) * ">= 0") + + res.classes[class_name] = map(.*, c1, c2) +end \ No newline at end of file diff --git a/src/saving.jl b/src/saving.jl index e209413c..ad2539b8 100644 --- a/src/saving.jl +++ b/src/saving.jl @@ -19,8 +19,7 @@ function save(filename, x::Result) x_nofunc = deepcopy(x) # compiled functions cause problems in saving: ignore J now, compile when loading - null_J() = 0 - x_nofunc.jacobian = null_J + x_nofunc.jacobian = 0 JLD2.save(_jld2_name(filename), Dict("object" => x_nofunc)) end @@ -37,7 +36,6 @@ reinstated in the `HarmonicBalance` namespace. """ function load(filename) loaded = JLD2.load(filename) - if haskey(loaded,"object") #otherwise save data is from a plot loaded = loaded["object"] diff --git a/src/solve_homotopy.jl b/src/solve_homotopy.jl index 3324f617..3240b61b 100644 --- a/src/solve_homotopy.jl +++ b/src/solve_homotopy.jl @@ -120,7 +120,7 @@ function _classify_default!(result) classify_solutions!(result, is_physical, "physical") classify_solutions!(result, is_stable, "stable") classify_solutions!(result, is_Hopf_unstable, "Hopf") - order_branches!(result, ["physical", "stable", "Hopf"]) # shuffle the branches to have relevant ones first + order_branches!(result, ["physical", "stable"]) # shuffle the branches to have relevant ones first classify_binaries!(result) # assign binaries to solutions depending on which branches are stable end @@ -160,37 +160,38 @@ function compile_matrix(matrix, variables, fixed_parameters) end -"Order the solution branches in `res` such that close classified positively by `class` are first." -function order_branches!(res::Result, class::String) - indices = findall( x-> x==1, any.(classify_branch(res, class))) - order = cat(indices, setdiff(1:length(res.solutions[1]), indices), dims=1) # permutation of indices which puts stable branches first - reorder_solutions!(res, order) +"Find a branch order according `classification`. Place branches where true occurs earlier first." +function find_branch_order(classification::Vector{BitVector}) + branches = [getindex.(classification, k) for k in 1:length(classification[1])] # array of branches + indices = replace(findfirst.(branches), nothing => Inf) + negative = findall(x -> x == Inf, indices) # branches not true anywhere - leave out + order = setdiff(sortperm(indices), negative) end -"Order the solution branches in `res` such that close classified positively by `classes` are first. -The order of classes has descending precedence." -function order_branches!(s::Result, classes::Vector{String}) - for class in reverse(classes) - order_branches!(s, class) - end +find_branch_order(classification::Array) = collect(1:length(classification[1])) # no ordering for >1D + +"Order the solution branches in `res` such that close classified positively by `classes` are first." +function order_branches!(res::Result, classes::Vector{String}) + for class in classes + order_branches!(res, find_branch_order(res.classes[class])) + end end +order_branches!(res::Result, class::String) = order_branches!(res, [class]) + "Reorder the solutions in `res` to match the index permutation `order`." -function reorder_solutions!(res::Result, order::Vector{Int64}) - res.solutions = reorder_array(res.solutions, order) +function order_branches!(res::Result, order::Vector{Int64}) + res.solutions = _reorder_nested(res.solutions, order) for key in keys(res.classes) - res.classes[key] = reorder_array(res.classes[key], order) + res.classes[key] = _reorder_nested(res.classes[key], order) end end -"Reorder EACH ELEMENT of `a` to match the index permutation `order`." -function reorder_array(a::Array, order::Vector{Int64}) - a[1] isa Array || return a - new_array = similar(a) - for (i,el) in enumerate(a) - new_array[i] = el[order] - end - return new_array +"Reorder EACH ELEMENT of `a` to match the index permutation `order`. If length(order) < length(array), the remanining positions are kept." +function _reorder_nested(a::Array, order::Vector{Int64}) + a[1] isa Union{Array, BitVector} || return a + order = length(order) == length(a) ? order : vcat(order, setdiff(1:length(a[1]), order)) # pad if needed + new_array = [el[order] for el in a] end diff --git a/src/types.jl b/src/types.jl index 2cd37a71..1aa8fd33 100644 --- a/src/types.jl +++ b/src/types.jl @@ -223,7 +223,7 @@ mutable struct Result If problem.jacobian is a symbolic matrix, this holds a compiled function. If problem.jacobian was `false`, this holds a function that rearranges the equations to find J only after numerical values are inserted (preferable in cases where the symbolic J would be very large)." - jacobian::Function + jacobian::Union{Function, Int64} Result(sol,swept, fixed, problem, classes, J) = new(sol, swept, fixed, problem, classes, J) Result(sol,swept, fixed, problem, classes) = new(sol, swept, fixed, problem, classes) diff --git a/test/parametron.jl b/test/parametron.jl index 25fe5bac..03f461ab 100644 --- a/test/parametron.jl +++ b/test/parametron.jl @@ -7,19 +7,24 @@ using Test natural_equation = d(d(x,t),t) + γ*d(x,t) + Ω^2*(1-λ*cos(2*ω*t+ψ))*x + α * x^3 +η *d(x,t) * x^2 forces = F*cos(ω*t+θ) -dEOM = HarmonicBalance.DifferentialEquation(natural_equation + forces, x) -HarmonicBalance.add_harmonic!(dEOM, x, ω) -harmonic_eq = HarmonicBalance.get_harmonic_equations(dEOM, slow_time=T, fast_time=t); +dEOM = DifferentialEquation(natural_equation + forces, x) +add_harmonic!(dEOM, x, ω) +harmonic_eq = get_harmonic_equations(dEOM, slow_time=T, fast_time=t); p = HarmonicBalance.Problem(harmonic_eq); -fixed_parameters = (Ω => 1.0,γ => 1E-2, λ => 5E-2, F => 1E-3, α => 1., η=>0.3, θ => 0, ψ => 0) -sweep = ω => LinRange(0.9, 1.1, 100) -soln = HarmonicBalance.get_steady_states(p, sweep, fixed_parameters) +fixed = (Ω => 1.0,γ => 1E-2, λ => 5E-2, F => 1E-3, α => 1., η=>0.3, θ => 0, ψ => 0) +varied = ω => LinRange(0.9, 1.1, 100) +res = get_steady_states(p, varied, fixed) # save the result, try and load in the next step #current_path = @__DIR__ -#HarmonicBalance.save(current_path * "/parametron_result.jld2", soln) +#HarmonicBalance.save(current_path * "/parametron_result.jld2", res) + +# try to run a 2D calculation +fixed = (Ω => 1.0,γ => 1E-2, F => 1E-3, α => 1., η=>0.3, θ => 0, ψ => 0) +varied = (ω => LinRange(0.9, 1.1, 10), λ => LinRange(0.01, 0.05, 10)) +res = get_steady_states(p, varied, fixed) ### diff --git a/test/parametron_result.jld2 b/test/parametron_result.jld2 index f2d56bfd9802158b7fca4a13e08b7cda8e0abe78..caf7960a96793d824d03b7b736d2c5af83c4a4d0 100644 GIT binary patch delta 55204 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 delta 43427 zcmeFZc{r3`_&+{_82iXrhACu9wz3aN2NjhTT2S_swAe~XB@~i2dhnzOY14{gZ1pG= zTFDZr&|WCoOUv(>=bTY`f4+ zt0#1p(>8UQ;CDU_(vA&!v~xxxXH{kLH^Z7Jx~?=%4^h)kE2GPt8>Rkb80VpQNZ!ZA z>&zHVuhsXZ8xa%&`JaqfcN`1THpPNR$tw{Bl9Hcz57z*NG~caR1)X5*^=*3vTyE57 zx_gh$Qn07;Nb|Oihro}oYrfTe4e@20%{1+lQ$%u~w+{tVrN!Ww^ga9$;#3LF4@DzP zDzlm~mkcxQpMf^7~0o;g8SeRIO-lg+Svt{xVlJyD4`g#^w)0r2&{ zSvTdL?r0zFm6iH$UObN^%-ugYdg`n`_eJHPkB^keV15^U*1!s@&A1{z=bui#n+kRn zh3)AWRZiTTx%>HpeXBwI#({%7!aG6VSl0toru9QVRISoo25Li0l67q!0+we=_jbl= zB2sl5!>;i-!H=Awh+RrC!+2xlu=isW#O7aGl0|9i4%H--k!A$c1lF$Rt0}*i==gA- z)OgQbxpf1flK5INhli1(B`m!?n2V-F{zZBT9Csg=K^d<#RNQ?C4u?jr}vEeV*_G0u4X4-9Omz-$JL5N;UXF}=&5N*1OK`##_0zWm) zFfcwsZ22V%yYnJ_K_@Wex*>&7s6Zqlg>a|z1lw0@peYmL?#G4wMgl^GjRe^?z z@AjJs-7=$Bu^{>j114+dz4x)#_@Q8p@Ir}ke;#8jljf=VFRw-R$H^umSE^CB~1R#1TT;~AWQ(U0D(?k*lHf{ChilRsOW$|crB)M6qVDV!O{bPqaz(}*;cUY{ky%M;0qhZsl#2|uOGNW$7 z>ujPZj`oGhgqN|r68KAxkdW7yLUPTt_3~ZSU#tYr)Jhka?Pw<&5DEvP0Fz5915}^b zVdBHRIiER_tGpR`NuzmYDSDp1%o{9E`C>Q?Ygl21WteJ+HGaqHsSxPPX;*i5uLAUS zsTs4zw}X8A;@(KBRfI;odTr&7OrrnOg9((DqnU=-qwe#Qu);BB+DM58m5BXFNfs)B zyEm&xQ+{1D^WjD(?J#cZ`R!NO%k|C$UoD9Xc?%{4J}oZ3^?FW@V8mce=C0iJ>P6w7 zJ_mu`nkT;d8t#MFO%qrjUalabb`0-aY?DDWy{|k=`R!>xJv%BR6&!B)UL|(F2(0n9 zXYX0R3XG2EOunqzLDb$#9ZMy6lR3HSd_pkWAPiXVwYi0Ikk0er#>}3v)U7^xFj3zO zpF~feK4Gw&J+m`~f|9dz6gE32w;H9{SvG1gWVNR2fn8-Cul_Y_`F|f1pU=O zI}&DaSbifDG}{V+&zr|siuFohXYZkrRR4&$#u0x&MZp=0M(jaozb;Z}U|HWaNy^WO zR?9eWK`k&}`%&xinDf>|PItn&LoMsf-_p+;Q6@i6AVW2LIDB0A&*fm&y$qM?gh$}* zs311Q%^|tq@rAxi#*+hy-gO^R2JY@9+77;qpt#coT%)17MBeb@)P#!VOklDe4OIpD z1{jy}Ey8*kr}y;mLmk^Si%&{E-{WdygL3C=&hZ@9g((D^X$MA})k{nTT$(-I;o@0h z{_BCPA60=MsrTZerPhzY+VK48R7Rq|Z$Ha96$*TM-QKcKw}JE9f0&K!4Ipytw(WTu zvWGa$ZfX1<0Duy005vUgUotdySx*ZC>?~{FEXOv2iIhB` z61czb=~2>7of3_yZAFCKi*HN?iocp( z9{idQ)=ob#LPu;VFkYqpYQ>y~L~4eDAR{CQ*`b9fX%Gdtmq+zbzW7fGQgY_Gi>=uH zIK&=#Vapph*oWo5Hp4=vx^dMmy-dA3a}D@*`%tdAR4Zs~*#GKzxF3EXzziE}KVY%<`>*PG z4}em^k{^@>|3cq@XRYDDo-?ENi{3q;q;q`th6!H8FMfV!qR#?=E%n<+LU>UdnZJYy z77|u1rGyEcdogs%9hQ@i_Uf=3X)fF12c7Y3SiU2Au>&gi6}L=|7wo;UJ2M%a!gm|l zu~~SwIDQmct-2ceBEnpx z=!+321g!ft<~bG5vWjU}e}$xi(-09HABsrC&&yvc5X9EcWU^)>6a$DtINUZ|M)^Ny zRtU>&*T-bTAC80m%cd_JLupFQA-k@BTfvO*1zzA=h|TkphuVRE&RBJdJ8U+S#aOrI z`B+ysqT}iA-kkxFpy`##7HS>znk~UOswgfhdM^j~4MiXC8%q6@@eS42;iZ% zd{$a*GXPaC>BF7o6WR_=!5P7^;N(WR(SrI!^{e2E zl>1j*f|O!P7QZHb9lzp)0`M&vC@I0T^vt+-`ixKKtx5&$+WS-Vi2a0Sv?9}Fgga>P znH0DG)qU{7ez`s6#*_J}eH!`e!C7;^6Xi3TL42Hcy@Y`au_I^msrpaxKzq)dZ300o zW*&os(16xZG@>tKB3vwW=P_9c2w@jQASBQEtrd8@cYctvre$r|u}i7+*~no{%Q*qh z#tZQ2j+op64Y8M#o`+$^3&@S(rsfd0U)@eb%o$BEt}3t05A+^pD1`U6`=8w4u|}xC zfC@wwQc!^kMDj*W3(CWF?m@~l+Q%`fr#=_DAP;j&g3ktbQHGnDGn;plJ<~?hd9}l> zWFo6ZD)gnCGsqIT81%fl4M@%sT}c@>Sjc4UtN*sF=-x!4>T9}DwN?rUY){-sF^w1L zVWriEn88AFbfyoLA{JTQF``^4TvUQx^k8thV!v5!pSXjVIqj0T za?zTaN3dlcOx8zmMros>ArTm}Yp=(H(z$z(~` z4$&lbx6^T+oN04 zLQ}zm+_xQ=NIcP3Z@z2Sz!VVXYMr>|Lo0BtTkJ;(eifZO`%_gkC~xw7Sajwth>O)- z`N6k+lDJFKPw_*kK;r9mKskQQn`%1D*_+9V-VBArpb%kOas344qmECIa;JHhn&G}A z4>w|F!JQ9yhH{1$sfQJ^LR-5sa$_U%IwW0&X|-Lm#rqszMDdO%08};UcyCnsMpGH2uXJ zDR&n833|`P0@EiuIu@cNby^hPHxQ?kNBA>1y!(y8Z$(xUokn?Y?mjjF@1!@i+*WG^ z%HbvYl#uFTCd*m%@yb!bwxE!C;I&^m4oY&JpCSY%>lxB~4>gJKY`u#}lk{x?QZ0h2 z#L7d*EHFF&I^`Um)IiURgN>epjkkEo>?DDr_LQCoaC3bsc=)O5(wV}w&q&0gWdE!N& z!i*V|m)lo`u=-Yfmh$OYhP*N=&4_A?AP-O0oNpNo9--n}KtW%7M@-LDf)-kzx38ud zY&~NUNwuI`Lct5{ND{~z73_0r>rHT^aP@^bVSXT?Q~%^BsZ5aV=uO>;t~fR_3QtM} z2$1*-kT7z%$Rc-!X4(iZ6XFqv5MCU_BX0Ai>QHW92@X;Y8suTbIH zz^J4ca~tUM2^IE_607!x8p@>1Y9{Ms$jziFAIZ%}k(fp9r6#cUkmn(aSscb>?Y?or z7F)C&1WY$tljoWV-tTWZO8H@6fvs;1If+^z6lsV;eCeJgLHW9Ntq(UmykE5D z=n<4u8ZFd!q>52l1S)GqO(&;CZYLYT!?@ecmG%(;@XE2+04e&KT=kB##4VHoW$A@}Wl?TLS)Pq|iXTm2IR>A0<2PC=4-qr;dq$OIO6`TU2C_5-~QpF_H4@-j*Qc`qC#?PH8wkPZMUV zbhN`&xXC_{TevsnPAagksJG7-KL9oqt z=CExi>@V*GTc?S9TJvo$=xzy)#R|7tb8MkHu@HRfIRVCm1#65jyybZYa}o@ zss0s-SKAK&S>Gjkr^|zh`M%dR-g@5#YbTw$j$L|Vrah1<7dyHDY@363e~>s2wv2BL zP-ssEF{&Z;`VW#pUO+2+t0cj&=7dqyg@!UxN`Oj)P$?QJ5wv;!}b2%mQ{VxSCeO#>z%b(zFsUUj3`Lx{7OtAE0>V(t@VMLFE^P**KH^I!OuD7v< z?`GPsHq4CwTnI+%*{HF$6ad?geLw8iW1v*x?7lPQJHh@HX&qGSFG?g^f7wtJ;=_(O zMFE!^GZcpS3x<%?&WF4B#O;Efx^?c`$8WuJ2m3?xLR<3slk7!VSbCC%n9}52xQm{Y z#Ncf2TKB%@%W?25BUcNXFUx~;Spf)VG3f)VNs!HcQ5-XXM7h(-v}7C`1QRp7v2chDqo&g^RgXO*wTBLEZNsfo=s4XB;4(7Yj2;c0T0Gr zT#Lo-wo_(Wlsas=YZR3W;8k>=Ipc(hH_{{1B{x)&Q1#b7LwTos`seG>i_appX(gLC zHQp`>O+#g7iMiJYc+9p+rsm7myhz5h<0!8*+FjoR8>xq#I(5awGV&>Q{^p*YYY%{4 zh1Cx&4Wfv^lhL7?WmiFR^>;eu&D&%-vg0HkJnxZ~ctmK$vhUXOi{#5Oya!yqSs5G zj>E_E9oK@2S4?xx>!7jXX`jj3<}SKfa)Fu*x(BXO&)Psq+^ch&WiC zQcZ{_H0Aw2Pv%|%;*aQesYEPIlUJfiAGe5_s&fii47BL(HGpfG03rlJ5TZjNi0;a< zdK83W`bhDnQq#7zrIc5%(}R?!@s(6+6Q^XJMP6z0PaSoEV|!NQf(pkp3_Pdt<)?p7 z1&cGqQqP6&B%BWFcPQVf1PQwjeWGA<@R8y)nyiBNdqI&q8|l4-dW1jHn+f%Z-BLE~ zlpx>Z#yan9!XB8zFFvQ+FrS-+f(zy4M-g!H7@Z+VpQZZVABBpA$WcFDtm)a06i%8U zOO4On3#!^x1H#`XgO__UR&G3>N<^84zw6&u0#Y_8Q&*W-dxjjjACMh?)L@4}A^7k? z>n-Q`C-a-XHp5w`b3eR}*uGy**_S^lFif^?%kRb=H#`}hcYF`5Qn7u?i>sgRGSasQ zxzopIu9G|`=-F6srYkpt<;*)X{ssyq$Ku$T^&gIw6rpmJ#p3<76-ZcuW2W_Rou)@3 z@uMeGt++Lt5Q)||^pYtc;)3>>QvniFJZ5P-?E@U={y;!1*&&iyp`d zR^sjIxfXfi+&Sb}zs1KxK5_yW%r#rESuMAd-5Pb2sC=k5p_Y3Htl{%-Q%06$$Xfo` za1$Bnv9zx!c!K6A9PD zfwMy7H4ESq_s$$S;QSK@n^5H%j zh(8efq8|BBZ#fI3WQ`9iLFLNQ8PmU?r<_-$J$?FGW*0)qv5-<;qV%wRk5JL#EVvHjt@#q4=iQz4CC=#P^ z=KdT%%`#j#MeMT(etkXKA+!qNSufVYYZ zkH{;P{5pw8HI~LBE{(6g*jDhpfGL-bfg@|~-2vkcDD0kiaBNAZ%ZRj55@pB=xzZc9 z!VBLQPq&{auT4S-nx)IPB&2D)xgpb)L+Vjq5F2s?GMr3&t?{o&kYgqUnO z>c;?l1>SZvNNJx%tu6E9(%EGQC$U85&`4?nbZ_O{Z;f|%AT=7zW#++I`&D9u_DW`i z=)-Nd%`rLU`jUC6T5>ff%aM4kMVZ=@GSVG0?MHT#-Fh*kHioYiP`gHB#T8Vx&lUKpJncOKls>`&p?mu zt^DkzI`eIq!jHr1dGd7;TLg*0*5}J9_wj5Wr8)JvS0W4F`8m@Df~mY+j-)McpDx^{ zF0uTO8W?Vyeht}*v3!?*@+Y+yjtyS2{D*J~Dkxpu7I8rdzlH!yEzK^EeU0Uws8hbe z-&Rv|8k<##AWC`Tef39Du1K8{1WQb?FBxqTj@U+)-idPiDOa}ld8}VQqX9uymELvh z4hWOKh{}bQN}dVBD4bFfr@%6Up$n!Z)gl}kE&WK-Neai?E8=2oj&SN>mQJ5LJ^A&F zT7<(ay|nT<{HV_IbdYkQC4H2;?b-W-L!oqdw@w0u!%^MUTojpz^vDlY%9`AU6@(5N zR9ajKZ^5>UZ3g2DgpSi_9z7vAr=A#89J|tVEY|hJgSrLh+(f2? z5yG++=VS|Ybs1A2r|itryP@eSKXMh~`trO(-sK8n)ZXX9H#sMF7uiU*xRHikes)VZ z++#`{+g-3O4>N3BA-SlPeA;%<{>rx-LL;=5(;FUB+c6X6!dp1; zd@0fRm`NSZKbCIi^b4Te3 zmowi|{ZGfJ=K!0<*|Kv}E(q;e6}QYW|7LVYST4gpT=k;d_9+cgzRX|$VTYs(yBfik z^P<)>%Bi4Nl?f&e=@#~yIBj3VrqNV(8=rv5Ybib1Y1=4-rDckaeKGB*a5|;Y_8Mm0 z7If25_GNQ!juGy;Vk{%=cB-`A7P=i%x=XbK3)ME)R)}Rr?HL@tmV1K^8|RI!NAP|8 z#4+~9l-K*qgOn02=iGHt&i*CzI?IqHdVdve!|E+lr2H+26%8o(s#34(^Qf;6xwAIK zMp)eyj@Ww3eE}<9tT-$5Hm7vk*(7+2+FU8v20OpsbEYUB-Y(n>F|0!zNsmRc2VQY(`gqGZ>sPOSVb4;Z#bQM38b!$)@MoqeDBcqF~8c z=-kB9l#?T>e$sgAAcTom%PEIitcs1lB`q(U=WRGn8wV9v zE!H$=ZvE2GW-|{7I-Ae4{Q~!FLBpn+ei3a#$z0F>bl~wc!u~ocujYk4keEdw_6{=) z{?T255DF|(%{1bc?-Yh`yyR%DZ#kyrXr>)XXJ5yJec#Bk)b?(|xK+Z*QnM7#S)NUG zic436loyv4E_g9q{kd?xUu3x;YwkVrI+^_D=9(Gx;`7V;+?`Jsff3CGV2t@-c&;lQ(o_s7eToqO@rFAerK? ze);Ep6E?k3*}I!2c|UrDOOB=0K_k@x$|rsu+4Q_6M-nxTh6#OI&&O|!WMCyWw`_hch2%}W^W7*5Ki>WQkKX4EOv)59GWHP#f*1UwhuOt7gP`p2+{6AG$LWHas|~* zv>Sc2=Rf8=JEAF!#f)!wFlN3wL%7D9@gfc^pfSIk?@3GdJZu2I6P7*WmgN!3 z6CbFksyBkV&1)Z29N!1Zx6u43>yMh`lv|6Lug=8vjS@oFn_KyphEQ!L#EFAAK#21h z;t;2^be>WUdN=!Uw=P^hqWzmNL`};@pZRg;E(#swmY(C!JVY5?*+QOj%$0As*%`G? z8BDQczcIChaV>ee?V~L2f+th`Q(s>?L2T^wo|&D}2qK+4C!OfX0V1Wf)B_B6{#!Yp zMX6}sv?V__8S!jj3bja@; z80x!j-S@mVvw(ONw0(Z6L=)gh%l~LBI}BVmUZTFAJ0BOb@9_%ZNvWV@-08!6Bx8j! z9JVOVe@DGp(QPs3RuvgFs7{EDO^Buv-_+*AJ+E=*xOO%?P z>4bMKuk>k2SiyQQ;oyPr(dApr5_U)wW_j2TdVYLf^-h*@4hG^ z$UWmh@u((nT~BiTLCfQyT*Pk-)s%bM<&@`_y{m3lDo++VJ=MzBe<}Qs$+DfiS=)`2 zOQABs+ke}e@?HLc4>vpO%IK?=XbO!f?PcTmh<_@{SBU1*CC`u>tv@^QB35JYu|2*eR$H$)`Drs%X&Va#~s z!|lBN{oSpx$Zh5op2ql^h1&;ESem8$Bby>m2oB2HF&m~IjEn%!41JXLM;e*kIC5hA zY$w~n76|Fer7oGVGaU@I&Z`PumT7$Auy)7ejDTif{5EQfWbPR-_7`@^&77;gT6zo7 zfI4W7Hvf)&$CbD`VK-3WnV(kBry{A8S+$p*-UzxO9yo^Z%pe}oQn!gtMH1ghM$$Ca zJ-6{L(W2O@=3ScyUgB3gzO^(Hj0cGtIWHL(;Pf% zCk=-3CNl#j^2r!QBC59$EV?}2TIy06k-frjS>yd?@X6#zkw{Yk=t_U&K_NaurhB1j z;x#f|4^0E@gABNfeT)#7Lqu>0A%2I5gvE`cr>TId9{X@*8XjDKtlLPu-H`hA*!@$$ zZrZ*bDo!oLMc#xvfp{*_^1%XbOK&|HDc)z^yZZ@-`5iOU7GF*@PH6(mGbg1SZL1(w zF6r4)F}nqbnt_!UW)*?iB^)imCQTc`H$!;B7Qq)nc(A$FjJky7HX}eU2nd9LUrZ@L zB0k3!KD-S)_2DM<-_eqfX(ZG~CAF>iSqQ|8@`k;-*h1|0uf3wBdXz}@sGx4AF~)Pj z0dmz#?ZmQu)`PiUV-`q#hrvBoB(af^*#vG8%gPo!xj@94HE}#Iw}9-#J<&>4=YVUN zjk+NB+Cqcc&>%4k8O(tO!Djzk)VsUSa|Wjdf`J$WmIc9xnA|JwRN5_G_;9^M^v3A5 zG!oZjMS^rxih=Y(1&{S6_lP=m+q5MLCkR5D{K9~=%>8!9e%}L+wZP+7qw=PPP_xS- zy`>MvPZ*4)iDmH-v#T=0dS6IzeEhQ(kLx0cQ|peqUNpZ4vcV&}3WH+M{j-BQG-~@I zvlY-RA&JahhGs!%$z1B6to6KLaArd=Z~}p)LomXZsWyv>BkYwA_gILVAJ3qP&`K*T zzWJOFN~d$ZZy&iwJPbH`o>zXF(3Rx&3F5#uzh-bWIuDGlPnRy9f9vybwa1o&F+8Y~ zo=ZK59=05=Iindop7q0+cwI#l9S_KTef%D9hznfVlUf2K0$x)~oAz;J)f8GK%8=EM z&?;z|CWR@um~r1Dz#a$)&Lcn<2uM7Cq68P{Q{6t?8_rpyCTwXUHkNdmzKSacS~c&? z->bF~_c#d&?djyZO26|#DwMJwCM)vOgrb^LJYtC%_kiziIrFN((m;yI>}7C1a<6W`RBr_#QT~1VzVg9jPm^<0quxZO)RTiNjYXSa`MV&pPRvbzGFDM=`yiT-bbrycPohI zmTPbDCdIEjo!LSsOuTyX&<2oU03hzQaUVkAT)@}4EbCK%P{ z!<5^ON8nK)29bDWbm0fwbV$kzO9B|1LI?c3jSj+ivrU75P4GU}IAjyZoqH7wg> zi}_#}&ehfM`%cpbK0Za{Y*gYWW|efMniw0`?H)mI17pv;eV|oQ4qm*vPVJVZk-h!U z9wCP8J%;u`NZv2%V8#^!@*yA)0_sCRLMoD3j?v#$aJ$B}WNXDW6UOqIA2gb(z?y;) zsawO^2;)sQPW4NQiD~K8E|aZmbI%rx0?;dvch`wDe?<^ zGi{?Owrh{H03G8g59*4p5W2rk60Gnx@OaJAaxr!#$gX}$9e248kYygUOsq$i$3x4Y zH_9RVPrxw{5C{P~As}HNI4q3nQ~N&naI21Y$pjQn(_A*K%4El&m#LOv2==`*}>;+;7s9e z$Jn(Oz=(V0+XZUc7lz^!lM#MB#0Qt`8Zl!_GwwYE_;VHo2$mqg0tiTK4$d^CoNoN& z!(BRa!Z)T-3sFMb`E{CjHQ4uR9H?@=PuRtCzw|CICGJ^VolQC2`C0gm5@S9wX5#fD zH70}kzrBBv0o8%seLZi!oO=&6DKD=ZnRJcNHGXNzUU(nu`tVfcS^Y)Om1D4*5?qeV zmO`@xj?7MnW`T6$4tQ-TL~MhIKo24Ag^0xMVZI?$FmhjgxZQ2-_vI5>i0h~IcGxOk z0oHbr9!_=liAOqT#P2;RBT5{*sgFdsYPN4%*2u30aKpjmxkkC}HvVpm0%G!Ljh{ba zDPPG?a>Zm$b|u}o57u9nvn^Gs0xsL;notqELAENOEy4oXx(jWARpLv?x3sU;oR`nC z9ImXX0TKvl6GS3j?Tk{UJfA*5{93{v=9}|?{%WIu964yQ-1Zcfr-r7TX!B_8hb)~feH)Y;aZ_ipnWQ?Kw7n^qQ-b3f~smoPB zVWE2lB^Zqi@Sy?XJ2DUg4FK0BU8L|D4e)w=7XiaSz zL$1UMhCQCd*lXa&Q`fKa&a@LNKP!I;y-`UNj!g>|d|!&~{pre0h}*59;MNN8oD-fS zr_>SYMYrsi7PJHJxVgInLN0+NoP0;hS0SnrL?wi%!4MV1ibYCOf?E(`E<^;GLlKF? zcR3DtR)E?e{H6?@5id)RmlcVZ6^)k_i=weWtHM(mE&bqie**l-ShxlzFSpA)VRM3SI|-AU`8A! ze?hnE)`M7%oGM;0k{yWE%QEnS{d5K%n8fbGEqmxpdN5|k(7`(o(8p3`{5YU%Le3hB zV=E(yIDxwqHSq#>RR(U`Lub&}3)tzs5@T`ZLR5#ZpD3e%w>^{&!2@@(Rq@VG3eJ=; z9ymZ};+-$VnEWrh*vg7Bk8IVbZoYP7lslf{FJ+3)%4IWHcBuLoqKjD8QFw2UswaLm zmu)n&uZ2x%eS8e5xClhaU_eS|K^nq=^vftnoyS3X+zQgkV?Y9Km&`EW2OVOMFp?=m zxSi&6vT&^x3{%dtdT4=#I2#bX$-A0_r_7;yvKBNziBXM^Mp|}A;<-oZ`m9vMd36_Z z8hY#&;0;bpBb>O-mSFmlA+#eA?zWZ~T+4&*DLokpFQ^E{?G7=F(wo^Fnf<7;>wr`@ z-eo`{FmJOZR2P#7BIKXeP0)Zp`FF{#$!>VcJo*xrA9AR@8FDv!w_L^>OholL#}VfR zqKA=0x-vcvvty~_njUNxKJEgWfqS*Emq^cPf(TCcy71T{aRa>I4qHZkDQPVoaTKoH z#T%B&c}f3771<*`;&zy%5nfPAqBykCS<(xT6_&I(ZWqHa!sTz1EU8xZWc(MM9V+95 zQhR0P#9g?Sv*;rH@C)`j*7$qScnNB2&A31Z*fyIHhmAPVi1wHqU4*+VrF(KdA&KfX zh@sN~sbRV5462P3&0Aqj5|U_djKRAq6^-zV*VzpD6&&J>FgipQC-lQmUA6k0z2vYXWTX=uBngM4zVl=ly1|JDr zS)rbU=PqFDOUEFIw(&Rdl=V!M{~*%28pL@UBZ_xft9Z$bMWN5x#jY|9a9Y54MJDHW=V64AaFzucvJg&FhwRDv4=Qh_Ob|5{WRkCAexV)vNmVoml#ri2DgqhQt7>R>>t6+ z?}V5sOSi6q!9|cl2T*O!|cEanQ zu*Fz^M!12*9TR`*Ax`&VFTtH<#dtE#sP~^eerEtL>|}f36{2cuS!Pe5Pc?Kn<;}mp zdp8_DTM$vf6jHA$#SIz zd9N{B#TKuhM<30Se-6DGcnzuk#P+9fzH>#K$1fn~3X=FV&BlWoVKTdrMBEWyFRJC3 z(IkEos#Oej9iV1snTZHNQvSpa=(AY9DoX}K)eh_1BY*p>8cSmQ*=k$J@)NaTr~epU zGhRZM^p5Sq3uV<{H{_(C+ImEHA%~e`-^LD|pcz|9Opj*Sq(8c$KKO z+ym9$ktVk?(d=0M@;-Jn9oKYXG2tFaQ<)uz+b$DjVD$_Jo;*b)rsO@lQ=Hm9X+9BS zK&g6PrZd_z#Vcvz%-0gW{LXLeUNO8gg>6N3PQ?f`Wcq1v7>Zt1z*Bl9QF~uR+#iUR zBdL-swcqW{6viM*#^B_XulPrkFZ~765*#);AJ5&w8m}r879)jEA#T&CNOD_4?lNRp z$iS2BcGY<7a8V+@2lPYN8w#_B$g;Lhe5ZJPykNG z1_CEg!@41EI->KCl+whE?!jRoFGLo6y>Vko6|UeYZHH6KFF)vklF$&#{D z#i8wl^oO`Y5ILouMit{bC;e_#-*IAW88Kuy;(#ML(U1c~*rf6#&YuH>NtOo=YXu8d zmUTGOQf#!$H>CT7H$?+(%;rg{g|b>vQ(absUbv2axf8A|I+CzvG~(<)bP{u-CR|yL zA&GElC>bCJsVNiEOHb{O!A5?LB(0I8jrC2u@IA|Du!Ad*4jW2AwRFy2C8~oKF>v@kkb<|Ja=y|`@JkPavKOySQwk08s}lrF!a@~pTTb%37X&tTcTJhwb z*mez_spx>D4j?K2ao=&R)$HFROPlm~7ZQ?tIu)hkBdS??rPX;b9bG>q+0ru+P^_ma zerf!$-$QFO3G`=^k0Hz28!oUcV&_#z}!=$mE%NBCt_ z)7A75Pcf7d%;WuRavoX1N<@rI4V+0spj({XGAeyNWBJI&)roIiWqc(R;!{7LiB z9;bu%1+aNC*OB{1yEc7*-A;R?+B(HEsJoS+8!1-Zjyal;7I*%tffM;D#8F0^=74bAuL2#sIPVd6)JUk;p#kX{`IV-)OOS{; z-Z4ttRXPc=iA`5=g%+9LebtDJwE;18s;#Qr;PPxnDmDuv z^)|E<}=}cQ$vR4SMxTYe>vq)0nsy>-|!5!01#Hm1ZJ(BpOo$rVjj$!YR)*cPfrqA-g z71YIlx1}W+;|j!dW3xNpG<+A;Tz@}rHPx6neXN?gj4r~x$T_xdNaiMxD1SDkHCg71 z&$tAea-@u0C`(5Ndawz_S1rHYcgT`Ak<IVRd|22>d@t2(qHZXvV67IU^ra%J|NZUD8sU$D{%!$`QJIQCB?0Ep}TYAXDY*- z{Lsq+EksP4;^qsR18V<4lKqMZZhEQ$lz{v3W@xE#X`KlS{`k6&LX|L6~q}{T<`IaVQT`ZtQn;D%^_X3Fd!3-nJgqJfg}qh3ds`(IcC(KB95XF z)TuXybWi#W-0!Un2haH^u0~CSG8>V|*LaDjA&cd7GS~&rMP2u z4RK`_sdEhpsl_LLg0751;x6l-;9VUGa1yL)m0`=oBhG2tunuY{3)^$fU(Ps_WxjF_ z9u~w{%9@E1or@CvE<31dh#M}XG=_w1zg?kjN<5_oP|Y-Nyy^%YZlQBtGuSe75zhR0 zY}F7i=KbZxd_h@y8Q!I&f<_M80%ih3oy1YeW)y5$U&P5q)DuZ?4%p!hyUA-G!HxUi z$XP%lpR&`z`;|n|IZ%QJk#}o`)ek-2yOOfA5x2&Q>cIDI|2$rYq@@GP*13`N?bE?Ce9ZQrElTJ8)SaZwO)Va)0-?06wbxz&!vCgONT1n zL!KL;v}_(2Ew~H(J^A~PdLt)6e{Rd#_rQUafNIu#Xuyqi>ChpqF~it04-u!b#$fD_ zF6>7F{W+=^ljXR|?|6!(!Z>(~oQZtk)kNmNiSeVI+B%u_s7-%io#c!nc$;akR|}{1 zq@e>Wwpe}Y_jW-`+KQ-<9r~!6A|4tcD#7ARhE6}832A#H>k!^NS?xB|JS)n^i79IC zVu^Vo+IZJ&HT9V-c2JT*F1=zjOIpwrR3<$YZsdip7Q(XN)#8UEl$$#pQVG9h*7%mG zY8w=UQiA6yDt27fLCr(-m#;pa+aSX++lqW-a0M1MX_d(00HUQ15b+wa;C`=j%HV!~ zuzxKh(O-x2(aQ;ScjG@5Dn6c+ojA0A1(L!i5LbTlTllOr9NEcQrHJP?O9)mvyJ_SG zXF00(nLJT^NMo)bQT`mQE6K9u9u>TBH2Hv{iM(C$)H!`{XHaOuU`t0JPQ#}p+&Ew9 z_ug0Vp7dwu2qw!nWH0O)9R1dVw-SPfohj2$rgJ{hV23<~YBWzLAor|6*do3 z@z4ASUWLrpJ;yJZD^j!S2+2RjW6A7@ei=?db>MMpCdUD|D!^Wjqnb z_qgZPA%KF1ls^GCk>wHNn;c*pHP2Slar%1%O`ip$6kLW1$3pyHFbQP2%^AwsE{1gE zhugTzVyXWQkbMa79-^sppu!;paNaTZhp+{HuW5q!8@(S@xJv;Yt!ZF3)O+4}wtQ&% z1#deEh`Uwy0Pd1Vp5@-43i|{4xYh;~ULa zTQ5W3%Fp*zD-!+BaM*)dOE?^Eqq1-~d;<=mD zR5(Hh6gNT~p`Mb%&cSZQ(-#)sP8g~~#Vt8<>@{bf5oL+!^fmM|M+%Td3; z$$RB-mlbq%+~TwvQ@=NBD6YZ5p}q-TWCTAkaU1;7Ik7*J#LZEA^WP*n92p82kIF(v zm(^e2{FkFq$J9FMWRkq||435(v7wF}IZRCcORqLxEkRUUnAO6QLlp$QS@63aA&zSm z!Pk4#D*30?Un3e=%3TZfhHa{RL#)ueMvzm8*XI(Ml%Yhw8B+ zzAgPrPw%JNI$6OGkXHX=2uQ)S3LSsxS(ZGg$Nwd*zDE2%IfVB87d1g`qxF^ z#*yUv6dcEbEIu5ro+rjxV*(Y|%tmwtr2AhD{KDyt-N0 z=BjZ7pP1oyX48k^dzk7HD#B@U+8G$PV7b}!^f}(8N*>f>Ql(h9?M*cXzVxIlOZ3j; zm3V)p7{EhS)!n15)u7QxMEQt*MATFr^1~24i)b&R`W(n#j_5H&pCPI}0`mP3%|`Sg zq|r3>kx*bEqBx?>h$?D8z6+vz5WR({v?kM2)o}KLpX!h;}2Y%Z2=9h#o=o38Gq~A>RklECD6$)7nu5dkhqCLo^N1 zMnn~KAb$>`yAZvBsN`74cSJNE(P~8Lx{wbLjUuVQKCJ>(d_|O}2L;z6dJfTkM91qx zeh{K35q*WIjsfH^MKll5E<`m9A>YeTow83mfGXM$RT&2b79fft+JLD1c*viH=nh2d z5S1{3{Hcg;Mf4J)zYw)CHim*55iLXXGot2bh=K>Z&d!-OWv&R#6bmy`9xEzCqYEya z1$!OxzM9666dYxS!SdDIUuOS=|7GJ}-}pCD{!In{CdPlu#J@$8e0u!9U@9QDD`{pI zR{ifbC;x>1+}HiT$p)Pi-kjNV>3@~yf5Lz6pZ{g!UpD?vXRH5P`UbhL?>V~u=l^bW z{}cW_i&Dp9!}5eh|C`kP6aMpJ;s2M}(ELALvk0?+_uG;0`s6JsOI3LDDR@{bN4GZH zd%eHl@|o&h(bg95o+lDfKB6BHHRVBm7@}tp?L}1I67rWLdJNHLh-zCwz8|95h(3gr zyyct#1r{QTBif9pqBZ2ZAi4+9TZl?eg#77W9~mJ?NcMU>|N1=k{a4$*!@$2&rP5TYj$ zeTAsbG{|3yXda?nh-yrSe6Q)kTTWEbhN#L6D6jxg4ABNe<((jZ7NR>4twU5|Cge{= zbSt8l5dDRy%`D+9=PamDhUjNR&1b`U9Xa)w|IO4)Zg2nZIM4iZ$<6qzS*EjyZyU^2V^v3~TV*hsm{uBOl3-SLZ8+7tlexPgh|I^<6g)|k# zaRB$;-AIYlm^Rm06B`j)5Hr@FhbV)Pf{Ol_t+LH(+QNz+L8arWh}QBJ$>u!>gLW9chO8Z#VM!S5yhjCz1aTKXgE(f3w`QrnM~5D zHof;Dxw)|X=P4weTPVvp29xkRT(XtwN8wHQ6)xOH^*Fo+Kfyo^)$8FUm?o{Hb31hi zLkWkWyO!#kVFw(7Gj>pY9XtacLsyvURq!NyV5^c&G_2T39b4dC_zebkQT+(K0l&cV z-BfRcSK$X(R!8*+>{i-ICmOtas6#F6f-m8$2-P>ib8rymMX6p5Ps0JI)l+>HJYh*m zCmMdhWqYY(GrR-G;NpE$KLoGC&v3zhs>fgtd=E=wRIiI=l1?NrdxDiZV|a;*?n<*+X*dqVbeTT3N7N5uSTF6$r|S(O$=dZ