From c0e7b96d1da36c17810fae82d53cdebe39d65d3b Mon Sep 17 00:00:00 2001 From: lemoer Date: Thu, 14 Jun 2018 00:01:56 +0200 Subject: [PATCH] docs: add documentation about multidomain support (#1365) --- docs/features/multidomain.rst | 272 ++++++++++++++++++ docs/features/multidomain_configmode.gif | Bin 0 -> 58507 bytes docs/index.rst | 1 + .../domains/alpha_centauri.conf | 61 ++++ docs/multidomain-site-example/i18n | 1 + docs/multidomain-site-example/modules | 1 + docs/multidomain-site-example/site.conf | 52 ++++ docs/multidomain-site-example/site.mk | 60 ++++ 8 files changed, 448 insertions(+) create mode 100644 docs/features/multidomain.rst create mode 100644 docs/features/multidomain_configmode.gif create mode 100644 docs/multidomain-site-example/domains/alpha_centauri.conf create mode 120000 docs/multidomain-site-example/i18n create mode 120000 docs/multidomain-site-example/modules create mode 100644 docs/multidomain-site-example/site.conf create mode 100644 docs/multidomain-site-example/site.mk diff --git a/docs/features/multidomain.rst b/docs/features/multidomain.rst new file mode 100644 index 00000000..7fa55a3f --- /dev/null +++ b/docs/features/multidomain.rst @@ -0,0 +1,272 @@ +Multidomain Support +=================== + +Preamble +-------- + +There comes a time when a mesh network grows past sensible boundaries. +As broadcast traffic grows, mesh networks experience scaling issues and +using them becomes very unpleasant. An approach to solve this follows +the well-known “divide and conquer” paradigm and splits a large network +into multiple smaller networks. These smaller networks start with a +dedicated layer 2 network each, which are interconnected via their +gateways by layer 3 routing. Gluon is already field-tested handling a +single domain and the multidomain feature allows for the reconfiguration +of key parameters that decide which domain a node participates in, +without the need of a distinct set of firmware images for each mesh domain. + +Overview +-------- + +Multidomain support allows to build a single firmware with multiple, +switchable domain configurations. The nomenclature is as follows: + +- ``site``: an aggregate over multiple domains +- ``domain``: mesh network with connectivity parameters that prevent + accidental bridging with other domains +- ``domain code``: unique domain identifier +- ``domain name``: pretty name for a domain code + +By default Gluon builds firmware with a single domain embedded into +``site.conf``. To use multiple domains, enable it in ``site.mk``: + +:: + + GLUON_MULTIDOMAIN=1 + +In the site repository, create the ``domains/`` directory, which will +hold your domain configurations. Each domain configuration file is named +after its primary ``domain_code``, additional domain codes and names are +supported. + +:: + + site/ + |-- site.conf + |-- site.mk + |-- i18n/ + |-- domains/ + |-- alpha_centauri.conf + |-- beta_centauri.conf + |-- gamma_centauri.conf + +The domain configuration ``alpha_centauri.conf`` could look like this. + +:: + + { + domain_names = { + alpha_centauri = 'Alpha Centauri' + }, + + -- more domain specific config follows below + } + +In this example “Alpha Centauri” is the user-visible ``domain_name`` for the +domain_code ``alpha_centauri``. Also note that the domain code +``alpha_centauri`` matches the filename ``alpha_centauri.conf``. + +Additional domain codes/names can be added to ``domain_names``, which +are treated as aliases for the their domain configuration. Aliases can +be used to offer more fine-grained and well-recognizable domain choices +to users. Having multiple aliases on a single domain is a helpful +precursor to splitting the domain into even smaller blocks. + +Furthermore you have to specify the ``default_domain`` in the ``site.conf``. +This domain is applied in following cases: + +- When the config mode is skipped. +- When a domain is removed in a new firmware release, the default_domain + will be chosen then. +- When a user selects a wrong domain code via uci. + +Please note, that this value is saved to uci, so changing the `default_domain` +value in the `site.conf` in a new firmware release only affects the actual +domain of a router, if and only if one of the above conditions matches. + + +Switching the domain +-------------------- + +**via commandline**: + +:: + + uci set gluon.core.domain="newdomaincode" + gluon-reconfigure + reboot + +**via config mode:** + +To allow switching the domain via config mode, ``config-mode-domain-select`` +has to be added to GLUON_FEATURES in the site.mk. + +|image0| + +Allowed site variables +---------------------- + +Internally the site variables are merged from the ``site.conf`` and the +selected ``domain.conf``, so the most variables are also allowed in +``site.conf`` and in ``domain.conf``. But there are some exceptions, +which do not make sense in a domain or site specific way. The following +sections give an overview over variables that are only usable in either +site or domain context. + +site.conf only variables +^^^^^^^^^^^^^^^^^^^^^^^^ + +- Used in as initial default values, when the firmware was just flashed + and/or the config mode is skipped, so they do not make sense in a + domain specific way: + + - authorized_keys + - default_domain + - poe_passthrough + - mesh_on_wan + - mesh_on_lan + - single_as_lan + - setup_mode.skip + - autoupdater.branch + - mesh_vpn.enabled + - mesh_vpn.pubkey_privacy + - mesh_vpn.bandwidth_limit + - mesh_vpn.bandwidth_limit.enabled + - mesh_vpn.bandwidth_limit.ingress + - mesh_vpn.bandwidth_limit.egress + +- Variables that influence the appearance of the config mode, + domain-independent because they are relevant before a domain was selected. + + - config_mode.geo_location.show_altitude + - config_mode.hostname.optional + - config_mode.remote_login + - config_mode.remote_login.show_password_form + - config_mode.remote_login.min_password_length + - hostname_prefix + - mesh_vpn.fastd.configurable + - roles.default + - roles.list + +- Specific to a firmware build itself: + + - site_code + - site_name + - autoupdater.branches.*.name + - autoupdater.branches.*.good_signatures + - autoupdater.branches.*.pubkeys + +- We simply do not see any reason, why these variables could be helpful + in a domain specific way: + + - mesh_vpn.fastd.syslog_level + - wifi*.ibss.supported_basic_rates + - wifi*.mesh.supported_basic_rates + - timezone + - regdom + +domain.conf only variables +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- Obviously: + + - domain_names + + - a table of domain codes to domain names + ``domain_names = { foo = 'Foo Domain', bar = 'Bar Domain', baz = 'Baz Domain' }`` + + - hide_domain + + - prevents a domain name(s) from appearing in config mode, either + boolean or array of domain codes + + - ``true``, ``false`` + - ``{ 'foo', 'bar' }`` + +- Because each domain is considered as an own layer 2 network, these + values should be different in each domain: + + - next_node.ip4 + - next_node.ip6 + - next_node.name + - prefix6 + - prefix4 + - extra_prefixes6 + +- To prevent accidential bridging of different domains, all meshing + technologies should be seperated: + + - domain_seed (wired mesh) + + - must be a random value used to derive the vxlan id for wired meshing + + - wifi*.ibss.ssid + - wifi*.ibss.bssid + - wifi*.mesh.id + - mesh_vpn.fastd.groups.*.peers.remotes + - mesh_vpn.fastd.groups.*.peers.key + - mesh_vpn.tunneldigger.brokers + +- Clients consider WiFi networks sharing the same ESSID as if they were + the same L2 network and try to reconfirm and reuse previous + addressing. If multiple neighbouring domains shared the same ESSID, + the roaming experience of clients would degrade. + + - wifi*.ap.ssid + +- Some values should be only set in legacy domains and not in new domains. + - mesh.vxlan + + - By default, this value is `true`. It should be only set to `false` + for one legacy domain, since vxlan prevents accidental wired + merges of domains. For old domains this value is still available + to keep compatibility between all nodes in one domain. + + - next_node.mac + + - For new domains, the default value should be used, since there is + no need for a special mac (or domain specific mac). For old domains + this value is still available to keep compatibility between all + nodes in one domain. + +Example config +-------------- + +site.mk +^^^^^^^ + +.. literalinclude:: ../multidomain-site-example/site.mk + :language: makefile + +site.conf +^^^^^^^^^ + +.. literalinclude:: ../multidomain-site-example/site.conf + :language: lua + +domains/alpha_centauri.conf +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. literalinclude:: ../multidomain-site-example/domains/alpha_centauri.conf + :language: lua + +i18n/en.po +^^^^^^^^^^ + +.. literalinclude:: ../multidomain-site-example/i18n/en.po + :language: po + +i18n/de.po +^^^^^^^^^^ + +.. literalinclude:: ../multidomain-site-example/i18n/de.po + :language: po + +modules +^^^^^^^ + +.. literalinclude:: ../multidomain-site-example/modules + :language: makefile + + +.. |image0| image:: multidomain_configmode.gif diff --git a/docs/features/multidomain_configmode.gif b/docs/features/multidomain_configmode.gif new file mode 100644 index 0000000000000000000000000000000000000000..494840f59f418ac1c104c53c4e0dc3edc9fb65f7 GIT binary patch literal 58507 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%0D5~` zs6ZG;fqnUclNVivA5_wVzy+PJ=5Uh!1NG?z0uspk)K`A^fPfPtNEnEd95#4n(DmC_ z2~?^9>uMI^2l}d@kF9kE5(8l11F}Gtn1GD|S;#`#GRHP+&0`7-FhB`-p_3aVzz+V9 zAO(lg4>vG?0d^<>Quq-`ulM?w{vFmq7Ci(O)8fCm6Y zgBqT#R(Yv0bOckl}Fob|I+kiJ>Re?yHLui>YpGpjpc}i5KQkARpj2IzC#x=%Lmb0W~EoI4`H_Stq zx_pT9;#j>oR82+k5JxmXKmsEh z6i7u%(v&oGXc!{kAxT+JoaR)gJLPF1r5zSN{hXkJ8Q1=<8A*)V|E*p#q@Z6?ZKLGoxy0L9Q$ znKM(aaZGN!V=#v~$35;EKdf;G1JJOPlL<|^g0vZA(Zd0UTNsp`3>GfWgw3G=gpfb8 zXFT7z%P{$}m<@gC4U<_Wycj?Z*ZgK9cLma40a1yz#V|W}CeMjzB54h$RsAXx3{2f(@? zfOr7@7mqS*1{!;YGXc>QkYJ=^znUmD!L{xBVFwxn*)V~2u|Gj< z29~4MF)@Y%TJ-I3o9+g(rggj3f^P!j}1Xnd%URhh?(Jz;b)SHg(TH%Rk? z0kAduvQ8@n60 z!F(~36oi(7@dscqfN%(re)*RbJeYxDk%G~|GO<7!3%?DlLM!wqGV>a+5gW_doAvvV zwi%tcnVZ4E8?w0^zVREt5ggem96F02B`c9@>q5*~3j>e^z;S@BpqRbGVF&3z_OS?9o3N*KD3=MDMPyPoZ9)8KO{SUpu#KcL{E&R9wRmf$~z#M zpbGlJX@QZYSfUR4pehofQWPQ*Nud>Lp;wHdX~RF)qX!0`92kNu3Nzc;ZQ)EJ}d{N})_jR3b{FY|3>+N~Mg- zFJelktja5dN~z4s-JwdW?8*$pO05h_hY?AyEX#oeOR-GLGvP|JoDF(-OSp_nxtvS7 ztV_GROT5fWz1&N_>`TA=OTY|F!5mD&EKI{ZOvJ=Xv{Xy}#sn_2OH9a&Ov#)~%B;-8 z)D6qbOwHU(&g@Lj{7lf?%*AX>(%cO03Qg2ZP1RgYy~Iq`d`;MlP1&4H+APe`EKS@j zyUIF++U!l={LR+P4d5J3;w(<%JkGtm&D_Mz(?m|^d`{1FP3W9X>a0%doXk-Cu^>Yw zEsHb~DKbiPy_mSNI+H@q_yiX)00!7M%wR;%c#-c5%jUdJ`mE2slurB1PyO7_>dZnj zLo+o4qx<8G--9#p#5q4pllX))ccF)JPzBrRGtq!g^UTWmPyEbK4((76RZX^I zG)EKAy(7@T1HJ>@odpGp2dGf*Tv4gK&<~wamk6Ee9`4fG%mmCk3~FGaV>(Hl#=x2Ox~Su)!@=Qz)GvTURXvIFK^{ks~<-WK@)Mw3TbQmpf5EoH;O=iyQcx6xxbi`x`u@ z8-FQ>DJaC{E7izh0Pu{U0my>Cla{O#JC$QOm!nXaxYH#&i?xu|Q|(nxWt)EtR77po z&MZ`CjaF&ZPxFHWw<8L;dqK9KI|x#RyZ);?2^^TdGl0J}ximF?J61k}fLSf4e_h5cEf9a<1=y%0e^6Je5x1w;3%mMh8B1FXMP98i!QRgsli zZXwyi8IhEwm$e`^_oRu>q}W5mZGnES=c7n?syDH4Gf2phUx& zIhF`S3$lwWV7Y!U1}f*&(QVT6oZ~+#fVH7^%gvDVhzG7!hVkPbjYXG)44B|1uVuZC~F)m{r)#5F-&>A-5 zLnUK2eq#?s<1~&+^o3&@b>l>!8G7IbDxiSzC{AKH1EPz|K%NJ9fPp{&On7L4MM%s- zKIBB6Og{Ewbr?=ISORz0%R<)6LpB7%ykvKP@^}%WCFi81Ur61Z8f<=2Di-agNJWR^_0)&|p1gKnmWawcX>)=Pp$<|5w9JQfFf z;DaORXXAWmYL@1M-php6W@*k$jpk@ej%dB~=)3IXPgZF~&SrOpX?T`ro3^mgHHb`s z%UQ^PQkcw>woHS*=EEFmmUifphUjp<xgNTB8C@Ug>0Iedr zk*0@neg`S2g0}<*6d-GQP>`Q~hdfA+5g3D6K4eB91CywOem)2YU=+B-YYcz}7@&ia z7=b#NW&W$q1RS6M9w3Fe9BHlQYE2mAvhpg$rU$lmYq+KdzV_=#ZtSk62f3!}53uXG z7ke+3riZdRg*CWu{LXLv-f#ZyZ~y*p01t2hA8-OMa05SZ1W#}U zUvLI*@ByDsd5{9EhRb-EgJA$~@g{HRX7A#r?zfEW2%v6AHf@0-0;*>3Er^16=;hoF z{%wx-?F$$KOxWqY_K3dz>%bmt4xjGhj!X1@>$v{q%G4*2P`27ywjhd-!*Lg0lxpa4&fZJJJm7wBh4+UZ#!0dJ58 zF<1dn;Dt)yfIa~44`76BfCUclFQ>m2T-4 zm2QwOW&HEKf6wu}-pAhWX7*ZZU!U{xyo(CAOT0VPu=b1zeIafC^J~YP{{vz*@623w zHS4d%XFT2ntG1%pJG6V-B_i1~$CQ2X{NwE!Y33W{;u{_88#f78?LpXci~FI#97=e-X%sg3o4M?eLtM!ZPnd{`tK&z4s2j_w~_Wt%w$1wTEPaxS?XN>>=+q z0R<305yhttHI&|cFcdA+4&Yd$fXY|oDS+lprsNlK#Z1uh#0H zJu6P|p(^1tf5;0xFl={4mf^CmUgZ!aEA%N&GJW2oGU+}_E={5Vs6<2#x zw{2)7UokAQT35b|68PJfbS$9AXu&-dJR8_6=dlzcU$#`AnNdpngxL^#JxWys)Y-4u z<~ZC?>xWCiI1X$C)>A4~gy8ZirO{jpvpK>Z)uovN*{H_I$>{UhUL0#pwlgK_;u(Kx!R1fMQY%FtF4(foECMJ)lt)+7!gTonN=J`>AqSV4GAMF ziJ?z1DEYu#l2sB5Ef|Q4;~p5BWVK$>#p z&{^sm=lR)79y&9BxD+<=*VLC8sJ^0u7gsw}*QkghUbQuMVaT#X5G>cWZ&s(BwaKVY zVw2MS*KmIkCR2&LNbUW(JZ~W4w6MCWyPD^mty=#LVclxOAg(M`;}D^?3GWBa5we|l zJKFFtQt^HElP}1@>}s{*6jc>{6I`Na$>$2JY*}oV7Hs2q4UX*P|GbTU)S1x<+FGJ{ z9K0LfqhRIky<=mlSa>yKSh4tbL$tEMaOpak*`Ri`S|-{r%@tnN6EcZ;>^ncmWS~CS zPrgPJp-{nfLVm2mpK0sxAFUeyE2w^l&1vh~NOfW@$>J2xyRX#kb^Jb@&>!Ebh&mhD zY^aBqS>+M8uU6#6Ng90R>&kos?w^JELnje6G+V>FJ@l(>oZ(%^pY3e?OD<9WV7$DQB!x&oh00Ij}E1ERiLEW#F9k7KrTb{s5UIhI714F(r(2VJDB}=dT3PJ z=|gB9-DV!MeaVdvc&uE1AUZnp7#x+duJZV_=<0{qp{`7Hrsl{vWhJs%NW83SIv)rX zSNcg4lHy*!cyEQ*Tfh(I{I1`Att^0 zfNB#)cH<+J)AzW6eCx_MX)v60*FiMG#!^e3ss!12`eaRx7@|Ez(d8_Bn~Bm4Au&AS z@u5>@U-l&`dGaYKy}DSYqcw{rky>b7a-{#zC;S_wY&p7jLdkj7V_b(C6*dhTlnnHk zpABBdwu|t3R>8<3^wAh{mc%+rp_ud_V9M$zWKvgoc*<7W|0GbJbW&~iXkxi-D#K2D zh9X`$?H6h@5}?2+hu|4oA=)c=+^~~g$a?i=mllR236^8T&`R)6qh(uSmPXflU9**1 z!C6+J<8D4v)U;R#AZCI8V&SA|vZ_#4|D=Tc1VDR+mof;xRg4XP?G0_MaH|PnngC+j zX?eYL4zZGcR*C$4l|Zvu1Sj-%!{m7xWyg4l>{~ZRVmrPuVF1QnTp&z*re7Z~Huv=lJG#&Wewv zu*PNSfPMcq zCPs{ewcjKuGP%Nlf39X!f8%lceKW=bC9a@%6muh;#{KF$y$1n>=EFvfO=JHGuv0s` zD)w}LTPbK zN`c34H+hFz{EFQ~367M<6Hh${Y-hhCh~!ig5h(H0pQqwpDlpb*&J`axCDJp z-9liC=a6ukx+G3+?127>^e@Paq zJ*T!g*A}aH05Y&VDk@WK8+@}RTR*Ev#YKerzGqwRB*r_o9J|qr?EAO%bG$skyYe^f zVyN|clY%;KlRy`ERHvzM_jl@6-FD=qm*GO%*7}CkNTfBVejDg z#rie$IBo_*>`!j-C)7Jzv@&-TbkoJ=-?ujrMM5zg8nnjNl=4v0>vv;3NWPd~@ z=gkmY_~7*Xa&`DbV(k_uxv~FC?AN3C7Io%n2^a+eC76kGz7a-#f2e3C=51D&QHmgZ z&PQpVWuLYv*3{gvWc-IW+>Yb)o~K)8CQ4|W@rz2m)!{CySwN&7%@>z$tR+n!imECO zi}D@G-^iDKJ-6rgU%^rrVTrek>^irY`Lf$+zoVsOOr0DAg0K%7hQ)3gaia7KD888v z(y`SiMnhy*5n~VA^k%fiA^8+zIK2)0UvQeW4~Z8=P)B9q*bbWAHwo?UcMPTd$F+0s z4jTT_u`K#ENKa54j+& zKS@7Ja0i~&Iu~1Y{3DBt0WYU=KF-XTT^(cvA12O4OVxk{HPKpz;SeITVMKQR-#N2o z>Orx;W`~T%<8wdzU%$Kte^49_(rwa2vY0==9=l+Lg7n6ajv@a9At+yDfFx!Rp3TAJ zO5I4ZkR;XqIYa z*KKlff}pL#@MXhIiiVg%({(vq-Q><)+P>xF^j3!n#Zv%lFtPQF=iKY`g4pyXQAj40+r{&cO$RzfJhgj6;q^pwcL=o?=vQQgQ= zt%luZ@9Y~YapHWEM%yKgqT=hy=2NkfMdb5~S<9)sZ2FM}jnJ+IztfRfF%ejE`tL-} z7LUFy74)_mE8C75qlq+s)AnvtX@C~KY{jun|8jLVG7LOWe1y#)nUk+US1RL7DXX=s ziJ+7t*n3U4$EWpa;I_ZXh7z;92zi}e*?WgZ2=dHm%yNVHM95?Ubf$W?pu72I*1$+P zz`7xxQLLgjh9bjgpkZ_B#i;0Rf?~NxVZXOuTr6%&cTE1BjtUCTv1z_!Jb2y{0`29X z+i0=v*OKp9itSsKn=!udGRfjAjG6Og7-yL1LBu z3Ft;G72@hF-n5lrO#ef4OYI2wSn`}IjV=y?OYCDQ4%|RnAzhV*ME2fm*wr6d7OfAp zL+v6)cvG$aj})ZV7^fygUYvdCXXz$eh+`#Eb5ip!32&d0Jcsx+u_(3C(Fa2985NERCE$^j_^Tkd6rj3Xz?UqES#(+ zgylkp(G>=KU8J+IgdyWae61sr zet80igUVZuQJD~{XZA_G)8X}#K@#N79z3)(na+zPt_y7)hA^brektXUFiVXo?;7#S z)9#-f{rfd-WSsMC2+n2%%6}p(Y&L|pW`M6|Fe9#K-f^03=s#aqPWGD?tS^OgMC)ws z96o=Jwyq`9frGLwpv@}Bv8r|2+Qp$pRJ$?%PVBwYSjlQf&dE04`5;nd7Y<8z0x~o| zNhSn|_Kn=XzbJeDg9@HQiXGrrEN7tnio+nBp1(of!8+tOia@?WMQNDw*bM^UqI~kvTo*`VqrH zLeBr5>W2{$T)UPPyD#4%{zkj^tkl(vy7mFk$rTrfVr&m9RpfYjL>la}#?P%IgDy~u zb;r{=c)k`LgjhF(NAaXeG-NU;Q;i$&4xu9RqWP!swD;hE%`SZVE|`lIi{6bp=dA%} z6hh1uJ;zYq0WP4KCmsFjQoZ4@e6xn@o*cP0FZ=k=uyhBp#PhNDTmKW?;K& zy})FBA52_y@QXc{YkRldq(yl<^>Rw>U3f? z5<(wsu+Ly(dW?57Ox-f;D*ni=az32I$BpaYiZtBKBi0S>iGvmL5mP@F^fh5+3?KNC z{lZQ94o%#+xJ;INmGp#jL4@Lh+zjfi!TD{!N7d{&mvO3x`W&-rMMfVR8PfgcW&kb?(o-yx?ET$^J~6CQ(4?P z@3e5J1>Efyh;?;X_vW(UDGawxjF%(_QQEKH@xRJU{jK6cN_~|DB}8u>RVGHva~l$h zaT1^y@AX0;knU6^HL6I_M%G!M<1zGAx`3PBZwL{?; zbdgFwU!-g@Nx%cnAS~nEgLII-wMAbm_!*k} zWq+2RlDE!Lee_|X&5V1@Tky;OE^40Ine%Eld#AEM_S;5lXU1e??x(`MUysG~{w3`G z1%EnaulzpAK50^Pm1z5y8F!`d`1FrV_RfJM*cGZ0i zsK*6BJDvb|0rE3{+EfLgvt806;w>j)im$rmx`F&RvJ?j3uRZ}~!Q!3lbdT`ALyFd) zWp6rV1-P;L2AJ=@IC{1O{FRdhff)b|n8vNrurJyzqofk@s6BFu;{6`t3hjY|%uj>b zJ$SJJ)7KIYhCPQC5^}!)J@;USv=E>~A9Kvl|LMdCK zdj|J)Q}_Azl0MHd_a5GYp%O5VHM}ldvIZ<8od)YR`%APDG7&sLqy}tEl$>Ypm2P?8 z`)3f_y8orbm6zx5Wa0bu`rf+xaB2|%xHNS9S063jmn~GpCM9eO{C=GtE=nc7?}(@q zm)gzk`4%8LeJ}BJ7Wl%J{(SCfK<+(Ud$D{ep*%7GC`0B9A+5BT%K`3la;QecHp zrpbz;A?hgqC;IY)H~96O?R+`^|3%*ri5^T!f=Y?gS3n+-zS{diFpuod6~x(r)M#@L zCJR`y0|?&m@Bi9!YxVUGanePp29$@wDX9Kn1CaRroyl&leFh_&LXn@T-IHrKh)_}R z*%<6+zoq%zB$Zy?<6A2w(<^5P_z~Esq_Z1lNDO1zs%7_R%r*NF+G*sA``z6<654AP z%YGmc^e1|&RrEJY$m?mbN~=n{O0U(Q*io<6xYN7LpN+AUl8&~M%x`C5l#&Miv*9NB zXNWsQSMow%qi#&VS*hf9Wd^{X^wLH3J%C`ID41)$nnE0Teyt_yvHJZVpODt@Ox4OK zN?%u@AirlrEAvOIuT#0&b|@SV+~65!V`ECm_M4-OZom7x=kC49?3Yqw!5}I>_dWSy zq3A9uf6t?ZD*blEG%<%tBi)(x?ZUZ*DVzED(}m-ptPl*0uaB^})^ zB&i(0Fog2IG4#*?{1Gx62IY<|OSbbaDz6P*(Stzi*imRCRmvD$^b}5Gqm0aU(%1ju zsRnUn{h;FDL;%Ah8qTsj#Z%@(4`eX=4p=OkGvLcs|K(^C8cH=X%g;X|<(e zP>K#}M5#?0`o&rEN|a&g{c$toFOKNk4~LdyCVIyFG%f$2o5p!H!5?W0YRLj`#gkr= zqlNQ`mzg^aT-{az)nuhScI>tq(c4ctx^djE23L=9)pb!W;=hgA$_q}v!G6y(U@QxE zYD!8F)LBcUiNQ4j=e#5O?$rE#QGrVQnZ%@y%ZqEn{hK7|k1DCN-zeoxp>l1B7hw@J zx>#BBhBpS1*b@Fvk3)bU3je-&zms0!epDnexn5Z`l8(Nlzke{Z{$dEM{+y(06Bw4} zmIV=n&ueDUL}C6PNs7{D_bhM_r?FTNjyk11F6S2H?-{+V$1?e(`PjFb;Y~rST2#;z>Ur43)OY1KNHu{ z^aA6P=!`rh-}5kIn(B5@*DU{b`EA6_$h^%A(M^TzSL*wXM6n;YKi~hOe%KU@rY<`)zOU^< zZF+v#yC-^nI{O;ze;Zd=7+m)ApduJZWS%e*Ee)o@3yq&QD@9rDEBreXil0`bkC6q# zG{p;NGc>$Qo+D-L0)q4^ojn}5 zsEWQ`Q`+aWJ&w1As>TJE>79#ZsxgYG#t4F}ej+9Y<4#p82i}Z9oqfLSH8obfhPN6X z00P&t<{(Wa#^X*VOAr%55CfEt=>uLw$ZhVsCb`^I38v$eBQ>8d2*QF(9a@3!!?=!A z0|4(y^57;zvY>?0w=5~EfC0l4w}flqe{$nNY|Yb)t=a|n>4$QxPelGv5u~5j>}3DE zWzyt@0zsC>2GMcx5I`l>V_vo-(qfQQjfY3DO7btT(i2(uhAm*X`y+YqC7 zh`x0=1#}9;v{XocoY5ja(5X}rtPn>Y*KN*;to_+qmK|`UhHh*y=-yNgZIsRY3q%Wj zP~k^qrQ}EQ4yPRBzy`a@icYwN_mcw%p2kp|9(Gp!-x4AIFILz$Z{E}CniUOU_DU&}sblXqMYT^EZ?}9r; z7D!Opz<`2@NHq79T<%txVS0x5aUuc+O@p@iSLATms>1Cn+ zGw1Ua0sGVZ1f-1uCV1b>UVeM5uQ{S7SRrr2#*aBk@0VV8u2uuTUzxE);kiVLw^cQx zSYR%#=-x!;h^NIG!(7jle!8u9c8-S>CJ>IR3GpOkw+>cSWffU4@e9|WTceD7$!fJV zWfWH|0tm^fb@N{qN2eAk<-BG5Kb-8Ob6?uH*cL~++ePA@`fHEZR|b}an+?SUojfQv zb`^x*kN7j-2bk|rQ;#Wlu^Y6l;YE;1~7E*57;wM(nNKO$~=6}@b*%c|cgq3rCQ zsYtrVp7}Txy>^xPD{zyy;&IxKOEq_g>X84*cjklX%?S$iQ6FX3T=vf!K7_>4>w|Ce z`KDfj4e#a?I1hNmA_r!PBP+Q%#7wdwL)T+GtqA* z_|5u!>HgkyXNsr0b}96c$!SJEjH$8o21Wj*Ve6mYck%ZNcS8rA&BXi39c|LD88P9P zs4))JL-%OdPG>H^0!yrfKP4|AGJd~ASj$5NZl9rVDN>~aqWOM37DgizLh*n!i(6D` zozeJEKrCxH2&CGFinI4ZC0tlNpZ%i?b8%hh(QD-l#HhrPsf?MZOj4=JnyBk?sJ>wn zY*6{!6#BVjVxv!`1{PK`g+VZjA-wGXc(Defs*&PDYd2KPPtCuX09>5=_@9bv$u?_g zE`Zhh@7ysM;`@O#L&)lyoJe?NOnCC%cqsBJkM_S`co+2UXkusxdafqwD)8Ux%yTIk zViz}h3IHOZ#khTSwiqu?hS@2g;>>aa<%*->b8HqnX^x3&pwb5C&jWjelBVbUjuy%nkdWkS{lp>wOet^9^K5}_G#_LWURh(uE8l^$(sSyd9 z%XWrIoUtTnfn?6ui$4iG=&F}m=d|e1O{}qEYMy=&bQ5vqg7K*m<6tK0&H}T^71M4m zp-0oQs|yCNu0K9kR#fS&t-0^vf_uZ6ol4}1w1IG&s>!u+d-f4K=np(`TFDnZO| z61Qm*Ucr#00QgSHkfcydtxZr1jN$=K<9-R*qDA%Og`_}1CdI7F^&m?imYg}#Ul=X< zJS}Y#E8+@{FSiMrHYeP6K^)_vPPq`}4KhIZ=ssQ0%epfVr$AgA(FLK@tMyP^K3bp_ zzHJJs!xif(99aNLniT@_?IVeSv*mA+ExO=pg@9}U&kwXTDFCo#D27%DssJ2`Xc5*!Ke-41R2>3o0U{~&QJV0Bpnd2a=0e#6LT-czkY_3@ zK`6Q%3@K|CV-Eo00-$%L3gy#@Wxf=tcsyq`ixxJs-T`s6075?IEZIClOR3_$gc7-0 z$X(YMW85G4AYvDmY(A2yr_a=hNW;CaCvQC{Vl0&s6UbW*?`R6X@ z7pK7j{2zHv>KGBS6;5!m{fQL*T+;rl-c)TwXsYFdSXz1hr3jD) z6KeQqYZN!I=4p|BBn15|5`hE28Cx{_0L&CZL;(*6EdXQRg#bYG`aM$j`jie;EsuxI zw2bB4sgusu>0BSjd|xaVsFvc>Fa)Dk?(?3}OCZ#`SQQXXnuatd6Q);-gs!ngt4VLr zt17ihX9zD*{CK1os`LA(L8#!`p{XDt7**B)Ifps8hn6NDsv6`JE5ioPTFPuJo*rmYuUpNb1v+M3-5inQqkj zT5Gs&(W$E0be6w_+*sSuIrXio7HEuMAa8!JDnjDAC1eRfZP6w-bZ_fmh8vWSbq3pC z59K;@j?>4r-vQ^}{q^4sow>fWgtJ{ZE6E^!3?=^vB9&u_c324)kg|9sL+4hV>AJ4) z>7gHB$}QI>Je{`UJl6gL>ELS#@w+VzGt5j@e?lAi6%YJn(@;V)M?z3Y2)NpuLIi-u zQG^`;PfxEZe?ai^fj7OAapJ%a-Mt>**%YWw>+94d1FD94;^ z0!VJ(=W(R({Me|x2UMxmeBGR+Ok0FoQ1Vh5>5<=|R!qipMvKC=2?5`#(|TE_7Na$6 zYLBMHbc@7ZdWN?eI2VF2{}fSYAq*h#{92E|k4vkpG8vKjq}Ij;WScG_k6T*WLc~5W zid`TM)Lg@DC0cm^hdDcKS|~=HSL{OzsEHua@mgrSITcQdSw)E5plggRoIpsLR_2k` z`T#07XR=6Re9Z9h%LMu*A$NL3ZUsZ! zahn#L`2~>)ZltIeQ+~^kJkU~^^tlI;#qd9#CWWHQK|!{g817f8q)oJL^Q@aQNarL7 zI{kFoB9DXB{8xO;jC_O!?pWq8)5mZ|H*+@1e&*b5rq}M6*M6C#DSy2I6fy=03r$71 zV#V2_UisNck3f<%J`#jEOc;NWsIQM>PK%RsjUp@dc8EN6oVDjy5A!`)hqE`4qdhGfWqkHsqRl# z$(2#P7kbTeP6I!B1NcumN_PWkcQOuTqoQ&nxp5PCyb&UvMiz`=M8TzP1{;)z4KJ+f3MrQ-d47mY(a9TRxX z0&&d}C;Y2PJrpNHTbcy9?7fGYmdhMm54+f(r$%l5wg^~t$f@$+@ZyusK`Acbu*=~O zf9bP&u)vK_Hhf_&w{dhg!e^e|qK%Ffv>|z_sY0~=iIN^1I?At;WM?39S(&oGbkqUj zqtbL#<%lBA`^j0kIqqdDhA(au!^u?SC)6jG0ylY!NIztC2B`%E1YFS+(c!Kg@H!S$ls74^Wd8ed8FVrpmSWiOy4v zL;EYBx*$SOc6fK%xZ!)S(>l2-xmF8AZxLcdBTb`pHS)|&{LJ4Y-5nE#pK6=I8yW;Z-AOoq_}%gc2|DJa zPa`Hmcm6TW#NYPY@9ae98`dJX<$kaIlfOsGdjHeLHtx(vk#kk!%)&azI-;|&p!LpoIajOFOvT3Q}_LiJy0hcpo{$e_ZNq~T7PEL zz+oTwEa}*k@X!5s=OcUdg`WM%(UWp+~g?}?w~Pix`c3vbGO_@}=vd>Zmx zCi8bxI#h_|nGr4Qry1hl7xQxAGw#^)ky*&L*}p%9h%*TEFFKV{Ls5S?8X=p>SVQq( zG#JrXkaiEB!^YSNQEwttHkL}csdPM*MZ4N$ys2z5lgDa8ZM?qxTds)9^u~B| z#Y`bA9D`b=rE;#If`jeNL`&5|h2|%fdje z=6KSU0$r)0K!sNGuR(aI*4IAzTgDx@rx&RPGE4IW(a<|xgO0kL(S%ylr7VP3?cQWo zckB-n{^o<3BH1{UAIrZ#<}BloH-JSy=Jo`<$=z4PT@7cAz-C95yDxSc>7vDie9^hu zP56|`Zl;lVZM#4FNwpBC*HcDG810I}{Or;t+W+~zbj*8bGjNYih=~g!=z4dtBQ7A- z$#?tbAx?}m_v_bx{{UCk)G~Yco`a6hFs(4)O9pNhyT>{i@J1Nm9uDN2X{FBjEKD^97YK8`47rn4PVk}AEUK{=p*a?s|DG3tw zkQ4Uev4ltq8_;P=dyDkJD8k|7TM>LYWBTd(ww(om))}IB@AcP65t}(q87*c8??zY; z@)od_OudoTLL*=yJhF*w8|a=dnJ>?;az$7>ByVe9@(VA5eKHb3b7%0Xf1 z6Icm-Ic-P5_ZKZt87?x<9}=AlTF;kOcnU9-mPZk_mQFK@J(4&?-$ikJ{UkOlaRW_` zDvF?3{|R%(GCpl=L9yF!xhVcXoWF|luy3&DeR9@rz4jI_0R-O;g9|_Sf?L8=juNYn z9zRWh5ortT@EyrRXk8YDTy+4_Hu*GB3Q5{|VjDq~agEYCWVl!C_6^ zHPXbR0gVHTQBwu2lvU{GS^_EQ9&%=~U1pWnpVm9vl?Jst} z-a5}_`IAD3f01XKJX{$eI}={dDnbsnz{!|c;HMa8z+&y>na5s$O+qJZ>m~=KW!b5| zBkdV0NuY`%F}DMDpSjS`& zZkR-f4!okm$fnG_$inh-tic3Wvmbk*m&{-#oX}0evAqn1#GpWs4?<)JoWnmr(8Z38 zd$B+}KtH%o#A&&dYu1YblhMu6gc`cSMfdwzhT$M?WfMz6m*oLcTV-Nlmi~LoF@Wh! zIQjE&Hq2inOV;x;?wL>bh-PdgR!-B8BA#BALy1y!{W8I^*tApSCWJ#`3Ier;kuReDlfRt!N;@PA{2M2s|G`T>)eHseW8!aqi#9Zd5msMA}iz5-db{bhw)aTJIb#- zsu%JfrYfXnJoCORX@_6`t$=0w&Ag|$Df$s{0Q*Eb8!5J!fGl4r$9xQnlxlIsR{tQ; z1_(`%fr2Dvks3GW!sK^RX?W0(lvf*&d;l?IcF+t}bGC)VBAqhkEfivw2Cx@ZWV!GU zWz9I5h3uroQpJzTa;y`JK*(^;ku0h|ham@l*> z&Gww0CY*@t@1IiC8F6ZFoumrNN zrZRxQiFlE!A4?2IFa*oeBx_!)uIo>`FH{v_zx!EqOfadj)C_Gre#K!-u;A{+5JZf@ zF0lDAStJZeN*#qH&?x2mRR&A!$IrG6ohcs)?&$A%WN=sUzXKXQn-H&0RZC9@q^Lrv zjf=TnMNkr*4eYisJ=fTes{VAi<@bXD>-Ei4NtXPHTV=PxaT?eO24(IU?!KK$babb8 z77TUV_lBb{!k7H5L8wHVKvvjGYt<$IL{A15l?wa+%B4mWvEt2?O0c&m2C!M^p&!41N3uH5#y@GTrfQf& zr5DSV_v;`U%^SIlY^ps>*OEzdrG8Yrer&#;jz+tvhKL^ ze{!-8&Xmed;@|qut}k~WVuWCt7**~PSl z5bw^C8T1$E(7ZnW0uV@X_^>2F*73u zmmq;I@#iBj*pLMwh#mrOntRj|#3v{MbKgOM{S&fS?0CrBZ2h59vtVjovOz8f{0RCE zq8*9@U#lICP=zTl2~`K13U>&qirfw^G0V^htLu`bwRvsVIjou2`2V`Kia)Om0>yz2&tn;mWa z$qpVmR9cCe507@dJ^(;g4K8>qY6Rw^;-_VaCF1p9+8gaUD zbu_xiF>3%N_qk8DIvMF>QED1bSLi{D18YZZ>f3$$GJUF0!A*(*ZP5V^6#+1OH^#=- zib>eZ=Gd(O@Agcc_7P`D=(|H03V$>TXS!Y+%p$B0M-q)-RZkbegNK|dXpM9i!BvJ$ zRSXyIiA7WWH!yC~OBx%DL8eh{ay~cM%Sxwhz zh61f_@on}(AeY$fFm$y|cb0pgFAr9#R|@M*vM*IZSTB&r z>g4X-O%jGYI>Ah2Dzq_$?lSUc!wWi^Mh?R?laHnlO(%AZpiNGPx}~uoNBcmLiXWmY z?o)V=aGLQl==)=iVlo_*ag)bztRI7nS<}|heDBOdj4Ql2k1{^9#Im(!Uan^Hm}lPa zWkM|8oI=ytI#ZLBv&F_!A;kuf?C$Z)#?wEd6TD?jE~!j@ zQBQNm328(LD3_3`i!ho1SZhf}rQ|8pj6g?ZOk8iE1`m?YIJOBCM6YLAV_t+8QlwE? zu>KZ!v8KDKoPU$#WnZR;A*u(zEruqeaq1SM#1_-O9MRxmF#6}ORpnm`M_aGtLW{F@ z3_j6{1t&#iZm_(;zyM+$7oGQgLgbETsAcQ=v6h~Oln8Zsz7f<3?F^z&!j<xP3y>5sLZ@HU`y5)gYg9+~8aI@zesw9^0pq31Do*Sv2!>AZjRy-r znFfC@lPa(D*$T<&8tlhw-{gvIfeN z2pj+M2bH>$O;cXS+FLJ!m$(fBd*gYLsc0?+cL?UyF}h>}IybB`DyM}gvhqr~1_Er6 z`HUmy*uuzam(pdbL6SMC*=%lIM|)X!DOL}ki2W6tVw~PeTvRtFR{MC|I%b1p%9Czv zXq7t_Ysq6qN!*_60IWC9_i6jkUS53Tig{q3pL~R@$4Wr+y+I?c(Ga=WiM^S3wT7Y< zdGywli7^T~htZ9YPjcS-Oh^g(`501E)CuYD{5otidW(8>Y>N9KKploGMHU4OiTtvz zRj!I#sj5fDgJkfKbeRP9io+32`t;_uBqqzn;UUQ~_Kkf=v#YneLQ#fKWslpR9`f7- z&fLtYNmFQC+0=e#k4P_9WUqy9WT1U4r)v3GMksVMweqCvcXwwuBf;vQE^&(9qVLW6 zf4VTnky|scXnBxqLRwS;`cQ^jAjOr?%daniEU)g|{b()6n1HLC?rwJLM)B?}U96IB zuc8KB;;Eq8NkcM|uTVF~4Fk8sRoxdf8ly6yrUUspy$o5zrtUkC4WI)fdY$ z3`8-;0!~I|l04Y6=}r*wjGuhYJL?_~iXS=m8nt`*fb0}{y6G9oLGXEFVlq8&h+}*L z6BsyLO}dGJ65qFYs)2!3R>Oomt%f^$iqTPHs$l@k(Zp$(1)i*o>iivzxyAS7$bj!5 zhRr!firaO!)u#8c91s6a#^_=ZxPm=5$K3r~%uUdVl0a;Xm2yRHejz|bw4}VJa9W?> zRPx?w)b|%-v6D^{X&eNFROn54lV574Q%@u~fy26chPnzseyA-Z6a%+yKI^w7%^KR%=%Ygt40i}mg3?^NdiIJ#U!Bx!S@U57~q<-1)bYi`iCKs6XbifF2VLI&W6n)hz5dSGjXn zaoQK)TSF!NW{&V4c;IWFUA16dfP1n)LL=E`Bk9dYyuwWoN*@4^kI|7qnh;+AGn7mn zz8QG=D@2FR6<@eTMirG-AxeN4C!)-jAX<2adJ7bo=-RvQJHM_>p8INq>9v z=jiUwihkUxMv7WqL99#epi4lKHcs^{_ajJ!fOZq3pHh8mM}<%hA=1x$^(=nKC#nV9 z#Yx^lcH0_G-f~MbF*_pu4MR8A9CaetF5=y`3&n9~&R|JUWUHgj*CJIbz~d{x`)h?~ zXUZkBh$k^kBdWoL1KesQ;(M1MtN}Ng^>8eGA~tydp0_g@(d`u#Qjupm-j2VWsCCjK6 z#u#>W7&u4Qg@7B~(7tj%F}FN3qNDBOIbEb-^8ZN`7=$=v);>H%oO`_NBo;(#=UJ0W zIbup!;t0ouRouUL!u*eZ79D)|70v)th115X@w^c~hBIyQednl%sc zV-NA@Z7vj-%Po4A4^1o|uUL||B|W}u3jzftn`wjSFlpSuTt!$nuFAf&*K3+MhJAqW zIgTMqjxjBk@XJfI8TQL7_Ou;bsec^sdX8U>H?V(#uNu!UesZ3h-WuRSuS~fPEP0Mg zcqPHyAYN|S8%1~>ck1@V+XB445G1fBnI`yBX6X2DiVTi9S@kB0LJ3B`HVmccj<)c| zlAHVO0>4MyCfJ-_au9&?Tk?#bH+>gSILmv3kQF#-q6;pR5ys=i0X$M!@n+QXeuY1l z$O>rG5$P1(dbr(nOVBJL-O+oHULa9kcKHmO+0k$GZ-87_=LWYFW> zp}|xB96p5T5Yml^NDley=fVvzdPpoeyz%j2$cF>6IaJ2rp|UgykT^`^#$m>d9Y0zd z(68jlm=S$Kgrw46&z}-0MsxtoVYUJOaO!ku(*B<^2mT)Pe+C^|^k~whO`k@c8Z|%GtzEx%ty=bM+O=)p#+_UDZr;2bR-OnE z7z2Gy4M6p1cw}6uXCsCiP;O`%ht`feOx|yR(z4SlLsV7O`{dveA4vAc6ytWWTV=iM zXMh)5lG?fdHLDyyO0*)=P>-m*z4#fxn7tgDtFE{ri|>=f;3pAzDIs2@viNVkNz_>FgpDFVc{;fCm$!hkgm zuoqu_9Wo|5hdyykR*ddtz>Wc|8H+iy8YK&1pc=-OVn_K&BV89#-IT5y(r~~fZrhYt zT!{JsS!9xzG=NQVr|el(m3c1IAz2d0B3KZIC6+U4ug03%W|_^pYp=fsyK8HuCcA92 z&qh1#vI%@sZMWa1jBU8*CYx$vjSV|*y>;9AMbY4aA&`ZLIb$B(2sfM{#A`zwaKU+V zT%g7S&zp@U+)1by2tv8ha(5yxZSk$3zf;giCr4Wc7OA*nDRy3ZFl%zl?DN}&fbe-*dXFQoo(LGp{ z9`(p*ByQ1B0fsc8Uj>Fc&=G?%?4lMyI6^}O@`so1p#rqns#CuzQLcK`p8$lEmS!d8!=<@wCB#md=%@dX$7f&|w5E@>U?T zUE%XGTMsd`*17b6Zf)gCk7U4*9(({o2wKSoMS@Pcn4_+32O>u=7|s(UP{(kKOOHSP z@D!?(EG!JvI}pI-wzcvdNPWG5T;;~#a@U3KK$77BTL=Uhg5YEwQBd4>e1Q-EHtv9l z8({nD7jp!r$6E6%xc(+ix9A{4^HwXs*PRYoC+}G*Bx}$a+C+M)(_xe7~9oy1!g>uOw<0u(XDp$ zojHBxsgf85R&MAwZb1nqWR`fK-ZH68jcOZZbH~R!i! zeN>Ty^m6ppwz&tw4K9cP0v~9ETw5)WlDoU+NA)(%*FBI#jQFyO3A<1n< zdA7~Xa+kxL*fTP=vZX$Cs-KS8R(p2Vy%z0h|J>5o4qh)XU!nX|nJH!c6 z57v6Zx3K0m;G()>VtSm7Ko>XOi(z+BN7@~GcRSn*QjcbUp~(a(Mg@d1kY)@6^TN12 z+SzP+!-9Sq95_QZ1cHX66A$%f9|-GRpXD1xz3R`0e)L0h^&e~9`p@DzYN`G86`~<{ zAf`tvu%HgKgImtv7r#1I3*6y{o`MM!~F;N`;))$2B|nMprd36 zfgvb^&uc&ZgEPq^2q+tZ;=(Zc;;DGZfddS&9LO)vOFMc9{Y&1akO;4=4m+s00ycukr&qL(9S~?85e{!bms=g17@K zWQUCEtKyQVjRFG*fVeT_LN7F&HH-u?+P^x~!aMxJ|0@VNf`H_*hZeX1S3tlsZ;(7{Q3!@1Hzj(PwAvcobI9&n(6CfJ2r0D}!UL4x2b zUC0C3^Tdj3samYW+XA>T6vZ42Lv~08;B%{vf;c_?#KJ!`MO0KpR&+&rKn47(5hPr~ zX{1JEYr-eQ#$<`Y&*(kwb0r$M09vpm3YdW)0z)bs$8zK(WB^CzW5;lO2SvE0T}mb^ z8Ur=RtaL=CcZ>yx1H4XBBX!h8gh&M0`zkRoq($UMe`G*{K!eN*C3(apP@)HJ00R_i zgr4g>PW;6RsAdq;5$$bD2vmUKyw!aJy|#;BA^sk_E(v`QP<#&Ws_RTw0B z*aAGd9dyWn`Mb)p91Url%CuC=3aU!8bj$t}$x3n(OD&LvTd=ED+Z%461S;UExAe<} zK+Clh%)yMEw*1S(yp6adCuCSkC&0_SL5IV7OvFUYz$DDe#7qt9F|4D^&YTU!^vuu{ zO&iP1(lkxeG0f3a&CdYM)pX6*>F6n?OVLofh< zfgQB~5vfp5pMZo1;D~Zi1zu^->f{MI!Op?dPVn^1?&Qz^+)nX?2woVO*r`v-U{Cz? ziSzi01D%Wn&Cko+PXIkk|D@0hef~`W9SfQ02S_LZiOG<<;Dszm0HwGAK#-uBv4jtu z0=+N>33>pT5E*O%gbw}C2ME!A0E7pC8k3mO0jSY`F^|HCh###{4+YVH+0h=&1|#Jd zmXVHrumcBRfHY{E8#n|BDggr#Q4&>(q*w|*Infklh7~n{7L8EQ+RW<1P`|X$Hic8q z)X;~pgO~6JK;RNpDA2lq7iM^q8@Pc_*%LP?hjO@qsEH3q(1&cGPdUNUA=y(vu#|Fe z0|>(K#2QWN)HLOu360aM{(RG5CDyl`Q;E=uw#bm1DH(^L2aWLuRd|5L*cq5mP>^tt z_~6u1Eec>jf&pLPzxqeScYv3zu?x%$c9P< zn2Jr+L}m?w~7!Bc+aj91^ zHJPNv+1BaTpLMqWo>kknC8uK@j^eNm07#8kNaTH!372b2#0{dkOz5)u!RT)y;ZwC8N5APtJ7Jx#YVRE+|a!p@$8WwafmA+ zlDZ|AyG2+hfs$Nt6V%O;Rr!;Xz!fpU)S)<&G+C2biQNGZlGN1_R{0V)>4)Bh2wkxi za-rOZxRX5D6U;T+&E?!4V^h&3Ezrf@?FAd)Y#42+)_DOJ)kRu!K^JwAPL&bgdifZO z*%w*$7xcu4fhm}SkyUx|mhr8akhvIy(bEAifB=>S-%T3kwV82&7>O}Y>2(h3t=`$W zUhe%M?UnxE3Z@p>bl?n5!nC#E+o9kN2H|AEU=1eWs^j1ghPEL?;T6`N5_aLKJYg38 znh%!Y8di}Je&HO}u^6^ttfAo^24da7VI3x7&*I@AhC&ra;w5grB6ecvJ7OkQmLHbl zD*nwU#^R}qVk^dxX!GJP2IDXm<1r@VGB)EgM&mSA<24?#Al*cHMQPAM&v|R+PAvChfBiJ@@_=$MCK`4H|Y0iywtgr1Cv&f7IU(Vm71IOrkZBzBF<@_mg=ddYJVo!8{kkR#nF)%(Gsl-6g2=9WldVIL%XBI1!M#^#)mN~n*2Ngtay?h{rVK!^QzXcccC8My z5bqC>Z>LZRZQY6cepiqX?;98t2Ot@e;BWed2%;!(>V{*>-tGo>@CWz)WX?WVixpW_ zDc_qFlQX4QIiYZj?F+G}X`Ijpeu$D=UD=j>*>U+0m1S9%&Dfn_aTHgT+jfd+U6dGi z@t7qF9CsPY)?o&R@E{lRArIuBy$GkZ2@5aV2A+zgwOS<4+Nf1&4^ahGaB0NQ5Sx|^ zEcaTC%?2)aSbqqN!5~tS0CQC#iZj>p1;1`0ck?%g^E`%I;xG=xJ=!I2l)Tj#zO8fY z09^JE-0wI9g~`##&GHZFke>l`{7Cd>g@_5M5W{HnFz540SMWCm@;KM@P3QD;8fhP4 z03ZQgEFoV!R|zI@-6+8o+4T=ZDc&#{lb;9&14w}4cnIa?6~+GWl~E~`T^Zimm6Bdx zUd4!3Sn(KKzZEwL_FCbUUB~n`@APPw_G$m=?+DIp*%qM4U-mr`Q}>5+DVX%V-}My< zpmE(LWg3x?_h&z3YB%_U zpLTtwO}W|UoGo~ShxmwhbA_MH*J*f%hhT}<_>FgPipR|J37_$~c#N-_Q{ecMNBPV4 z_{+Q?K^b|Hznheo`I*=0m4A6l&UBjB`JE4Eo4@%&&Uu~}`k{|zpZ|F_e|Vx-`lY94 zqd$7iThIXpg`mJwer@wlr&U&sF`~I=-WUv4F9}j!7SNpYZWV1i} z7pA^(ko&o(du`YUw#WOt*JHPT`x1_Ox(9r@*ZaXI{59tLzSrQt4}7`@hr)OK#}DJf zM|=lX{KcPp$jAK5ryt3m{LQU=%O3~L7yZ$H4bJa;oc(;uC;inIebYaEUrqhRXZ_iS ze1aYTgXSKLUeA-zeYoD!Z)X4^b%-nw?}&J6sUY^E@bQec=$DWEz^DD_C;X8v&-2`# znvRGmr&kJsl31bFnSO}lKZ)f3iRCW}nST1`2Yl&gf4m3k-ydqJ(SDe4=_~*QXw3${ zE&u9<2;^6v{Raqt0tXT-Xz(DygbEijZ0PVI{=|q9{hi`v@ghcEr^a#Y=&>WekRnHt zENSv2%9JWsvTW({CCr#IXVR=`^Cr%mI(PEy>GLPhph8ccVhHI*!5eP;^@CKxz=KZ% zZ}7^J0GPiUfNmIY!OYUrDf9#yWE$!NVCF~UBWuTux z2IX8x^=AnQQ>Rc1`zxVJVBEQNvt_l!)WuSNkme#OC(!Z0%?UaSym5$Y31g)#GqvM@ zK^lG&XVb22`}V_%88dGD=zHAI;KGL!FK+xe^5n{w4@bpBLO$!lMQ4Aod4{89i101FV%!V27FP8#k=cOEbVtIpy4t1ycqDJ$P$<`#)v48!uhfWn#2CWh{OP<`V-Co1Wf@d zXeg@;D!=|Dpp35B4B)^64>(|eu|50zvp~pRndP#;QF}DfNh`fH(_Q8x1-s_)lg}4Z zj3N>;T%>S;7Se=tj}aBbGTsP&;6rYj8i;ex9w|^TLmlUc1Pcyt*Fg^25U4Fuci(|6 zHrZxBt>y);@RRk{UH-H5E<*8^c*tdL0Mq2YtgR-pK*|X0k1}bDhA?E9O>QEv13bKH z#0?^ZGCd5)=1&%O0FqfhqEn8lHKt>3ngfaEe)<%UgZBGC!Rso}%(_ZC7SPQ*Po>bi z5xs2F)mwi(_StJ65;!PCVE9S1P;hOU6$rx**bzYB1Q*@z14jxFjIcvG;a)(*`0etO zCj>6Ue*`<=C%+x2gKu_9-}>4Yfl|oh3-KGl42~f_@r=mS`PDN*GJ z60?74t{^D$Od5RmL4T009|JfT>M)cjh3o|>0#StvTyQXJtdMk#d5jBT$SO-PV*o&W z;XodM65Bup{pc~-pQM54!=qJd<4Ui=~$!zf1KB!dGOSjI`rzEOWxL7d`s%2?NOH5D%aS zKO}`pRj6`74}i}hE@Vqw4va$vv4a61$FTvdP?xD>&4vJzhF{Vnm@u-;Ea@{%{aKIs^lF(GO;*3XAT1r$Mxck?Cn^jP|@IKJ%$hkvPKwXFQ2BD6j!> zgruMT8}P;)@3bx`gw*IbqFX3Jfqn33$P=8`wuP45;Z%AyXs<*r5cJ z;RjLepclRvq=*qJ4UJ}cRGYF!7Ib0CQk!~Bfn?zU{OE@pUXumpd6htDRV(w#DMicK z5-OI1CtlwvPb_hfBm4X-U;`^yX({r1BWcDk%+m`9kf4D4=w1buF-LFlV-j@K2S-tX zgEYB-qU;C;1We#qk#N+29)$p9En5ZiSh8J+~E#qj%AQqJU;pcew37;%ta|eKbqRh+EH9(tUx5rQ4B#^RG`kSg(%KZ-G_z* zl9LUIYFSHC@18WJDLDmv<163!(zm|$y)S~WeEVuN z;xf3w4t_98SfM96WaAodv>-fSz(#qzaS3viE_yG^k2m$99TM&VbpkoaLPFpT_?QL? z3O8a1lvrw0J0OTFE8^B-Qp07y2Ztfx;g@Ks8w%(GN4kLkB#*-v1sKF62+)ZngP;N1 zP%@Lpv4shY!^lYXa!1%;WhGxi$u{7Klh5qrK{UAlOzuXN#}VZzce%<}UjA~DkDO#Y zw|Nl0Aiyus>}D-ieE+4Up{2NPSShHo+r15VTb$sX<~S}KF$0P#Jm77>g&qKIX-8{0-nhWQ{sB5&?@%*Y3Vf-hdx%s?ioF_m43jl&60NwB= zGe7{Hp!d#M{^v`KLkxcZ1snX{hH(@F7aV~@zips~k2|98e-C`6`J8u1KY1LzAVR+v zkP9>y{t}({JK%3V4$Px_^Q;%ZCD?FtOuu^^fABmIHoo$EcOwV_i1!_2p7=3;I?b0B z{PH*Md*Dmo7p*rs_Oq{j>Mgzd-v2)M$+Uf=S6oYKkn;Hc)35&Zv%mfBe}DMnFaP<| zA1LpawHzd033XRu2nJX{pxvJU4j=&*paB|P{Ux9RE+7M*!~yn|FYLhs^qb$w!0J69 z240491`gVqgo_pbg%j7|oy# z?jR5LU<%?O5C)+TB8?9gp%EUT4-TOcE+G?w2@*ab6hwjmwX;TP`17|Nj@?%@+^!#>y{ zAO@l!4k95Iq9Gn4A||3DE+Qi~q9Z;cBu1hnP9pv#R-z?dA|_^{CT=1pcA_VKA}EHU zD2^g2mZB-1A}Xe$Dy||cwxTP(A}sR5G;jc~Z3j&BLKy^u{>%g}Dn~EIA}|J{Fs8&b z_y9ZDL_L^;F4n{^B1bb0BQ!?iChh|!6hRR*LMK_r4QK%q&_YQR<1v~J(MrDFEYJxrl!xiAba)rb=hCvt*0z5ha6Y$B|&|?wU<2aH* z5tt1%S|c`!L_#hkJ}jd=Siv&%qdB6ZI`)DC>NX(*|xEDX_fI4Uc3oJuEJpRElB*SsVgHOieF3y4yw2>9iLNL6*Xz@cY z;AB1|WiPCNG~B}zJcCgpB`x#E{ z7J*-CW?t?lZ-QYW&`CSYgGe|+U=C(T6sAb90R%|ER<=uQo@OzufG8+KToR>7jOP9X zf;>W`{?ukKo+fsBLLhvnWBz7H{sbp?hNdv|VntGBVlL)s(k3XFXGYD#cJ?NI=BE%A zgAR}bTpCU|=tD0=0X~2O2%JxV5~eX4rgOrlW7eiD9;kKlBenhKeL7`--a`(oXS>8_ zg<63tkf$*4r+jjrH67$iU{rZ~t$I|}47 z@F-!@qMDGTQ#Pn<3d1xo!4xobl%m6}msAEoPmBJ&J3PX-s zBS4<0W3r<9ZYrmCs;7P`sD`Sjjw-2^s;QnT Ws-~){t}3gxs;j;#tSU`F0028K>pVmN literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index 03839d3d..7c6d06eb 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -25,6 +25,7 @@ Several Freifunk communities in Germany use Gluon as the foundation of their Fre features/wired-mesh features/dns-forwarder features/monitoring + features/multidomain features/authorized-keys features/roles features/vpn diff --git a/docs/multidomain-site-example/domains/alpha_centauri.conf b/docs/multidomain-site-example/domains/alpha_centauri.conf new file mode 100644 index 00000000..27558253 --- /dev/null +++ b/docs/multidomain-site-example/domains/alpha_centauri.conf @@ -0,0 +1,61 @@ +{ + -- multiple codes/names can be defined, the first one is the primary name + -- additional aliases can be defined + domain_names = { + alpha_centauri = 'Alpha Centauri', + rigil_kentaurus = 'Rigil Kentaurus', + proxima_centauri = 'Proxima Centauri', + }, + + -- 32 byte random data in hexadecimal encoding + -- Can be generated using: echo $(hexdump -v -n 32 -e '1/1 "%02x"' >' "$2" +# to decide if a version is newer or not. + +DEFAULT_GLUON_RELEASE := 0.6+exp$(shell date '+%Y%m%d') + +# Variables set with ?= can be overwritten from the command line + +## GLUON_RELEASE +# call make with custom GLUON_RELEASE flag, to use your own release version scheme. +# e.g.: +# $ make images GLUON_RELEASE=23.42+5 +# would generate images named like this: +# gluon-ff%site_code%-23.42+5-%router_model%.bin + +GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE) + +# Default priority for updates. +GLUON_PRIORITY ?= 0 + +# Region code required for some images; supported values: us eu +GLUON_REGION ?= eu + +# Languages to include +GLUON_LANGS ?= en de