From 593d01c8c3ac120ce7917db549aa67fa2a6fc41f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= Date: Thu, 13 Dec 2018 18:32:48 +0100 Subject: [PATCH] Reorganize website. --- haunt.scm | 17 ++ pages/best-practises.skr | 2 +- pages/projects.skr | 82 +++---- pages/projects/java-tools.md | 24 ++ pages/projects/jvm-languages.md | 35 +++ pages/projects/mes.md | 39 +++ pages/who.skr | 5 +- screen.css | 0 site/benefits.html | 5 + site/best-practises.html | 28 +++ site/blog/index.html | 1 + site/css/DroidSerif-webfont.woff | Bin 0 -> 29992 bytes site/css/reset.css | 62 +++++ site/css/screen.css | 298 +++++++++++++++++++++++ site/feed.xml | 1 + site/graphs/gcc-mesboot0.dot | 89 +++++++ site/images/banner-slim.svg | 359 +++++++++++++++++++++++++++ site/images/banner.svg | 401 +++++++++++++++++++++++++++++++ site/images/gcc-mesboot0.png | Bin 0 -> 226377 bytes site/images/jdk-bootstrap.png | Bin 0 -> 410210 bytes site/index.html | 10 + site/projects.html | 22 ++ site/projects/java-tools.html | 9 + site/projects/java.html | 24 ++ site/projects/jvm-languages.html | 14 ++ site/projects/mes.html | 16 ++ site/who.html | 4 + static/css/screen.css | 54 ++++- static/graphs/gcc-mesboot0.dot | 89 +++++++ static/images/gcc-mesboot0.png | Bin 0 -> 226377 bytes 30 files changed, 1642 insertions(+), 48 deletions(-) create mode 100644 pages/projects/java-tools.md create mode 100644 pages/projects/jvm-languages.md create mode 100644 pages/projects/mes.md create mode 100644 screen.css create mode 100644 site/benefits.html create mode 100644 site/best-practises.html create mode 100644 site/blog/index.html create mode 100644 site/css/DroidSerif-webfont.woff create mode 100644 site/css/reset.css create mode 100644 site/css/screen.css create mode 100644 site/feed.xml create mode 100644 site/graphs/gcc-mesboot0.dot create mode 100644 site/images/banner-slim.svg create mode 100644 site/images/banner.svg create mode 100644 site/images/gcc-mesboot0.png create mode 100644 site/images/jdk-bootstrap.png create mode 100644 site/index.html create mode 100644 site/projects.html create mode 100644 site/projects/java-tools.html create mode 100644 site/projects/java.html create mode 100644 site/projects/jvm-languages.html create mode 100644 site/projects/mes.html create mode 100644 site/who.html create mode 100644 static/graphs/gcc-mesboot0.dot create mode 100644 static/images/gcc-mesboot0.png diff --git a/haunt.scm b/haunt.scm index 3f5a2a7..629c347 100644 --- a/haunt.scm +++ b/haunt.scm @@ -1,6 +1,8 @@ ;; -*- geiser-scheme-implementation: guile -*- ;;; Bootstrappable.org website ;;; Copyright © 2016, 2018 Ricardo Wurmus +;;; Copyright © 2018 Julien Lepiller +;;; Copyright © 2018 Gábor Boskovits ;;; ;;; This file is part of the Bootstrappable.org website. ;;; @@ -130,6 +132,19 @@ place them in the directory DEST." (a (@ (href "https://gnu.org/licenses/agpl-3.0.html")) "GNU AGPL") ".")) +(define top-level-titles + '(("Benefits" . "/benefits.html") + ("Best Practises" . "/best-practises.html") + ("Projects" . "/projects.html") + ("Contact" . "/who.html"))) + +(define (menu title) + `(ul ,@(map (lambda (arg) + (let ((name (car arg)) + (link (cdr arg))) + `(li (a (@ (href ,link) (class ,(if (equal? name title) "active" "inactive"))) ,name)))) + top-level-titles))) + (define (make-layout big-banner?) (lambda (site title body) `((doctype "html") @@ -158,6 +173,8 @@ place them in the directory DEST." (a (@ (href "/")) (img (@ (alt "A boot pulled up by its straps.") (src "/images/banner-slim.svg")))))) + (nav (@ (id "menu")) + ,(menu title)) (div (@ (id "page")) ,body) ,footer)))) diff --git a/pages/best-practises.skr b/pages/best-practises.skr index 992bff4..2511c55 100644 --- a/pages/best-practises.skr +++ b/pages/best-practises.skr @@ -1,4 +1,4 @@ -(post :title "Best practises" +(post :title "Best Practises" (page (p [Are you developing or contributing to software that is affected by the bootstrapping problem? The following sections list best practises and practical examples that can help you pull yourself up by your own bootstraps, diff --git a/pages/projects.skr b/pages/projects.skr index 1300c43..f232f40 100644 --- a/pages/projects.skr +++ b/pages/projects.skr @@ -1,47 +1,8 @@ -(post :title "Collaboration projects" +(post :title "Projects" (page (p [Here are a couple of ongoing projects in the bootstrappable builds community. If you're interested in working on any of these projects please ,(anchor "contact us" "/who.html").]) - (h2 [From C++ to the world of Java]) - (p [The Java Development Kit (JDK) is written in Java, so you - need a JDK to build a JDK. - ,(anchor "Learn more about how we cut the cycle!" "/projects/java.html")]) - - (h2 [Maintaining GCC version 4.7]) - (p [The C and C++ compilers of the GNU Compiler Collection make up the foundation of many free software distributions. - Current versions of GCC are written in C++, which means that a C++ compiler is needed to build it from source. - GCC 4.7 was the last version of the collection that could be built with a plain C compiler, a much simpler task.]) - (p [We propose to collectively maintain a subset of GCC 4.7 to ensure that we can build the foundation of free software distributions starting with a simple C compiler (such as tinyCC, pcc, etc).]) - - (h2 [Build GCC 4.7 with a smaller compiler]) - (p [GCC is a complex beast and a binary of it is often used to bootstrap the whole system. - Version 4.7 is the last version of GCC to not require a C++ compiler. - This project aims to build GCC version 4.7 with a simple C compiler such as - ,(anchor "TinyCC" "http://www.landley.net/code/tinycc/"), - ,(anchor "pcc" "http://pcc.ludd.ltu.se/"), or - ,(anchor "qcc" "http://www.landley.net/qcc/").]) - - (h2 [Bootstrapping GHC with Hugs]) - (p [The Glasgow Haskell Compiler (GHC) is the most popular Haskell compiler. - It is written in Haskell and since the first public release requires GHC to build newer versions of the compiler. - It might be possible to build a first GHC from source with the Hugs interpreter and an older version of GHC. - ,(anchor "This blog post describes a first attempt" - "http://elephly.net/posts/2017-01-09-bootstrapping-haskell-part-1.html") - of this project.]) - - (h2 [Working towards a source-based bootstrapping path to a GNU+Linux system]) - (p [,(anchor "Mes" - "https://gitlab.com/janneke/mes") - aims to create an entirely source-based bootstrapping path. - The target is to have - ,(anchor "GuixSD" "https://gnu.org/software/guix") - bootstrap from a minimal, easily inspectable binary—that should be readable as source—into something close to R6RS Scheme.]) - (p [As bootstrapping is presumably easiest and probably most fun with Scheme, the next step for Mes is mescc: - a C compiler/linker to bootstrap into GNU GCC and GNU Guile, possibly via Tiny-CC.]) - (p [It currently has an interpreter written in C with garbage collector, - a library of loadable Scheme modules and test suite just barely enough to support a simple REPL and a proof-of-concept C compiler that produces an ELF from the simplest of C files.]) - (h2 [Growing a source-based bootstrapping path to a GNU system]) (p [,(anchor "Stage0" "http://savannah.nongnu.org/projects/stage0") @@ -49,4 +10,43 @@ With zero external dependencies, with the most painful work already done and real langauges such as assembly, forth and garbage collected lisp already implemented]) (p [Demonstrate some old school skill, by writting a new compiler or interpreter or help with various support tasks required to keep this project on track. Or if low level programming isn't for you, help bridge the gap between our goal and where we are by writing low dependency software in the high level language of your choice that might be easier for us to bootstrap.]) - (p [Even if contributing to it isn't for you, if you could take 7 minutes to verify what already exists on whatever weird operating system or hardware you have; we would love to hear about your results.]))) + (p [Even if contributing to it isn't for you, if you could take 7 minutes to verify what already exists on whatever weird operating system or hardware you have; we would love to hear about your results.]) + + (h2 [Working towards a source-based bootstrapping path to a GNU+Linux system]) + (p [A distsribution has to start from bootstrap binaries that are taken for granted. + ,(anchor "Learn more about how we reduce the size of the binary seeds!" "/projects/mes.html")]) + + (h2 [Maintaining GCC version 4.7]) + (p [The C and C++ compilers of the GNU Compiler Collection make up the foundation of many free software distributions. + Current versions of GCC are written in C++, which means that a C++ compiler is needed to build it from source. + GCC 4.7 was the last version of the collection that could be built with a plain C compiler, a much simpler task.]) + (p [We propose to collectively maintain a subset of GCC 4.7 to ensure that we can build the foundation of free software + distributions starting with a simple C compiler (such as tinyCC, pcc, etc).]) + + (h2 [From C++ to the world of Java]) + (p [The Java Development Kit (JDK) is written in Java, so you + need a JDK to build a JDK. + ,(anchor "Learn more about how we cut the cycle!" "/projects/java.html")]) + + (h2 [Bootstrapping the rest of the Java ecosystem]) + (p [In the Java world there are a lot of tools from testing frameworks + like JUnit to build tools like Maven and Gradle that have self dependencies. + Bootstrapping these is an ongoing effort. To see the current status and + work to be done have a look at ,(anchor "Bootstrapping Java Tools" + "/projects/java-tools.html")]) + + (h2 [Boostrapping JVM languages]) + (p [The Java Virtual Machine runs several other languages besides java, + all of them with their own tools and ecosystem. The most prominent ones + are Groovy, Clojure, Scala and Kotlin. Some of these are already + bootstrapped, but this is an ongoing effort. To see the current status + and work to be done have a look at ,(anchor "Bootstrapping JVM languages" + "/projects/jvm-languages.scm")]) + + (h2 [Bootstrapping GHC with Hugs]) + (p [The Glasgow Haskell Compiler (GHC) is the most popular Haskell compiler. + It is written in Haskell and since the first public release requires GHC to build newer versions of the compiler. + It might be possible to build a first GHC from source with the Hugs interpreter and an older version of GHC. + ,(anchor "This blog post describes a first attempt" + "http://elephly.net/posts/2017-01-09-bootstrapping-haskell-part-1.html") + of this project.]))) diff --git a/pages/projects/java-tools.md b/pages/projects/java-tools.md new file mode 100644 index 0000000..16353c4 --- /dev/null +++ b/pages/projects/java-tools.md @@ -0,0 +1,24 @@ +title: Bootstapping Java Tools +--- + +### Maven + +Maven is a build tool in the Java ecosystem. It needs Maven to build. +Maven is bootstrapped in GNU Guix, using generated build configuration +files for the Ant build tool, that is already bootstrapped as the result +of the [From C++ to the world of Java](/projects/java.html) project. + +You can download the graph of dependencies from [here](/static/graphs/maven.dot) +in a dot format. + +## Gradle + +Gradle is a build tool in the Java ecosystem. It needs Gradle to build. +It also depends on Scala. Scala is currently not bootstrappable, to +see the status of work in progress on the issue see +[Bootstrapping JVM Languages](/projects/jvm-languages.html). + +It would be nice to check if Gradle also depends on Kotlin, which is +another JVM language that is not bootstrapped yet. + +[← back to list of projects](/projects.html) diff --git a/pages/projects/jvm-languages.md b/pages/projects/jvm-languages.md new file mode 100644 index 0000000..2a79e70 --- /dev/null +++ b/pages/projects/jvm-languages.md @@ -0,0 +1,35 @@ +title: Bootstrapping JVM languages +--- + +### Clojure + +The Clojure language is bootstrapped on GNU Guix. + +Clojure just did the right thing regarding bootstrappability. They have a +bootstrappabel build system (Ant), and they have their core in a bootstrappable +language (Java), that is just enough to build the parts of the Clojure complier +so that it can build its Clojure files. + +### Groovy + +The Groovy language is bootstrapped on GNU Guix. + +### Scala + +We do not know about a bootsrap path for Scala. Going down the dependency chain +of Scala proved to be futile, as the first pulished version of Scala depends +on proprietary software. Most probably the only way to do this, after a +thoughtful mapping of problem space, seems to be writing a bootstrap compiler +for Scala. Some preliminary work has already been done in that direction, but +it is not ready for publication yet. People interested bootstrapping Scala +are welcome to inquire on the +[#bootstrappable IRC channel]("http://webchat.freenode.net?randomnick=1&channels=%23bootstrappable&uio=d4") +on freenode. + +### Kotlin + +We do not know about a bootstrap path for Kotiln. We are in the phase of +mapping the dependencies of Kotlin to get a plan to have it bootstrapped. +People interested in bootstrapping Kotlin are welcome to join in. + +[← back to list of projects](/projects.html) diff --git a/pages/projects/mes.md b/pages/projects/mes.md new file mode 100644 index 0000000..cc21174 --- /dev/null +++ b/pages/projects/mes.md @@ -0,0 +1,39 @@ +title: Working towards a source-based bootstrapping path to a GNU+Linux system] +--- + +### Reduced binary seed bootstrap (current status) +[Mes](https://www.gnu.org/software/mes) aims to create an entirely source-based bootstrapping path. +The target is to have [GuixSD](https://gnu.org/software/guix) +bootstrap from a minimal, easily inspectable binary—that should be readable as +source—into something close to R6RS Scheme. + +As bootstrapping is presumably easiest and probably most fun with Scheme, the next step for Mes is mescc: +a C compiler/linker to bootstrap into GNU GCC and GNU Guile, via Tiny-CC. + +It currently has an interpreter written in C with garbage collector, +a library of loadable Scheme modules and test suite just barely enough to support a simple REPL and a +C compiler that can build TinyCC. + +The following the graph shows how in GuixSD GCC is removed from the bootstrap binary seed: + +This is the dependency graph of the bootstrap as implemented in +[GNU Guix](https://gnu.org/software/guix): + +![dependency graph of the bootstrap in GNU Guix](/images/gcc-mesboot0.png) + +--The nodes having elliptical shape are the static bootstrap binaries bundled into +--a single tarball, we show them to make implicit dependencies clear. +-- +--The nodes having red text are development only dependecies, they can be safely +--dropped once the bootstrap is stabilized. + +It is also possible to create a similar bootstrap path for other distributions, +as showcased by Nix on the Reproducible Build Summit. + +### Build GCC 4.7 with a smaller compiler +GCC is a complex beast and a binary of it is often used to bootstrap the whole system. +Version 4.7 is the last version of GCC to not require a C++ compiler. +This project aims to build GCC version 4.7 with a simple C compiler such as +[TinyCC](http://www.landley.net/code/tinycc/). + +[← back to list of projects](/projects.html) diff --git a/pages/who.skr b/pages/who.skr index 9615736..228b2c7 100644 --- a/pages/who.skr +++ b/pages/who.skr @@ -1,7 +1,8 @@ -(post :title "Who we are" +(post :title "Contact" (page (p [This project was started at the ,(anchor "2016 Reproducible Builds Summit" "https://reproducible-builds.org/events/berlin2016/") in Berlin, where people involved with various GNU+Linux distributions and BSDs discussed the state of software reproducibility.]) - (p [To contact us please send email to ,(anchor "the bootstrappable mailing list" "mailto:bootstrappable@freelists.org."). + (p [To contact us please send email to ,(anchor "the bootstrappable mailing list" "mailto:bootstrappable@freelists.org") + or join the ,(anchor "#bootstrappable IRC channel" "http://webchat.freenode.net?randomnick=1&channels=%23bootstrappable&uio=d4") on freenode. The ,(anchor "mailing list archive is publicly accessible" "https://www.freelists.org/archive/bootstrappable/").]) (p [To subscribe to the mailing list send an email with "subscribe" in the subject to ,(code "bootstrappable-request@freelists.org").]))) diff --git a/screen.css b/screen.css new file mode 100644 index 0000000..e69de29 diff --git a/site/benefits.html b/site/benefits.html new file mode 100644 index 0000000..8576336 --- /dev/null +++ b/site/benefits.html @@ -0,0 +1,5 @@ +Benefits

This is nice, but what are the actual benefits of “bootstrappable” implementations?

For users

As a user, bootstrappable implementations, together with reproducible builds, provide confidence that you are running the code you expect to be running. + Its source code is auditable by the developer community, which in turns provides reassurance that the code you’re running does not have backdoors.

For distributors

Bootstrappable implementations provide clear provenance tracking: + the dependency graph of your distribution packages shows how each binary was obtained.

Having an automated process for bootstrapping your distribution on existing architectures greatly simplifies porting to new architectures. + With a formalised system bootstrap process you can just focus on issues specific to the new architecture.

For developers

If you are a compiler writer, making your compiler bootstrappable from a different language will simplify the development process (no need to carry large pre-built binaries around). + It will also make it easier to port the compiler to a different platform for which no bootstrap binaries exist yet.

\ No newline at end of file diff --git a/site/best-practises.html b/site/best-practises.html new file mode 100644 index 0000000..4975c1f --- /dev/null +++ b/site/best-practises.html @@ -0,0 +1,28 @@ +Best Practises

Are you developing or contributing to software that is affected by the bootstrapping problem? + The following sections list best practises and practical examples that can help you pull yourself up by your own bootstraps, + no matter if you are a compiler writer, + a build system developer, + or a system distribution developer.

For compiler writers

If you're working on a compiler that is written in a language other than the one it's compiling, you're all set!

If your compiler is written in the language that it's compiling (“self-hosted”), it probably falls in one of the following categories.

When an alternative implementation exists

If other implementations of this programming language exist, please make sure your compiler can be built with one of these. + Examples include:

  • The Go programming language has two implementations: + the reference implementation is self-hosted, and that in GCC is written in C++. + Furthermore, version 1.4 of the reference implementation was written in a different language and can be used to build version 1.5.
  • Common Lisp has several implementations. + Notably GNU clisp is written and C and can be used to build self-hosted implementations such as SBCL.

When there is only one implementation

If your compiler targets a language for which no other implementation exists, then please consider maintaining a (minimal) implementation of the language written in a different language. + Most likely this implementation exists, or existed at the point the programming language was created. + Maintaining this alternate implementation has a cost; + however, this cost should be minimal if this alternate implementation is used routinely to build the compiler, and if this implementation is kept simple—it does not need to be optimized.

Examples include:

Please let us know if you’d like to add your compiler to this list!

For build systems writers

Build systems sometimes have chicken-and-egg problems: they may need a version of themselves to get built. + If you are developing a build system, this can be avoided. + We recommend that you provide an alternative way to build your build system.

Examples include:

  • GNU Make does not require a make implementation. + It can be built using a shell script.
  • Apache Ant can bootstrap with a shell script that only relies on the Java compiler.
  • Bazel does not require Bazel to build itself but can be boostrapped with a shell script.
  • Buck does not require Buck to build itself. + Instead, it can be built using Ant.

Build systems are generally easier to safely bootstrap than a self-hosted compiler that may need a full language compiler of its language. + A slow and inefficient build written in shell scripts or a different older build system (Ant, GNU Make) may suffice to generate a minimal version of the build system to bootstrap a complete version of it.

For distros

It is unavoidable that distributions use some binaries as part of their bootstrap chain. + However, distributions should endeavour to provide traceacibility and automated reproducibility for such binaries. + This means that:

  • It should be clear where the binary came from and how it was produced.
  • Users can reproduce the binary to verify that it has not been tampered with.

For example, a distribution might use a binary package of GCC to build GCC from source. + This bootstrap binary is in most cases built from a previous revision of the distribution's GCC package. + Thus, the distribution can label the binary with something like "this package was built by running <command> on revision <hash> of the distribution's package repository." + A user can then easily reproduce the binary by fetching the specified sources and running the specified command. + This build will in most cases depend on a previous generation of bootstrap binaries. + Thus, we get a chain of verifiable bootstrap binaries stretching back in time.

Bootstrap binaries may also come from upstream. + This would typically be the case when a language is first added to a distribution. + In this case, it may not be obvious how the binary can be reproduced, but the distribution should at least clearly label the provenance of the binary, e.g. this binary was downloaded from https://upstream-compiler.example.org/upstream-compiler-20161211-x86_64-linux.tar.xz.

\ No newline at end of file diff --git a/site/blog/index.html b/site/blog/index.html new file mode 100644 index 0000000..a2c83c5 --- /dev/null +++ b/site/blog/index.html @@ -0,0 +1 @@ +Recent Posts

Recent Posts

    \ No newline at end of file diff --git a/site/css/DroidSerif-webfont.woff b/site/css/DroidSerif-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..3d2bc9557855d8bed60d47928871541970bc4747 GIT binary patch literal 29992 zcmZs>18`ipvaLGfcl_aERdp|DKt&1`-+^&gu$007uTsgb_K z%)sf#7YgRb2IBt(f|<34=?{kj02mAb0K*H~QVOW%CI&xcT5bH;F#doI#9^V({D%Yp ztPy^6f*+8;SAb=k+c>-ba11~BBLM&){?kq3Mb>skKX$f1?Eq^2L7$6^aH5TY`%k%c zA3uKh|M>%b0vFjD*q8tS_CNguT=~S7jub)2KyW!Kq4L5S2+j@w;#9blTrMO4A_5vp!Kb5;&F21ra7-FVQ-%6*1^F_? zasSF_ux#vZ-9=l7mYXLySd72MjhFlW)6A5=rci{0ocAugaLeQK(`_&Xu37>`@98+#VyPM7TaRSW{%53Zc!x?6R@Jl8qyp7gO-{?h|4D>YR!cdH|35;$*(~ZR;+hfP z&o)alD@0c9AWr#vnk&M@I8H{G0mdZ!ofpbTavPTMf6KjN`u21WNoI(XJzlXsmZ?74 zkv<-pK4P*yrm8;b5(;u4)UKyu`UiHRCv|Y3mTp^53s5 zK3cb?wB&B4pvN`#e7qe>`uoI`h?S2HxW9f7q5so`quNxMi7--Nq(OfL6L9mAy5=|B zz{qxKGK20Je$6w0G%$eQ*8-wyLC0%>D{8@()$d(KNSe%xo*^F&XH(>#I!t{c`9yQ_ zf%qf5f!@{sKEcE;&$eSi()yTXg zp5iVDSB2}tjNzM43-jPYxiHT3ON0K8gs=cE@Tsv|S$(^5LP_H-O7XYz(LU=a_6W&$ zZ^hi;twwB3uS!>qusD**Id8kxRhFNd-iF|i@B(u-NSN>c7FS~LrQQPOpwWXR|zQxCarq9y`Bdx$|UqaPyU&S4qu=ANz(@g zuQ*=HWCtjS9=?Z?8v23R39OYg=!ZzZ{fhsD4H}61g3tYB!2X|=3F>E0zyknT8#vqk ztiGWCtxezG|2_X(e~k1^BlI(Sdd7PCxS|$Q0|I`-2{G&GOBj6&4D<{P4D}2_6=L8q zFm$@(2lT!GwqP&A`CHw!mSmExzY4Fjk_{L{Km=j)M-=JJg$jD1U*G0ZI|z zes-1r^4Hfl_1DJ)69Yp~2RUF2e5HXw_HP76sP{K<$2`OMV#YOUE9faA$R{WwD9J6% ztR5dIAHO4w!?8eXAC3F9~8L_I9E+weRYMCqqW7u{q^M+Xh^WA$lw4eNl~GR z@!ZYV^5Oz3OH-qZ^Wy_7OiZ+_%;W?uO;x3h_2mUFPFALl_T~mJPiKdZ_vZ%) za8RJIP=6mWQ9-_u;r<>n66V?(cRTrXYP0+7UlZw+8tqQY$+gFGHtUTJm+^nN>(3Wk z?SJwpNLlYy2m1o8L+fcmV>Ms~VPH-V^_LG97%Ep5Q!~L0kC&K8SexX`^jn-?-(slM z+?a4cp|)C~NvLWzjm=Ljt}f4V80zfKSVAeCj;2gGoLdkmRDKNr_!XRb{u@P5sbBv9 zssK|!5TFO(^MfJ4G+-a#4sZfk0Ez*&fKGrXpczmK5c!4p-dp?X-JD3^2+-KIj|UGXv`gQ2w}nQ7$4;Tgf9>v0=rg&nVVNAkpV`CF5xZ2M~K91 z6`s$+&E4QMmBuVR7GLgmYBjBNOcK|(2{y_0DJRj?0C+AuKaYuS3GhNKP+%To)Ur{WjII&U1LtRjl;hM zF76sKFchX1@6quWD}FVz99xdpHpS0&1TiDNjfhKxF^C^b#Ito7>DH=O7PQB4Mbuk@>Wz~I5blcCHtlZ?^8B0d>b3_u_z;6QO6 zZj62v3cN}n4RuILaqovVfepnk_vEt4H+=JC$lBQ9_PuD}^tyFpN^`x8gsx#A8gd&_ z`a_BciK)DXVoi6_fE_5lPYWdaAKw1)%YtaUS`pz%X>x&MRE6;LUEjDHk8D?Mor)52 zvn#hOouiz5*PZGb2Fb>Q?iV!b&6s}wk_vd^p{ZsuhXWP%WcU2eZ#oOF=s@SIC!g=G z)BJCUfdD{1?<~Cg+C(R$x7K4Cg=cK6>w3Mb#=EKHKjYJpzoZ)fNUx=FhU;*LU7t1~ zH6(-}ND2`Yv4qs2U_uN|0U#FX|Fk`0D}@Y-vrshGbn$BD#U<%4A0B5P+lriv4<~8k z!ry(qiC63Q1x_BGz2JRkHE6T!^uD+AM3mu0BmPOND#4Hz5b?;?*>I+<+=OA!Cw*vX z#Ul374KllH29`K6mE9U@#SYy&#Axk1S#9tVspTd6w$w`3zkSv`gzFXTP?s(9e;|K` z9&k#Dr@+7j4mR52Mq^)$s zU)-8<4P;QnB+r*{7KGL$7tUuYj$_WD)TH!S7;&woT8>5TF@}xgszr2UhfAQFb<~`9 zRxb8=!h+FT)z#~E-em>EurHHpQzcRVMwi%Qqg?&ywcGK4XSNIX1x!b|pX55)lMO`d zdx!~9?r0P;rYAJuI1$n#;mH*qnK)C>qv9z5!BZexH1g2Om6Vwie{sNm!*!=^N<8<3 z9kd1}_*U!`Lf8&bNa6Tz*DK0-CXQ(U*g1n{asCWDF}-YNcH|>H-J{sVtAv<}U}bbJ zp&V0=UPNyx8&$Cm-XSrz4wT}`b&v!|D~8lV(amN?9nzq?H&`b#Cxjgw)~{yDRKrX< zj|@a2kgMH`aaj2`fDvc2p6pZ#PO9~+O0Cjd7Yl38-5EYT^85W^3QnXq^?S6Xy|PDp zj2?P&-u9-CpM8IE zw>wem81Mb)rrmk4J|kuRU!IY$JRduY76r_9WByIWu2Dby%u`+;{VDmMxo7+$e2R;H zKXK^yKWJ?8@_YOo@HmcV{V@}j%JPGyFpJ{6G7gBzDU1!;Y{^k02nF%AM2QKa5M!eL z8!Y1)>l7b4WKAKUd00o;(ZhV?Vh*0}E_&j=F2X6fX4$T1@#;4QUthh%HwoIE;X3$mwNoNqz~J}-s6 z0fed)`-oCy2yt(Q8333QbbXxd6|fT6uDuO7t#XqC`>3#8m%vxGpdNS-%qpSAt)8pj zvQuprsuHx>4WWNuy6CidS-BTq?^8cJ%jV;*G2d48 zP>?|W4~~ntVz|VRcR4ngh`3#=y_j5e0ToW1tt#UoMrP!a^56L^YK`hS^&s-=PJJP> z*UfFyIDAzlGrO_nsh-xF+9lE_!OT1_LVe>yEcyBSUhJj>HkJ)KuZ(qyc&)Z*gQ(LU zQ^ugQfEL8RQ~Ozx-EFij^i8m~34uk$Oi<;7__%T*&Wws&g#Z}woH1Ne*I@?BMNrg+*X*&E#ds z+~Cv1;0R_uB~;q`(+;jt4qg=wc7bLxM++`y1rF&NT#Am&sX^#%RPbUqzDJ$5=9`#% z`HPjWmu{4=v@4G^?{CSq;SOqF|8hXZ)NdN{sQX4^G=$^=bI>rwK+0T5G7B*vk}_k? z!(VbJ`>6VPgLRog5z8n{EwW`jI;2Gqw<>+aWE)sF^)R+EYEFOoJfrzkIXq-QRZoih zF2$kAPmO@1)B4;_yv#Y>HDgfPWL1!)=+Lxja=TQ;Sp9Jg8ea~hB@xr}Fx)8~${_-O zA4eg}j&jb9UaXiuyzma8TBtb%wYomMyy>+sHJ?_2byjVyrn82$3um!kYMPLCo^XFJ9&AQ0L*f zCp+R&)N6@YU?gL(LG+yz>{Fdwo$9coNO9`!Q8Z&fx_tJ|ebW3mDX($pkPM*x z<|sYq{qnjmZW`P84{sE|^RTsl(r#tV4UR6ywpnxC4Tf%e)d2bPW4!Tez1_{P{pP*K zyX>Z2?di%Vge}YK<&R!!=0_hszVAyGbA?)t2e^YX6ig31>2_hJGJ2BI{=8LBQd#6- z;Xnd-*t~NF4@eL;vTkHnk!dzK#6EbCc&Rd!KMrT zL+fij)b49GX_Ea--`makEtwUplk*XdKH9zG12Vn7=Jz0l#=)}8R0S@r{Jr86`vzu^ z>1OEc>lA;zWG=Wjc#k3ayonxuUm`c(hoQ>wbEyHB#KUNGcUX0Tm>vA~olz6Iy~==- z$zUBO2qB^Y(tYgRwjqe=D|sg-STossM0A`w0eF5f66f@ag^3XsF?0u@J;*j=DP zEol%)ZiMY86`_aJ@d)|I2G0+6n19P~zsY#QE@vKPu4&u&WUd^dP$V%`!^}oFf_1|1 z!a-UOP_(l@HF>uGGiF|n9p1~h&OEue;N-!qkgT-4%%C!~!m53I>9yWpi1+;-c!^ZC z>yJD=x3k>5b<61EA9*5Mc6sILZ?3%VFs=1fbHBK${}-c^?Rddj$;GwdHUEz6DgNFpIuDa==VCe0nK}w+hIEw?1xP)Le(MK~q_@Pgv^4kAbIBm~w}PQMVe< ziAX&fs9YyO6gLRkT1r3mi{3HMJ0t3YWX_&0@fK79QiML#QF3$!!M>om;O|IBegQoy z)RO&@QRl-mEd|Xl>`!V$V#IM8+ni|?$!-3rkDI-lJg0jmrz->>nvUn5uhK}H(-D$J z;Axzn%`h&9Cn+~O*D)s8tS2}i4<_7<6MNiawIdAzWs-DUg}7cS$kBCZN#Pfg5h@88 z>B;C*$~M1LpqP`$;9_RVjqaisRrM3k;PQeP5sQf5)|%mj*gZ@jT$fG~SqUr)@b!%< zc4i$wwbAk66GJHoVUFg2VsG=8vuzeTfTbCmOP*W=O%3Y@pZ;1 zCKEP79VZn)^htr!)M);sKv~PghV?R-5Bdl=_L(v)uZYs@>srOO-sYDBx3_QcsBNLy zD+PblQkg+2jIi;y=I1LGf9KkH9jytoZ!55`q@i>+9S%0QU7J_iU{~8+ zhReFXLGjac7(lEv(R%TByV!jV^qd`A9NYZ)I+%*B>3CTrhrL3$oBJJyi+uAJseuBi z2ZEef4yfD+Q%A9$rNwt34w^?P0!?1uFS5j>wjU6#db4dofBB?5FP=1U40R`ds;B!l z*#yDgJNTdxVmYi3QO%`4QvRbL+L|eKp z!7y@1tH?9>43P(c-Y*RoE~(lVk&PDfWVMK7$6-R2sE!tD1O?os{H{IF%yHAx^LDpF zmz$3cibXXm=K9fgm0aZ$uyRGeS^JuoHQE+%dNDI;h5c^pbJde)2H)(vyxv|>;$mstk9K)+-(dU>tctU#n7OlfQt}#qgMandu|~bSrr?`-esy37nYyh+oI9(@CsjVJ^cDxXYU={DQ`d^Uz^~U2x)#uVfx{+K|{e*(LR!g~s#y94vmOgQBWkw&s_G@#aP!VPEhrI?9 zG|wVatfx-n?vqvr&mN&cn&WW9qS(sJ3O28K63mtr#zh(~zV?;hpB%$UoGgBQRf??% z68uOYJ@@IQ2&{sK7cbEPd(3RL+LIw2VeaFZ;*%DP#{+S-{zfa*U=Rj?!G6Hw1rYEE zQeNL);_zXf@U)?Max5vy-nf3?N~9;WVFf!SrDy;v3x#>Vr0I7NA|my1ibU41yzbb7X+lYpfQ+BCpV#> z&bE+prk0c_(6lXU4Ul(vuVeWlv!#pjFWqthME;CFP+pd-p`9YRng-a91^0F!v%jtM z=@SLmdvS#*=gMdI>n+@olXMe3|6+Eehsd26Qptv}Z#LVErxEi;oKD-cc}&il$Vof8 zSPdK352e6refcmB4s_e%OnVw-TxDW)-?zmCY|oXg$-e(FMM}Vwx7Sw^+K=_Q=|ieR zohiCuKF#U*qbaT<{TVzKV+i(VWe9GDB7ugVB>RxIz;f9md4Awk)}9G-{M{`kfAYa- z&78kipI_3|@zZh(QbGe>%Cj?l2RvaBJaY8R?)#Oa4V%igJ$>CF`;T(>aLCj&i-=I0 z0vw-?TiexxlnRzj`dAni(Yjk)Fr&^td7SvAM=YB#A>xJ?Z0^t@vIt;oTwpJje5=!x>+$LswoK*stJk74>$~y8BXqhh)YYSDwcG@ZB ztYLJYX0kDSmZh@piy&^F&+^+}YdW8k?_ay`*IS=S-|mIec#|z)pW|~|E_x-8{F`2~ z?)tpa{1$GcWKVj2w7VcL@{V9HxoAXy7yu*W&8 z3&s%di#fYc)UhkwvD;Vpa&1B8mk}-2reeMCme55OQF0OD zhle(DFrQ8k>H;A+XAJKQJ764JDxs#Ix$abuvkUa+&jkU`S^g%9tMY_(c1+7605wXX zsV?&Z_!{VZbjXnj{x(!O5peFX3>!g$q9Ym=fF|=y%MPPCsN-N4-h^?W|fC z^W|B$t@S~u!FOYY*YnODt_Jj|WT3oj=)eJXsW!yyejExjo~Lt|@Xrx-1h+voK~uRU zp|HH+l_m4h9xfpv`n1<4$@5i@de6mU!bWYVQgV?H=%K2jC+R3v1W8MO*l_nvj=awO z%2W&M+9`Xs;`-TBX#35>Y9W*w!2VZUH&hczFdWIVK_9`BaS|`Aw(7m zZ(|VZ+5i>VdSWmFSHS9~*`mJAJyZTvi6>}aIXdF)%)a02*xGHwwcjmzYesfA<^3`L z@i^qa!@<68ey{2q{O@|F<#KYrXNFA)H^hvv4{x+=UIAWG3DP#tJ~%!PMyu1Hm86&1 z)cSI|x~4%n1J`Zf#s$Si$6jRMQXD`MXR=cqS89K#3xoLR`LQzNRNj#fODZ2`lO#_1 z?28Wqr{yRRXr>43DzRK57^z;2WioW`a~%ZnVB8-PacPSrgD7(3I>WaSqGW0}>cL_K zvqJk=-;&&-Ys-rmb&_)4a>x)`RMRa&Mu**5%8w{%{%zk=Mv(*M-B~1EHV|F!1=$50 zE)F|uNR|~^P}nCAmX{QPAbAH-V{;%((NYkIreuN7*&8TKARtX4KcKaAd-=v5!p2mT z6GXtLd>;^if((MrVI7(p;z0Sg80m9hbaB~wRCctm45?H$3|OtpBV=XqBG60Tii}H| zo)VI#@iqpaBKpwKHkcL-m|>G~!(|yLl@Y<3VRey)an+V+`7KyMT3TOhK9dgp$oO)u zFH0&sC zz>^wU^|5MxVeh7sCrg9hQs4#=t3_Xv%3Tt%Q4$Szp12$QbIA@mVjXE&On}uA{iE5B zS);hjR?R%QfmRXNlGxIIq%Q|i4&p)f=&riOnN2c_& zl1br!mFEUDqYM(ajDWMq5yeqX*^hX)fl5dp7Hu9#WNae;T~UAB1Sv1!$DuWoaNJOU zrnbwh(#u?Cl$mu%S(qDiScvY9%#$vuDP?n9NHR)ZCG?uSMri7ok5+>;r!gyLI!dnG z8!x%s)G)0U`xcbUONsig1vb%@bKC#5+! z?1`8eyTCY|nvCemiPIIBlPHax-|+hCs+QUd<7Cs7bW{vCf5X3ZJ@-A001lJ4NPpkc zj0d}qs@XNmC|mE1wH1821G+3+9o9U!r;?NBYfA5SiFQuzqv9tNj|x*r?jxGjI-~{< zH0BI2RA;tio5Vv zZsctne^9`VPH3V)cqGrNiFmR@TXJo*n`E8V#H7t9Pk|CqfI^Z2xQKFVM~UKB9nIBQ z@j($PBUdw%N|C5tzgmo1bCXIj=^5;qHxP`0#KIFHgb!HqAVybc0@VcRi?kK7)}-~O zz#q;ZINxAC$9NR!KDEKlmMN%$pU}PE1jdMIOTNM12jCN-PlEff;3MC+zKaGvdb`n* zA_?H_fU>b_mjn-bg=+_XMPV=@!`zZlj|rvjjDU08A>zDZ#cgysg1!b5Y=S(yv$*#f zg?OFzKP9F+YeJA#V7c=MYPEb``&OK zRWq3&p!PwRxjSf==YN_?yS-)p{#u#$^K?8& z*}at4cH2Z=$HMye+3&K<+e#emBHG{leDOLp=Q7BjotDaRKb(I}!w30rulU&q0=0vWFGKGXq;mN|_;R#K) zA(?4ksvvKEn4excYv_x*%UmbKNGC{f2qx9K=v^vNMq;Y6iDjdk|8K3F@hm`nL|>#_ z^brG^QZhoHa90AZtuT=|pBlOLe1P3naUj&qWK*f&`z4Ka%*)r^>{=Y@J}>Inj!oBT z`fP17&#LP!?F?J5*yP(DQzMFT7GVap;2!;k zVGoQ*Vncw_0fgk12cH1k-^YhU!1Pn#2n!;b6(12JMT_QI(K&}*7YHT>8QCkLvDLz= zWTESIMPx|prpsH8lB26a+sWrRsm{o1y)h)at`1UVQvmu?)1ayczPlQmlZnaI zJZ%QN;jzCtjX&UeQw}#j_#a#4ye0xO5Cj=d6`FGsxB8TQfE`7$Iis0XkU*K>$)Zf3 z1$?$E)TVz{X&V;HT1^?NqjY5wNez$V4qhZ93t7AuFxJ*80fZ-$E)6_kLZS*o;h}A_ zMOSK_izxs8RXSeFJ>&AuY*PkbJL8hTpB)Vsa`CP?O zRVp#)y{_bhRuSAffGT2hzF$wd+=KC7F~mRIK*cTU#9VhV7%jv#cWPQtT_>#k10mwj z@>9>E7f>->Pd~OhorTSdqILCy9J?@PpsW@l9wB*jqX~FCO01t747Y+v)<_&#x&8Ry z9LVYxa73Ale>H$f%%bj5QoV=v2)eZY9Ay|iVd)Nt0d=^~&a zaxQy(g7=YjoOF0|TG7 zMcXuqHAlJ_5Gi8Ee$UnUsHRpgAepWxqTqbmWSvh?rVE|MHo&fn%Ha7|^Rlu9@VHcBh3 zb4c4L>>lmTf;5NiW1{zYf_#)ymJ3`@!L=`Ls#h;LtG1BSD!rko46aG6VqU9q*Su*> zzmjqNBI>>V6i(+h83Nm;V@_ufhX;WTtg?)0vf&7LZs-&#CQXz@6~cHaGTnbl>XcuL zDE-XyygjFY(o0kwd*~m&!T7*nUeUU7nV7Qczb2& zqTAi`E$0n9XN!zW@zh=&B^Z)tm4l(T4qh%9BcOPpr;}ufDj)ZgD{Ec6}5^%fT{tcq_POS2djjlvkNEIdfH+HVen zvPembH)r&ynoac$;#|KkC6{KqkzX~j1r5q#l2ARZs+w-VaBoa)G?kK!4TTPE;LwKX zc^ARl9+WX~Ve#5(dQ@7id@O5l_fNk;GbMn?H735rq9%K_)n~R(U=dbpTOpX%H0WFc zYCslMQ-oYph69hJ7I$r_pwcTqSk!c&aPW$yXo*~7EJ-|=AnJ}0RE!aevvg@bqnz29 zA{0^Z>pdQsoDR2_hghI0+Eu+WbmwQ+#JaVNU=~7XLYxqa-Sb6#bUDf#TFz-iN-V6( zFKCDQxG#tEhm4EoAHD3_IdQU6OP@@LQoic!Ep?~onhsM4lUuZrZ7qv!o-koiPwvsgphEh3)G5dC6$Y9)`4F*c!j6#VU?E%** zJUqOB?c=AvHO# za=i#W{oN$Y%w_wKLw43C>VyxEKtV3aYXU9$-%d^rH049akA3l_w8Je*cumFf{& zOVY$^6s{hh)a--BZAP@@S#fzSy;|>)C{j6;7m)IR_+J$T)EtKDt>kE+D?V z(VZBEhtr&L;n`G&7T^0dL5reZW-cz{<~3E>7^H9CxBlkA$GsSYrY57K7NFKv$PP4o zNfm$X4D*%Wk!JTYRzZ**USJNZg61owsfSpL+N?`0jf!(7p{KiIgqM`Dx2~r&x5o23 zxf7|tu(BsDYpj{@9PNuB#}|qG{!#RaFs>TrHiNEzjk$UC?w_VP8%bB`7mbyKVpxU8 zl_ws)KR#2a&y$;*=_=H!bm!~$pYmed?2J`n#r`zjc%=+2vei}>9N(OsxQVNoxjnqw zW$^Iq6zM>);ULmkeJFvl)bn{TnofI*Z(RAgy$)Mbf zIY;G-&76;{6I5Bgl|pVAGdsnLmfJMCUSVFYCf2PoX?co0 zIYYF<+~z6-xAeEuVZ<~DLwY^ypyR!4e7Cf(BVCqzDWa@69SLyx>_B@x^LDbQt#}nL zB)pK^sPi^OB4LaNJ_--SpcxGk?2;kdCrFx$47k#%MF&r*kkK%ydk=>2xLOl83g8qL zmS0qhO1q5h;S#H29#Mtn2Xzj2wG{2YI1j(MoC&xoofl`Xy?581Hf&k?^dFRvm*l)E z*Nk`^nKiR#WT=w8Y2_nlb%l0LXMK%^#6OL3Wi;2UuKNyS3*m$I5PiYr`EU>QKMr6? zMXDH)k3r9Mg;Mq{L#32kP$?s&K>#2ht{> zk~E3-dnjmUVtlAjbT&czvkiU*KxE||bLdM#QX+ooD-zgc)crLO8Nf0>DKJ)g3H)tq ziP}Q&ItJ?&eR0~T$^9JbYB#kavW4Vh1p9Tk<`fLF_57@!5Hnwv+}zllT>C02qev@ z{5P+?BWw+Oo&*KsS+CAi)h@+Agk}^)-MlS$L#-i=RBH&SAo%vz=)d6_n@$$Oay?udkCKknfg?x?(!pgg4r$uYYZa z&!0E&1l!7f%S?85Path;z*g}@t~3i8SH_ zG649F&Y~$5zh6uIB5i)|c^<6UhH+-zs&Hli!&WsdHn!h5MSF#Xh+s6Ccz$kXV8ecq zrO+DJxc(Ef&c3S35^vVd2W_8Huok433zt_)SkR3N;a3W*;sDkcGvZ{YbyhkZB&`3# z8@6GYybVZkt9uoMGyyg%O*(`pc>GhB`2^ezk1&Uwk+xQn6n2+5V=Y?uN@-x1ldd*a zJB|Dd2Q8V9RyEphe;sZw{RZlt5cO~ezGY1C)Nz2chX6sr%pACiMIkyMahx((FqxXL= zU`#QKi!ODlf0!>ytLqom3m4IXNK2nXiO;Xr{BL8l^{iCRc`6_Ms=HklmOb9B+;m=M zSJVHU?pj^rKC2`5-(H7_t$(u1*+xCGoeVYGX?<4xYr=Jb3L#E)Hd_L1x-7`px4PO| zQ_ia>Qv}}-i{aI00J}&Z!xC08Q8~F;n2CsiOgA+*iRrgv;%50fa?)E}Hf<}-_hs(h zvU+%~nPSYWtKwoGzUsX$8+(y_#m(;oWem2^{Zf+4uT`oQb(^F&Lbk+)UO;WgQAeKu zU$ARU8p;fp9lQqNHV{!eprs(QcUU&il8&;Ol`EG;GJNtt9SnCNfOBHPL>$wv4$7F0 zBaJE;xy0PsvpADTBXv7qQmoYa6_!x4ByJT*yJPO%MaCF^xf18F13UNYiOFhQ9p?#s zl@?x43E_+&Kc(Fb_GM+%XdIfDq(Z`(3>rTSh@VxtKai)5QS1WZ*8F^>Ls-aS<`)VS zVGCdgd)&gfXirS8I86(L_yrTIN#W2eqz(K9qoaVXQ{=J&;$&~Is``6*cax=8CEcCxIu5&&zsX_7_u+ zd12s!B~?j&6sjgM<+LGuQ5A%)#La3^VXT7ldI)gUZ^A}()wo9PYG76AC__nFx+N%+ zwZW`}qq7B(3MGGYzx6Hfzrj9 z4fWIrjM|P?x?>p4*bv9(<<~s%^KAM6Yp3FSy70bF-tyNM(^cmS_qs7ddajlCq@Y_< zk*A^Ids_*V*AN*Q)tTDUOcuB<1rvj;MnF#nIJ`GIX0B5P+hkm=#R`P@}fX48?2vny+; zm{~)d3~gjwA7v2|zdh3Sj8-_Tskkq6m$jLvVe|Jz5T=S#7K8RT@P{u=psE}`)~xe7 zFGL(aIMwUWRqBzZ?xrwAz# zw_pN|dC3!Db@7F2)l2^3O)Ez%fYd74xNv3^(e0JoU8*{&OTfSz19-6ggON z%cd3IqFK#MHPs_ALV=rvLlDu2M~P!r87qM@c+;gPoE5Wh7#7j>4;zCLx!C2o!?DA~ z5%VGLjcX||n2MCJw`IFk918D-1NpfY-KBNF%Ef9k$M55~j_ca44J6vrK_mQ0RuZx3v5aBP>&x&PM*m^OPirMp&<$o8x_M4Fz zCHdQB@~!26vER?DVmcqclv$4MT;Xg^uh!cquEU?-GTPmA)#hhZu_eU&+2ogRmSW?H z3tW~KDE3HhcGvSuNPH5J_m(m-9rD34F&xCfxl3E`l8`KgWagZbEc5Q8l`|~Tgw#o| zTYA(2Wd9C3suaSulmojD{1(*=ju$Uq@JM6Ol^R0Jz;TICXG$tkasYuGk&GNu(ALR^ zd|7huAbb>StG~HA^VM5YLA91yg2BhQVX}+n?D(=$)#dTFcuB8vJk_))657M-u#kFy z>FEpHd}(q=czJs>BvXXzxah&fCZ^Dv5};zqlpEm|3rIgkx{ST(1{n23T$3gug8QqaR)eY;_OxQ>5> z^c(NZdEx1qHq2_xUPwbUHmjpBaZAWowt$3E(W7Cdr4VDHh*P6r85d0?&4?erF0W5} zG)x=#xfg<`K-K0|etJA<>>#y^{jKcYg)}~SbAmkEGGs-yq0PbXVyQ(R+iBY^4h)VJ`1S9D1wDBNC;dSOsu5Fju*$t zb)~|i%<$5d1&^(2uRqK=evAn({j~~ewt@Gz_Z`xoc*nfod(y{W_Sq=WlV_MwX^D}e zC9wQ@6VV^LG_7Zf(=9r>9M`?m=z6x^T9Q*G3(TX+Lg-_?+sR4MlARpjYC8nre(J7} z9jmcY4a3;-#WboJn}@pU{HnV}#RH1y$K^v7`ixCO@p5_r$_@s0Wmf<)g$sn-?Pk+@ z)VWEi0y)}vDHby6MQn22ipHfAQbo}$Cr#bi&5Hb-1`e!_*t0&psg85%k8OF>t*ioL z8yRF))T!5EvM`$Dtt2D9*=*_W6Rl3m86-b@Y+iE#?nV)ti}Ziaoh_S3m!_Z=jo6O7v*5zSKbNHal<^WQaal{QRZbSi zl66l-iiodD!cHe6jv^pKhSV)e-F!X~?Us(1116hT7twvSR)`a0WT(KEm%G(Y@7yJ4 z)#GGu^yGl?G)pN+!;3mc=2gk31fy#E6w6i7?pXv}(W=b#CG+V8Et5duMueCWmELSD z*oc*Q3LQ0L3@t=^95sOysfxO328$7FcHf(DeJWhHTjko%^L)l9LK3K=xRuH3;N8_? z;MDub!O+Lf(`?``Poc}3ji31#dU4zqwc@$}curtDOusXtn5C2lG-)V+=KD^_cqWzO z7F(o36rk9&d-m*F)IV4Q$G;@UJCXD2`d-_}n)8HM^2}ILvh!+cOtQGr9ECWCHcTN* z&kq~jKK2~6NcK&kJqib%cYVa596WfRG7{EGkz@iBM5zT;SDA$1x}Jc^V{T2OnG89Z zZ!ss~Y7tR)nA0Ps!-->rg0KrZfd7ljL&gj`MO(PXZI9z{0t!rLKE3ZJQcOhEM(+j~s22c*R1rB79B)m?|4!&R%NbnbtFe`YD& zz9^S$^SfX6;7;p$!FIa5F?+^e9k_b#XLl;WZ|k_za4(gj%Z9_m7+r=;KVM)&8CJ=n zAW)}yQQ!~27}J^INYiD8(c~UAGS-(y5OvP45LFFcNn>i%4O!J;Y6`W{^Qvq8UW25J ziU6N8OpSyl;}t-=8;6scoXiO2;l(}0GOFb>mmpUeHvabzY7!g!)Hu3;V9C(bq#O>6 z+brj%ewGi`IbF=@ii?-_X%IxXGo$N=avX(rRkDpBANQJ%i~?zQw>bECrG`gqiLgQ4 zA2^#IIxZfSK2n%3I?7LtyWH939^d7tzYn;#BnXIFLJr_Ec)fqW4zI%hNFOkg57_t? zy~8;Kx7$}W7^J|=NOZ&6oGV8_kG_{1aEVTl7?m>j$b^q@P%yS|F$TO)5YROK1vO&S zj%I+7r(^b4v5#+A4gpG+o~)RCL_$+g>_9}PTA9<9U{(?>tGd6ZLYoQ@(J@z;<$z@B z6IcjwBFH&wyP7RKUBYJjSFKf2W%C5C2LHT3f~UdWxmyRas`i9yiDTsy<@;c#eJDii{i2{|XN@@XIR?ab59zL_!)}A=IiYF1gFoRJO7TqRvsw z#)&bxJEPB5VyDcQ&=W2t%ZcV2!DohTGWfQY@q9p7K<h-K*bDfwk#@WFUiUXXOD0z)x5v@Jr!qH^OEZKUi{-B?#cFD{rZgTJoW$u(S4N-UwejX2)G&hpY!IzfZ z(3sA_7vf$AcwQ<-EU`PBK7X{aqjTlR;_f|7?I_#;*V$-eti7YNYh=mJJ$@Lw5JW-r z^7#NL`kXt`EewXrRhqMDqTIMRu4L|pNEhxKz|;Yy$pxB+$#5I=V`P}$G;25wF$wV{ zdXuFj7KC^RD`ZlcNm&0I7dV-y8ZV}_6DgA64s8F1%4Srx?0sy@wmT;Rlgl;X(asz9 zt7~kP^!mcLsx8~bB*A5#`mI~mIBPS>uudE6S{09P-M%x`b3>Qa=U?9DcNj#u&933q zYl7Imj7tZF_T@Wnjjmt4+_5>nJ3DnMrO<0?95n_{$aK=2Y_Qoq_JFf;ugTQ8dRM0H zP_vMqxsA*Ve3(6nhxw}=5}5K4LxXA#Ye zQf>3#u2DOq(V4BJE3O`7e#Sxx7vdVYT}S3y1ZV`sfm;9{`R*0kvk_&d3-+4sqxe7{%rPI_SDAu{*B4z&3*Ot zeVdyxz^0F#iom7)kyDd*c>I3Pooh&Z?1!C?O;__O}{`u@#S(Ffj7 z`Y7+Gaw(Fz0>j$0RL@|(qccT=`V7U%Fo|$1-_wgHz!e1j&;zIHNs}d)y})(Fcve9c z1+iJuEgc5&uZsz*q;gr(Or6D5aXoM@n*vv581T(zvEQ&l=r=5PE}b+umrJx6G9*Ta z{}-%>O1R1Yanf{1|4EfisWn@xAug1PwI;LjaE&<)4(C%ki{I@vy`VX(_y zx{LL+g{`8(FK9>M7yqm9yK0L&NV-)0!J3TsC$7PPtiB=?PZ-`yt}_MeCMHz1S@zO< zoA2FnV!j9Qt}XX&7PUC)Efs|S%6uPiC$W=^48;jiC=sTc>2i?P0XL*J6C{T^d!Z_AnF7H)UbR7a`bkr$8o6` z4hXYidIVd)hVggQe4C7{fybIi7ojNwJ7WR77+#0;#6H-b$u%`h_ zcgz-08@e_e+EL+*buJrRHNFuUUajGS6X=xGbZWHEOVzq?s%>IR(FP`o1T3jkgalJr z={+%*n<_1pNRj(!Q*l-@j+~&M>`D0j>Fsxoj^Dhher1=QU7nggSU-Bh@Z>FH0fVQZ z#_kDkdT`gu6YFD`x3Z?!WN-PDarwPRMh^|RZ?p9rn#vw&)EM>YonwP15=J{CUUA45 z-aj~ebXCZk0d3P7UE3d;-jZC_3f6dh-E^C8S$Atq-S+m;+qWd0ZBs45l)EaqW0>8) zG2Gof+FG}2{WS;bJKMWL&h}7Ei^rSo=&kqm1oh3x173-WIVyRV(ts9fp}1<6bH{PG zkrt<}$BKJAV~Ca3RN$%u?5{!3&!!|51ayxV_(y)87N_4n=nPD5q5@1vm7&< z-!g8NF)TukhIGuZi2Au&0s=KJBOOBjB%K87Y7mx`%?;djEee^jG= z&fsm#$i|UfxGoL12H0q599c|d3sPOp{cF~joGF~ZCN2)J5(8tvaaN2ok}yAOTB5JU zP@M2m)@7F5a{7zsckTMt7w_DfOm4mNi{IL{>--l_Z%H1AtUCPJr>EAO`Rw6U5!^qs zX6k9&|M%woPw(x&rq65i$L-agRQ6}Cn<-m!-NmzuhmS>ZO?TB44wBj*Gg zHoz!FZ%e*Kg@Akhfg;^&c_l;bfv`16LRf}s1MJo#U-2x1eR-wHces?PL1_QXYX!GV z%jT0k0yeD+vsV`2+40Rr--yk0z4-RZj_H6HV2V&p#DYcC?Bzy6d&fPp7xY#jVb`&w$jZk9wmHRZU_%Q}}+w)4Nd*(aP=}9gUb(-onrZUz0Ew zi8{kP%sfj;sVXwrD$eM<#mz}Nz4He@*x4d%MDi|rI|QJ|=~wQ7DB+&L(4)!@8@AAs$ywb&KwZIn%|M3x!UaFb~+sO47^ zd$DzmMw>@DCl{~PaD!JN>AK?5XIv+iaJz)bXb$q~0k46q#VlK3_{jzSq7@snXc~ez zy_G&lZ+10xd!JM4EMD`Qzt}5MTfKVwiHX!;gU-k6`z(##SxqrC&8R^hClP0WIl8m+G14r1uED=mP)Yzp`F*T$Q0@ z&P(-2F;?Ho43c+i;5y~5;@VfQgvaC6A z2Rk|sjyJ-#vjeur?D3vJT~FK&+qwX3#mCDoN274Nzc=o{8c?0EEzU0kBZRZP8LGO} zrBj?N$5oJ*Zg7ei1X)DHRKSH2lIoF=a*vwjR3t4{B@-$>DpDa~$Z+$ViWGfRSV#e< zOH=GzA>--h2Y%z2y3)|^qemBv{idl2(V*y6h^6bPTd16w3^x{%a#)u1kes3?fDaO6 zIsFA3F@piMCzjKbrWrjY^mpO>V~m__YOW4-azIAe;l2QyuOoY;l~$$!O>4#!Px;7W zy{%X<_mxkZE2>yhsH~>lu_Vbo(&BK|r>?R`+`cB4s&{2=|L(qfpE5SB?s$`~XMIw6 zpHwuseztym^?02p9W>b+JH4P}+as2Pd!ysyYf~@AJfRO!SB;4>q92fTvnQxr9Z3!V z+!>aaGlZek#ia&bQlNAYWr1rvG410J*3C8pyhe0F!_wKDF^uRiRu|i-E4<+K*Tv!) z5>HhN(~X-kbOo0(7RS(3n{#->CF?Th8~W!4Z26ZQZfq#kF8yQikRj9=UcF`4!S3!r zSIm}d4>UQeyy<|!w`@;e&w-JUCp{FbpXiTt@4hvA``w~nhnrpPG3TmH1FOf)kmNhTm*>2lFa_RIb@tcgkv<3w9x^%%B5c%915MGXS zm0_4eC$dZ`4q>#6K4ofTL+YRE2G?$?7r$w>4~>p`4A#-9RW_spSJ0DsMGDt1lNw@G zv5SMZK$IrM%)Kto#aR;4N-pqnDabU+g5X9Pq(WFLugA%Th*+(L_eWrB(DE))H1uN+ zrU*{)RTjYqkZQ=KVh^n*K3_&G4HTc7zUL1>lvY#_oJ_8u&+FNht?Bh0-t#rSh*7qG ze6vnolj>caoH$l5Qo1|R8gJ6)YKz$ZlDX$A|9Y$F=1U{p*RBjR7mDhyaF@o(rRJp2bM#04qA}VKq@X|I!HG9m~YV5+BMl7 z+G5zg?XKI@b-|#v@PJ&NO|-R1o|uwv8{Ky^BUMPy-x3XpIPiDP)EGsa8BW9IwSxbm ziV=^A9MDMYnhU%F^ooMakx}4~pc?X8hZ@wl3R2-87ApMKq9;Y1hs6`|Pwq4|Mg59t zmC32ycdI{NGWz2t^iz=UD;!p%@wL&&lFsn|Gw}y;#_t ziLFhwv0REYTBKZxP+p@Y*HrPmhWs&4%P`@dr;4=e_yn}W1(`VgxH-oAg+^mP>B05a zDoQULNcc&At^-dbB1Q9(P+)@2YEKCRL~|}%8>!)?uy4wl<|!Qi)|S2^SCCf-Ej<`M z5XY>Zik3x};GBQKmj(ssz4Y-j-~P6$#;K_5Vx22FqS`B&e0~gffe6f~do57W+MEkD7En13F4+)g|{Z)8OA4RmQ z@TJ7~9y*XO^rgC~_0$f!ipq^6^*ZAD)q;GD#&VrVxL|zF*UI;7=%@qY4aE5#kg>s7 zZUgCL-p~g!mXYH%l8{kXlU;Q&A@j-oF|Jw7uLBv|7~_ZFj{aC~XdPY~8bpyAS_OQt zZU|4T>%kN2#zDp~g<}L+`kEYlxDJ%Eu!ieS^Xr;{s+}85r9eG8evZjKMkRIPZENl?!2hCqaxq=Vpba zn8G~BD&;I!rN;OVUpP3UmiSen(p+mfnQNW531)h3w6zv|IbJTA8*QD?B1NPoA+RtB z#Y&B^_=#Y@%#&EW)@0X`v#d*luIb^$bzANDUDs_0{I>A@+RfJ<$tEVVrCHYQ#_?_e1z>HzO1dJ50%@^yAiL_Z)x$L{>6rQ@bu8UdGtzoPguT9{@#?57 z4GGW+r1tD+Y~10w=qo373I0ZazlT~$J@OIo_m<%2+F3pbR=%BdIk)4GTQ=A(2OA3~ z*%nf2OJE9Ogynn}@;!pm?~QRiB+r{q2rU?+_@WITS(nN+X*!e&xz6IP4QgBP4MSW4 zU+)SS?u8o$uMWdP^NC=YOZ8yP$XzX>Kg(DXD^sa8E4p0{pFzQ_XRJ-b^cI5i|U1Q#l=P3_W|ycR427+Zf4q2*iX%2zlr5W?=CHaj)boEFl7|*ngY0EE{n^4xABE!A7gUWt_~&`dGRnmTr4pXiM4xq2lhhqo z#51=n&bNza%M=^8ischxVU<^uF!OOzm&96ezJ(l-6Rk&T1aVth~cbWP8-Xa$Q&UP zHdxk?HuX9;IF}}pY0f)^Ipj*GLmtXk2*Y+NSbQ%L4%)%_f=Ud{6l9Tx3#b>w7uiLM zG)t!FKyfs8VBsk8(lpe03hLY%uZnReSBFF+Pm1>|cUOpwW#h@Cy%CF4wWs=n=PjPL zu#GO%AJkO0x3M<*DZ6=W=M57>%Z`Rw<9h3~X3 z=!-M>`>BV8Dg5~shN>-_@Xd9xr2T}%Ls61mDb3~|C?E5k1YETXCDiu$N&OfvCCykG zmFOLzXu7qni%e$0PC#K~e+a~3CYf%-_a*VwEjW+D?D*>j_|r@0ajtf*KYh;<37@MU z_J48H5~-o$4AZmVHw35z_1xcJihlBMH$@-k{W&n2t*a;L)m)Gz?^gROChO0S2D+*l z`xn1e=8AsI!2Ja-C`B#C=`;WT!>JbEXjRAlwU{iqxL1YAOQ*}7+mFU%$;~S|wdHth zqrUz(z+>ibhsSJ@H*?>>_FN4?R$T4NC+3j;k=;L6 zM}cpCbc@i(QRDTG>>v^WEhy1b!2eZLm>Q>YDyq2hH5AL)MZ#h?&I#C!kSV)D}8XAjbsgN;N$U> zHx?sx$h7t&6;C2D|b)=eqJzG4cu#^96h>$c!>*hA5j-l6t?^6^~~ZG)K46OEDA zgOFFsk}23kCy@synJw-l z!k|FT(Z*t&Qz#RF+bb-iP%7~KTfX$dnORqQFB3V9YEqDomtI=%dZrJ~3a@9%9DV+1 zo?c%#BfKZ&7u)HxOTDM*;om(m2KsIu4{ymDsRn9@`qz(r+X2_l@-fM5uAjVzryrEr zOe)qd7bXCtx=2kdgQ=MnSM^eaFqn@aA$>EX#;&}4MmWlR+zS)1lX@sDSoAiqOkH5> zGg{93*S$R9N~xWzc&WleACuI%s+TTYDWwB)P2R--I!s5r*8U~m#*kdNO3_>;mun|4TUMjnBu!Nyp3V&{Y8{dTwDxcrmPP zSAaFM6s*}YSeyPjnl7?d9}n{3%Wc*t0(_BAE5P1JVDG2yUIKPZ9fU!hbP?OzRR=mI z7VeUh*`>Kyh7?|#6?2J%B8uujdGrg)qhF0ok#81`n&;7nX@yk3M*B61*&D9T{8b3N zf~NR*JO(~SQCuBTU%i5&AbCguw|xY+7%}Wy3cE|i01MDa-2B)AH@}2Hbmm)P$bV*U z^{;OVow5Bulbn$rr_n96N3z*DHefmNAC zcH5yFHmuz`F7nt&%80S z^vtE}&w=cZzBO~?#?FoF|1lI&O>DmoqJQt~ZHU28P?Xo}e(mqh?f>+BRM_3~%1_R- z)9>H@?S@8woXC4Wyb5A}<3HDNet{ec($|H_tn`HnB#OBQB~c_r62-1BLM>rxrcvZJ zrmE#qu(xDm;K3jj?7n<3{C}%iUv?m^Rx{PAY&bobX74H1dO6J&D{6N1K{Z>-X*TmP zG?NX;Radt+3&-V}6jY4QRL2y~!8Vz1l~s~Ya{Q@KCQiqaWuojOm6e4hbb<^k2?M%) z9VdStucY@Ga&&)d`I)z$OC85o*f+Y5y>jm4vrBI3 ze*@lJ|EjZt$F1lTAC>PTACp|d(I9-08iZR&WjZNsah%ZY?be-;Ir%n_vY#-(_>r;E zCwRlKNgS%%<81~^#_HAWr7gX2GId|n?eUA8VA1Ufr^toSFf7rJ#bUyujm#zoqKRod za&8oyE@=9KErTnQiSyIl1M4rIa!j5}PCh#6l-$S< zKmGby-@>i;Ut3>yhB&U%eeC2T!z<6O4%o-mB9a;0)^^W$B+})YTzYJJ@`;81b6t;qst6m1jN~B%P6sKJ*HcBWZk+Xq=MjGT&n4lQDh;6(5VvEJ%tUo%cftTJcelq|+zLmqEqL`M5Ng- z9M#H0az+YCCZ5tKnvfL2@{eJ3)<|?#gZx@yfYuC|0Nr8>h#G6{M$ z!3pO`^fm*)Jn#<2ApH*gsj&Y!QzBMEJVo9SI8e+=CFs=Yvp zMd4^JdYuM-3*L%Tb57VIGaxX=Xo2PzNkC{|t~eOuj~jRO))YKu-y-vIFEqX7htTvC zkC9~2Q_SD14d(6q`T3wccAJX1e6_KBJ3mA4SMm^Q9ECZ8w2yoR$DwuRN#^gX9Etd2 zoUlpeVvln|5@w}46~?6mnT~DHB*G2(D8+9>Ce|WND7;9*xsjkj+%{(Pqt;_dJhU!_ zvDBC)JibXP!D6EJ(W^q5VJ%~ttzx=iO(UIVs&eun_Pe?b%{DX59B0ljKcK$Gd^jW| zwYbngSAPe6WVjj3th*0GVAsii>L9;P#yA)Vw=k$PB&aimL7g#x8z+Pjod4EwwXp#X zHa=8nPBuWo+*gIMd_xtmMMK&oD*)T1lU z6%AN?=4O_IWbux6i5#TsSB5vHJ-O&TZ#Q84SQn)up?A5+{F(*_C}?h(Q88ap1b^`p zoG?UwC7_k~Fkcb|@{rj=1*|6MFOu_9jVeq)iOL^Wk-k$Ikr z873?0FDWTnVbXDNl%mCn3uuv|#UVv&M5JiJ@oYV05Ont-a^jA<#o_J;Gk3n;Q~=cC zDgw1+>yK*CTJOjf9F0|Bwlr5|ON`(DsR-SY>oGv|*r`MnigmGi`u%rkrO{BG z$lT7w1erKlk$zRFRE#JUqDnym^$5ow4P`uZN;e&p7N($FD46aB_ff%5U9?82hUrxO zC{5UbPA#RU3siqM>5Jl!ERk+;sACEdLzP8T9?zf>DrRJ575!@dRBKXFlbujJ#Vf1s zUf$g5{wxZsTFjqusTdEktH7heL*~%A9KBwkyVD#!miJPYjdQP)M>e@9srR+RP zsldmg&T10$#JP`0*2m}zXjOUS(@$H9psJWGf9obGLpv=)G5!{oq3#~v5iAWcqSP%c z1G2W9o^q_MY|l}Ivh}<&X*mB|E8RSx3>GmCK&f1l<>2{)yS*&U!Na6N$2~alzUy&h zvm_4%cO4!n{f_)}lQLkUBv?H|`dt;-cVeL|g>8APpmfr=m$%!`yv2i~21dK;8hYLN zmBK!^)%xn z>=qC7RLrp}o?T~B9EmC@`M;NS(EIdni?P&RE|OD++#p>C)5Ao-*9cST`bi%aq*fbx zj)m+4Qhu1ox-tDrus7@>an=o;ev2Un2dnR@^}1F|*CFWi?Iyw81~Y4kces{ zuai0}i@lngjup$;A^2%u_d-* z4nnQk|Dc-Gx@xgjn*S=5IinWqZ8y`xbTR>ERU}@yCF0dkE?1+g0W;wHMdB6YYIH%x zHIVLz?>A=Drp68{$~fdMLBEm>9pyM!KbDiSD>AV(*W@$QNC6>BUPia9jQLcrU@@v! zNThmY)Q!Eq0G*r){=owgzGTzUvaGLvmQO<~alcdv2ckiMq{&!WC6YCx7|yH4zNoMzJN_@v1uoJFEO}<_w`i8QyU8>L*u$47D zRlEbZA1k7xM%3{WqGLDaLR=P=^h&iUfacnKGL$jX;XNLdQWAR__R@wPn3>ziK;L6P zBq)(Bov0rqFGk3V5e||d=s`yt8bW&mC||%^s+uXcMHN}Biivn$oy#BJ?FA#<7Znrm z0_}d2H`@RHV`WqPwPH4)CN=L@>Q6KukiX1ibv(*|>2iaXX+<+KbUWRtWbq%{%zW=E8~gA5-D22h-i~j4=$Q)WUpGg?!r<2 zz!K&q=Hb|mT9PpdPI#SQzFk>OewyRgLzyu;KrPU8o&t5#LA77pFe;^Udd1pQFQ$WY z!it`z@yt!YSmi-a3aK?aYHQ796Z5K;-CI5}ulf+Mx5_8wsVGm3)a!9(z5-E9qNzOy zQ7qSdYh#PCzsYaR2L+9Ntk~F5F@3<>)wSUs=56{+MVJPE9sm(FiP?3#c9tfB09FmE zWRz}T>h1|4QojuT2{1+p>7bg0#>t{q7ecIh9Ko=B$N)A-f~$dUVTORrVDXXamNE+V zKB#UmY3GAL;N^#6{DSFDo5khxn{ng7NJeBLbrD2)c@A$5zKbJppFyI+inQ{IAYS$c z@OJ?b3&7ZfegBJqgw=&H2Xz0B01X=|r17@(XKB2eRtdq2w7A7_@BZOCRU zS>yOcj^7Gp6134DCyJlt`1m~`Ng8j`fM+;Pkp}!2`JIddSVvz6j}DiOnMR|>3&)E1 zQ>JvAqqCj%oexlL%Qx#9t8%bnBR^>EF5lW℘TH^-bKv^dr};DU`K5Hlsyt6T0kz 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 literal 0 HcmV?d00001 diff --git a/site/css/reset.css b/site/css/reset.css new file mode 100644 index 0000000..bf12609 --- /dev/null +++ b/site/css/reset.css @@ -0,0 +1,62 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0b1 | 201101 + NOTE: WORK IN PROGRESS + USE WITH CAUTION AND TEST WITH ABANDON */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, figcaption, figure, +footer, header, hgroup, menu, nav, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to define visible focus styles! +:focus { + outline: ?????; +} */ + +/* remember to highlight inserts somehow! */ +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/site/css/screen.css b/site/css/screen.css new file mode 100644 index 0000000..4a30ec2 --- /dev/null +++ b/site/css/screen.css @@ -0,0 +1,298 @@ +@font-face { + font-family: 'droid_serifregular'; + src: url('DroidSerif-webfont.woff') format('woff'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'linbiolinum'; + src: url('linbiolinum_rah-webfont.woff2') format('woff2'), + url('linbiolinum_rah-webfont.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +html { + height: 100%; +} + +html, body { + font-family: "droid_serifregular", serif; + text-rendering: optimizelegibility; + -moz-font-feature-settings: "liga"; + line-height: 140%; + color: #333; + background: #fcfbf3; } + +@media all {html {font-size: 24px;}} +@media all and (max-width:1000px){html {font-size: 24px;}} +@media all and (max-width:960px){html {font-size: 23px;}} +@media all and (max-width:920px){html {font-size: 22px;}} +@media all and (max-width:880px){html {font-size: 21px;}} +@media all and (max-width:840px){html {font-size: 20px;}} +@media all and (max-width:800px){html {font-size: 19px;}} +@media all and (max-width:760px){html {font-size: 18px;}} + +body { + margin: 0 auto; + display:flex; + flex-direction: column; + min-height: 100%; +} + +body .elephly { + background: #bdc0ac; } + +nav#menu { + box-shadow: 0px 3px 8px #ccc; + margin-bottom: 1em; + background: #fff; } + +nav#menu ul { + list-type: none; + text-align: center; +} + +nav#menu ul li { + display: inline-block; + padding: 0.5em 1em; +} + +nav#menu a, nav#menu a:visited { + color: black; +} + +nav#menu a.active, a.active:hover { + color: #ff00ff; + background: none; +} + +/*nav#menu a:hover { + color: inherited; + background: none; +}*/ + +#index { + padding: 1rem; + margin-left: 2rem; } +#banner-slim, #banner { + margin-left: auto; + margin-right: auto; + margin-top: 0; + margin-bottom: 0; + width: 100%; + background: #fff; + text-align: center; } + #banner-slim a, #banner a { + border-bottom: none; } + #banner img { + max-width: 1200px; + min-width: 400px; + height: auto; } + +#banner-slim { + padding-bottom: 0.3em; + padding-top: 0.3em; } + +#banner-slim a:hover { + background-color: inherit; +} + +footer { + background-color: #fff; + box-shadow: 0px -3px 8px #ccc; + color: #000; + font-size: 12px; + margin-top: 3rem; + padding: 1em; + text-align: center; } + footer .highlight { + color: #ff00ff; } + +@media screen and (max-width: 600px) { + #index { + text-align: center; }} + +#page { + flex: 1; +} + +/* drop caps */ + +#page p:first-child:first-letter { + font-size: 5em; + float: left; + color: #ff00ff; + line-height: 1em; + padding-top: 4px; + padding-right: 8px; + padding-left: 3px; +} +#page ul { + list-style: square outside; + margin-top: 0.5rem; + margin-bottom: 0.5rem; } + +div.time { + color: #9ba0a7; + margin-top: -2.8rem; + margin-bottom: 2.5rem; + font-size: 0.9rem; + font-weight: normal; } + +div.figure { + text-align: center; + background: #fff; + box-sizing: border-box; + box-shadow: 0 0 0.4em 0 #888; + margin: 1rem; + padding: 1rem; } + @media screen and (min-width: 600px) { + div.figure { + float: right; }} + @media screen and (max-width: 600px) { + div.figure { + float: none; + clear: both; }} + div#page div.figure p.caption { + width: auto; + text-align: center; + font-size: 0.8rem; } + +div.footnotes { + margin-top: 1rem; + padding-top: 1rem; + border-top: 1px dotted #aaaaaa; } + +h1 { + color: #000; + clear: both; + line-height: 125%; + text-align: center; + margin-top: 1.3rem; + margin-bottom: 1.3rem; + display: block; + font-size: 2.2rem; + font-weight: 400; } + +@media screen and (max-width: 600px) { + h1:first-child { + margin-top: 1rem; }} + +* + h2 { + margin-top: 1.8rem; } + +* + h3 { + margin-top: 1.5rem; } + +h2, h3 { + color: #333; + margin-bottom: 0.5em; + clear: both; } + +h2 { + text-align: center; + font-size: 1.2rem; + padding-bottom: 0.3em; + letter-spacing: -0.02em; } + +h3 { + font-family: "Droid Sans", Arial, sans-serif; + font-size: 1em; + font-weight: bold; } + +a { + color: #0aa; + text-decoration: none; } + a:visited { + color: #808; } + a:hover { + color: #000; + background: #ffff00; } + +strong { + font-weight: bold; } + +div#page { + overflow: visible; + max-width: 32rem; + margin-left: 1rem; + margin-right: 1rem; + margin-bottom: 1rem; } + @media only screen and (min-width: 600px) { + div#page { + margin-left: 4rem; + margin-right: 4rem; }} + @media only screen and (min-width: 1024px) { + div#page { + margin-left: auto; + margin-right: auto; }} + div#page ul { + max-width: 32rem; } + div#page p { + margin-bottom: 0; + text-align: justify; + max-width: 32rem; } + div#page p img, div#page p video { + max-width: 100%; + display: inline; + float: right; + margin-left: 0.8rem; + -moz-border-radius: 15px; + border-radius: 15px; } + div#page p.back { + margin-top: 1.5rem; + width: 50%; } + div#page blockquote { + margin-left: 3rem; + margin-right: 3rem; + margin-top: 1rem; + margin-bottom: 1rem; + font-size: 0.9rem; + font-style: italic; } + div#page img.full { + width: 100%; + margin-top: 0.5rem; + margin-bottom: 1rem; + margin-left: 0; + margin-right: 0; + position: static; + float: none; + clear: both; + padding: 0; + display: block; + -moz-border-radius: 15px; + border-radius: 15px; } + div#page img.stretch { + width: 100%; } + +p + p, div.figure + p { + text-indent: .5rem; + margin-top: 0.4rem; } + +pre { + margin: 1rem; + padding: 1rem; + display: inline-block; + border-radius: 3px; + background: #444; } + +pre code { + color: #aaff00; + background: transparent; } + +span.code, code { + font-family: "Envy Code R", "Inconsolata", "Consolas", "Courier New", monospace; + color: #111; + background: #dedede; } + +span.code { + font-size: 0.85rem; + border-bottom: #888; + padding: .15rem; } + +br { + clear: left; } + +em { + font-style: italic; } diff --git a/site/feed.xml b/site/feed.xml new file mode 100644 index 0000000..e094e86 --- /dev/null +++ b/site/feed.xml @@ -0,0 +1 @@ +BootstrappableRecent Posts2018-12-16T00:06:05+0100 \ No newline at end of file diff --git a/site/graphs/gcc-mesboot0.dot b/site/graphs/gcc-mesboot0.dot new file mode 100644 index 0000000..bee4ee3 --- /dev/null +++ b/site/graphs/gcc-mesboot0.dot @@ -0,0 +1,89 @@ +digraph "Guix bag" { + + dpi=100 + "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [fontcolor = red] + +//HANDCRAFTED UNTIL HERE TO BE ABLE TO CUSTOMIZE + + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" [label = "gcc-mesboot0@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/q8d60ln0dxjvqd2ymi1g6xyk3046m23n-linux-libre-headers-bootstrap-0.drv" [color = darkgoldenrod]; + "/gnu/store/mywrsxmbsz9k87z755mnymmpdjv0jvf1-gcc-mesboot0-2.95.3.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = darkgoldenrod]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [label = "binutils-mesboot0@2.20.1a", shape = box, fontname = Helvetica]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = peachpuff4]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = peachpuff4]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = peachpuff4]; + "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = peachpuff4]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [label = "tcc-boot@0.9.27", shape = box, fontname = Helvetica]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" -> "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [color = red]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" -> "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" [color = red]; + "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = red]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [label = "mes-boot@0.18", shape = box, fontname = Helvetica]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/gd83makzwnb2aq1x0hylfsi8gaxln5js-bootstrap-mescc-tools-0.5.2.drv" [color = darkseagreen]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/629yzay882kh1yhpqddps2psfhpjrk2q-bootstrap-mes-0.drv" [color = darkseagreen]; + "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = darkseagreen]; + "/gnu/store/gd83makzwnb2aq1x0hylfsi8gaxln5js-bootstrap-mescc-tools-0.5.2.drv" [label = "bootstrap-mescc-tools@0.5.2", shape = box, fontname = Helvetica]; + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [label = "bootstrap-binaries@0", shape = box, fontname = Helvetica]; + "/gnu/store/629yzay882kh1yhpqddps2psfhpjrk2q-bootstrap-mes-0.drv" [label = "bootstrap-mes@0", shape = box, fontname = Helvetica]; + "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [label = "guile-bootstrap@2.0", shape = box, fontname = Helvetica]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" [label = "tcc-boot0@0.9.26-5.c7b3f59", shape = box, fontname = Helvetica]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/gd83makzwnb2aq1x0hylfsi8gaxln5js-bootstrap-mescc-tools-0.5.2.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/629yzay882kh1yhpqddps2psfhpjrk2q-bootstrap-mes-0.drv" [color = dimgrey]; + "/gnu/store/kd9ly1185dn9z1mbkn0wd2r3fcv1bkw5-tcc-boot0-0.9.26-5.c7b3f59.drv" -> "/gnu/store/gz3agxnnlgkafw2c8jnvk2hqmlh85pkc-guile-bootstrap-2.0.drv" [color = dimgrey]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [label = "diffutils-mesboot@2.7", shape = box, fontname = Helvetica]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/pa9s0y0dx6a60a72434syb1zfxgmqilr-mes-boot-0.18.drv" [color = blue]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = blue]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = blue]; + "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [label = "make-mesboot0@3.80", shape = box, fontname = Helvetica]; + "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = blue]; + "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" [label = "gcc-core-mesboot@2.95.3", shape = box, fontname = Helvetica]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/7lcpxky7sn4c9c86ywri6y3x2d4681iv-tcc-boot-0.9.27.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = darkseagreen]; + "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = darkseagreen]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" [label = "glibc-mesboot0@2.2.5", shape = box, fontname = Helvetica]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/fh33abhfvsdgdrg54m86yhmkihfp1g2j-binutils-mesboot0-2.20.1a.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/52nz2cbswm4n91707gy8945h2s4jgvfb-gcc-core-mesboot-2.95.3.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/qf1x4bvxg8ihbgmv57yyiwkj5y8zzmk0-diffutils-mesboot-2.7.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" [color = blue]; + "/gnu/store/rn88dllv6vh4mxwbr4v9wjmnl4ml3xs2-glibc-mesboot0-2.2.5.drv" -> "/gnu/store/vys62fkr9p3qfp9mc36456ffbpz24n60-make-mesboot0-3.80.drv" [color = blue]; + "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" [label = "mesboot-headers@0.18", shape = box, fontname = Helvetica]; + "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" -> "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" [color = cyan3]; + "/gnu/store/kd7b9sba79s1l7hjdhav51gvci5ws4jy-mesboot-headers-0.18.drv" -> "/gnu/store/q8d60ln0dxjvqd2ymi1g6xyk3046m23n-linux-libre-headers-bootstrap-0.drv" [color = cyan3]; + "/gnu/store/q8d60ln0dxjvqd2ymi1g6xyk3046m23n-linux-libre-headers-bootstrap-0.drv" [label = "linux-libre-headers-bootstrap@0", shape = box, fontname = Helvetica]; + +// HANDCRAFTED FROM HERE TO MAKE THE STATIC BOOTSTRAP BINARIES VISIBLE + + tar [fontname = Helvetica] + gzip [fontname = Helvetica] + bzip2 [fontname = Helvetica] + xz [fontname = Helevtica] + patch [fontname = Helevtica] + coreutils [fontname = Helvetica] + sed [fontname = Helvetica] + grep [fontname = Helvetica] + gawk [fontname = Helvetica] + bash [fontname = Helvetica] + + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> tar + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> gzip + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> bzip2 + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> xz + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> patch + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> coreutils + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> sed + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> grep + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> gawk + "/gnu/store/00rjhpbkzk86s4pksjg934l310iaxxjr-bootstrap-binaries-0.drv" -> bash +} diff --git a/site/images/banner-slim.svg b/site/images/banner-slim.svg new file mode 100644 index 0000000..f4af402 --- /dev/null +++ b/site/images/banner-slim.svg @@ -0,0 +1,359 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/images/banner.svg b/site/images/banner.svg new file mode 100644 index 0000000..86d802c --- /dev/null +++ b/site/images/banner.svg @@ -0,0 +1,401 @@ + + + + + Bootstrappable builds logo + + + + + + image/svg+xml + + Bootstrappable builds logo + + 2016 + + + Ricardo Wurmus + + + http://bootstrappable.org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/images/gcc-mesboot0.png b/site/images/gcc-mesboot0.png new file mode 100644 index 0000000000000000000000000000000000000000..3c27655b2313cae2c04730b54b0c2a20b9f098a3 GIT binary patch literal 226377 zcmd43WmuHm_XdiAph!qcOLr*UB_iD=DcvYt!-ya$UDDkR(xtR?cSsLiL)Y2h`}==7 zAI`@!?_8Gy!#lH|z1O>AIcII<^`$5KTu&LoBr%aOIJ+X~UcCye z!Kj@6AW>NrQdKo}Vo_PydSPi>a^f`ox!&D+=lH|S2dzrAB6n|hRve?yFbvFxWM1Eo zE|=kUwe)g-S(Ep2pj|vPH1c0brAg+0r_%<4CEP!L1((L5{qKiC_cY!I|NQ{N&d2)i z$jMWpciF^>=o5{{HQ?fsKIh2oa^H?e5xUo4UKDNJ&Yvm46Ax zCL|EPc=6le8NwH@hZ%Br|NHJF-(EvxSlBOzXD|H^kB;zIbbIgLM;vs!>>4%9^b_ z`|BGDp03N{w;w-VmT7EnZxay_@k4K}8r@IdB%vT6T=1*V+^u_1OD2JniHt05`9(rs zl}TTGO%1n~a9Bh{xy@YN7HO7JUbbukE*{?LYOLOqCr<=#&Xy}o`Y;3DCU9C4aM@^o z`0&Bi_53)Lo{`aGyR6f|z(8ADTU1OemQhnlPY)Vtb$omrgv;~{6%_~hajPHt?bXr1 zj6DAHC*#3p?D74(*=hx`%sK=lB)dyXOFKIPu7@jNv0BX{;3yvRWk0%GBf=FO3rk69 zY3Xt}KAVZvR5_KPpl5#~&*jOE`_)0Gw6wH(iSC@Ih>eZSyLa!z#9BAU3R2v6d6;8o zJoEGOE!qQdz-j|SLxtSnX5ev|mzbFNvDG(DCj0yM??V|9q(Yuo%b`LyJJk#QNqjVz z0mbOqN_puS8LISSD}N$sWaFcfk{Zp1(py?uLIp4UF_g5mWsn1cf{qRjHqK~~ko*Xn zWFr5t+pTn6U0r=%?vPF7E~~0KiPiI*0vqo22uVpwZ`jz1)ELAS-5Le?`4f9q^Hu0C9%dmP5 zS_mDsps8kB+sI2s<~6Y1 z+0oIo--7Zk;~*xd7!Mb>!=OxtdW3C&AB%`+dvWogiz4*pbKi)F2(YX5;PdP2Su{$8 zOD3E>qS_5KD@O{b+f48JLB2nTE|eV^Dj#U*cee z4l-Ga$Kg{lBVZ9$oCz2$>v!&N#ZEAjv%{!WRajnr=tt`LUP_AGCsDxtiuoIVA8@9K13m=gmNa8!~j%LvFI1qRLF6M{!&DVF{c>%H`p$mQ^imW4}y*HR9 z_9o8i0=}^$kqo_YP3SurfZjx6D5A)5mfByU#6N4+-1ul~mdUep<-Tf4cx;LJqAS-J% zD^@o>0Wn^!Kvr5>nLe7$q!%NoeZlk6T3ee)r|)HOhmVgBaFX}bkpciLI1{YL@>Q{D z!0z+oAoyHgc@Bs%2|8%m;G=t5V*3%~;T58ALw8V;p8xk{_5 zV(w1X_Uwd{gQN22PlxRNw`Pf_vT7#(kpSzB8tK`LUHb=)rC z=HEm`6r|5lVoH&Ep3Emj_s}*F0 z!j9eCj2;WjtQM3sk^A%}a1EGL4B>eIRPqT!CFGo48AVMAN?s{9=_9!4@%4QoAt52! z1p<&5DG&69pNx{3x%iq4j+vteIaa+4PvUbfpW5b{ckxcAjgz6qes=680O{6eb#ZsE zmLE=o`rbh-%tfuh@nn0-Crq_KO%eNeEx{I3G}(0x|H7bRDlslj5_zi5af@j{X+n1L z;PBAS-hS)MU?W<)Gni09aa5Y6@hvis-3qd}VpdjGe}Dh!oO4RML0XCSPqPXE-=5im;^*gGD;qvxb)n` zR=*M3AmLYGQd#hn$jHcn>xbCTTx zF%COPp$_~trUS_*n?5(CI?Bo;o>h5y8;z&)d~R@#Q*gs@rahuPmQ|5 z$gst!sHw{}3PV1I5b=m2#|c4i?lwu41`Q3(%gc*6B`KK;o0wQuQN_xtFftNLN1jom z^b3ZPhQ_4l>TIpOj*iYu4|19UY-7W9586tZTuO%ebCpQl(bN13L} z-FjbN-w^cJo>jZrhHGhCTiZMpsghGgZEeQb9zI`ueizpBfwq{0l*Z(@8lhf%Rbm)*VA|Xe2DQ z7lC%!HvgKMs;%gBatg!{y*8cgY%JAaJUKamcln3F(m$?rg@cG70HQS5{}5unD$i>- zl2G6P3y#_as{|k-BvU!GD*J?4s>L<-RU{`T18Pz}Wwo<|F7UClrzZ%*fc52csJfck z^wgAQk=ljqe3iA9xjCJHkUvH_z+=&_pXMXH^B#bhpx`p;Ck;%^}6 zR{zeu@#`B_yZc(vcE2faR)m2*^W5b=KU z^zm0fM82W{HX{Lb5VBi&FDd!w$7{oRx2+<>&X6P_=)4&_vu1hb^`aD@cq&y;O;uI! z0!B_vOZz@gWf&2OiH63{v$2}ry|Jt7Jph*I=rPX~*igobkZp-*nnJ-CyqNvt$B(>8 zyMP&vZ#V#4y~L8|7eRha5DbDDxcj41)JUl!oc+3sP zw&h?Y9G2q_9%CRJ5t135?Jv5zy0SE19dZ;&=;#oWQS$R&`8pHwIc;-LM8MGAQ)15X zKe;>gd!{Ztk?`8^3E4`tx~}=cL3M5IIS6Cc&H9_8d4Mx$*Oo)D|6Ckzfpxj#202D5 z>)_aew+MpQz=AA<%54_}y@Z8rGmbz&F)=Y2X2`@4^?*QXwQV~4jJu#6pD{!W)wTk0 z7{F@>nPh%|a?RH}ws1{16eCgOM%4YjfvSorD>x}22Jey02d2iyPrw3rxVZ-z5(Y1a zJkA#Ve8Qp`)Gr zcX#Kf>WwNt%q;i-yHMAIM9WDd(=jvOnZv5xd2bvWfT0Btp~Zu6hc2;(&@)fj;&~l6 zQTJlv<3H%?-T*ZHnUXc}L{3g_m+?8+tbkf$wL4U~NS@KAj!CDzFl?@_K5YTn0n>+- zy*(lOHJLlN#1>ZsHu(DWYoD;p%*@rESosveq&^c6uLy%X5)$hcv2-eaZlZ>U-Re+R zRaSEF^2TGlF=+E&Pj1>9)^ zfuSiI7%a5~U@dqY$?|H|H#G2z`lqBUTu*2=xE!D^uzUZ;xF@G19{ayLN!(?qBg-@j zg9*8YP4DoCGht_Wxx(dO3GDK>Z{J>suJt8MOjW1W)M&iIn4FmzNaV4fDmOOl0Mz|4 zA|eL|$K1Zw?2DKHL0EIl+d1h#cxU@w3snU;kmN4~PMvhjFa zYjJUr8SsYUVo6EKyX))JdLasoWo;m(M1i)Uv2h(Nc5raeQv`%ky_-Y4i^b2MKLbeF zty$mg8@RJ1V0-`-cXxN;FAB!M`P?{y`1sK46$i(0%I%eDr+S&y)EiNM75eLqoD^Pn zXmPdmOjW;U(d2+9MVZYXk&uKN; z5ljeyK%SD}F>7noIna?A0n?Gm*%F$xIstD1K68hyfMV}VS8m0lU}9lyP$`0s*d@4E zC%zPOfxHNW)jg1!9G#w?!r@lt=0g^hK4GJyqn1@&-`r1o*#-bPwC#yu0vE`{#AI!5 zesFRU;_vSQOY?(K>D+x9;(wpkX;J|NR9s%@+M(4Km5PcA>>LRBr@%5nPEhwLgUGCN z`CtuTyYsGgwl}yGA)k9qB2|lyr&~A=5#U7s7#9L0;74cv6ps{? z-iHPir_0c_oV962AITJdq!yq9)BpX|l+>9wiT%e3u7aazL@ldvPEr3z;oq_1`$jK3 zs(DwPMm))v)gFs#m5fI<+B_xu=fb1BJ~Mkte( zFvxnHa^HqDrX|w%Ff+|ZKZzLOOTE`WB_*}Qplqjx99rC^hs*CJXkb1DzB*yFRyKdu zL{;~EL!Pn7P1HXrGK?kYZ#^n*mm%VzMlyR;dxt6D<}+WR%=gmF#mk-c>Jp1qmtodq z##v3G!Lr9?_SpW|lH}q_moE$r#VdH5HIs7GSJ|UT^Z2Vn(hG_Bm=^@3UWLAJYkRs< z#ypIH8`Rn+{Qv>>NFfQF2Lb||iioqUN<}SEV0t{A+NYEUjk)+Y^RPlP<98a=Wy#iJ zI^`Ns(&9l0T=wLf;c1h>0_F|NfvxCu!ftf+$+vHP+D9kT8O+u2*eCEfC-7ACrp-p9F-0}3+-bbN(x9$N zwz@cEk)xQ}6K(j}6KS^v8kLcs57axFDZ#ssDqV$?qJo$Iwm1i2ci-)emqcL@rBAy7 z+sW4l2tR!P+hqB2d(2^!*q@}Y6CB>@n7hZNGhQ9X7N$((xfd(C>Ozh~ z583oEM5lQ6A0NK-;#Y%3(;gCRww)TS96v;0{U?$Ei~G1oS>9YMV_wX{I*K<4k&@j# zE$Wl9(}^SB_s^o)nB+Osf%w*6JkKGudCjr8#mqjQJi;(Ap>tleJt~Aurkxi0KAiH9 zfL@96VD5>b1v&!U{Xa47g2|mmu~US~C#)*w!o<`guDTHw`oqEB&?Ie0<^$5Sl|c}8*@QVY84JoK~r43;MA_va|u1F_4< zB{Sbwtp~=rg5#ZgdQTz%@GSjhbUY?r+~iBY?&6?OrtkL{vdE>lJMI3ZFG5^wG2ag6 z$ceRQjecXng2U(%vLvH3ih74tjaBug72+E~u8DIVgd++6P{D6bOU9V3ON}6mCwhOx zpDeMB*+%g!3d-|Y_D-Yp8)abX#iVh=7P*#cs~mZD@uRMN`TWMeaT6+o!N*+OxtQkT z1%U_}VCmw|R?3>51|gFb^;J&iTj{JmwN~Y9953_^N*FXmZnO;52=A@3H`oR~K1=w| zd$~+1UmjPk|BR+_P@S6Iv-4kuwGmM_Yt^$klr|5$UMj} zz(qe$Abp}S^V|o+ohCepU4=Gu^-l}s1H-Gx*a{vr*?b~v)v99p`io)Th{971E55W& z4E2=7Tt$S`5`9JNb_c*25fG^H9kZsp8Snmd^R4~0u_&!XvUcHn;Fj(4e>_gjaJQP- z9OxMsARZnsWw!L?cje1Y9Syk%^IplH9G1vD_pL=iJ87E;*2$}ioBk1ESG~=>GDlP6 z$D&zfnqbXo@@8di?cLkAtVgp+X4b`H6UnyY*u#)O5#_gvYPdnml<-AKv5he$mth6Y zP7!rSC9P;3z4D375~DJ1k5gJ;n=47=$E4QlwE7p0K*UD4-_4hwXcKBBqorAFrxZLh z`*J^)aWhBghm(sJzQ??LzWfZr=Wb78zuwC8<%s5POl7;$MXf5te-+bgy*aE8eeWC@@bdotMz^&eV^(Hr zct1;GhBNy)2rGRs_#__a;r_P2vq#=f?bh#-bY0U7gUJu1W6yGe8vV+6&}5pC5xxlB zYxZ9r{2tD?EfkQRpqkESOlWWW{AscNx;8I=()|a(?~U(VBbohuQzsgcyrCFN)ESf1R4|#WIki!$eh@t0DWT`C zTf)Dftv9Kyr(f{{nJk3AR+yv*=K`bK!m4n1ERmhC5?EZ>9&&(QU7IbX{IsbSCjyM+ z9?^xHjjb3b)QBe3NG8;hSj_^F$>bi|mN}PqF-UGF^+tZHxM*=f6%$jO-;)RSTaHY% z{~cYT*!xhYC2RHUWiUIG9zX+@t|90)h$D+8o zu!z67h(E1}-)307Ov5UfU1mE{ibZ>=?bLvGk$7-IhjH@A!%&s8J^gL67{#00-;u9b zxiT$}OE!H#ref_|Kr>G#bR6Ivq}2uE+F&yI%RE?+#ZJ!xi(WtOJ_6V*irhIrmAoZ| zY;K*OMa!VRvWLsAi_0&vodgi|4KY5#lV|rRGFYt`HI`bNUeG-pMPil9Jw2|p@Oe=( zz?R^;wg5eiR!i)Bv7mEdNR5cf2YIDTQMt+SGpYfv`UDI*_OvgTfob+OaI@RC{O{96 zd{TH(M6vTG_iu?3e%nFqG(ZH}sTnzqD@u2Wd=6czOE2fV-_(*rvs)hu3;Eqgstb~C z6LY22L6lgtZnSt=Ufh}FJx-0KSY|cK0Ep5hOpth-Q_T7%)Hp}*wOKJni_@o=x3cGI zOI#5f+B$j7YBcPQ2fJ57G4a9Ezee${eVKP^xUgm^q%D;rdDZpYn`)a%%T8n}cvH$X zVaiS+9?6W_OR>fN$$ON-=71fFwtUyDw?d9K zKB2QxFaA#EOyyPRN8S(Bu+y=pvg*-E_4c2Gs@hl%raU#hjya?Hl%S5b*1t`xS3fH& zqn;0#5+Rx94YG;+CFzTmcsiR=_5u@OmiV7h)c?d+LB;9(8Qocl(;2^oLfgI8c8YnK z8Q7@YHV;S_hNy;&>Gnfx;{uj>orp#?_2?Z&w6L?_e3q%X@pM$VOQDproQt+`A!pMs zDqw#S+8vJ1__C%*_bI)}sXeLTFIybay;>|d*`tVyna;!^j+-T!fCV>8B ze4#d^?113>581kW zlm)fK>*36jn6qFwez}6OXU$S?Eat7^i)A73*FVrE8=uHIidrhIuI*?Smegaj8)QL; z-xPWdN78oZ7j&!P?J42xu$vW^@`PxIqtArQOlwb=0FuC6SA)WDfOyEACQ4!hLWd&+* zMEvfjne?bQpQ?DXC4)SMs86z(%kZZVZ|R__w}8w=+bFr%0Rs0b6sOzJNB1dO|C?;( zN5Z!MShpKmqf4Hyt;E!4&_gKyh>b=wU z{B+`EZ_{s~xBiBEy$-#}Z2ARQcT^(fwsUy8A%!1l;Mu@g7@*1y=@0sb$F-r3@^h=! z$LhDGKRN2(f1P_G8{;SQ!lkW}b7IpH@Qyq1bR47U>v$rHe2pIaKAdsiA8h6&JVqDc zQ_jDbGGSRF{Zo~Oz_MS7^9Z_y*{pc&$%8)J^vr79y>3(4qxyYwo2dY~N$I4MPnhpv zD^Ih)$BLitWUhLdT*yZx-KT|%<;*yE7S{J%`vdmyInHNp>Oz$k3@WND802$ra^B)sy!xW5i%rBY7<$q<|USI{5 zID;aE7dP2v$DDl%2KK#J>oO^% z3z{y5o24rzs_<2Ye|`V;k-;bV>5l2l_ju`ig2xHv`s87R6lyOtd3xhl^VhPvd0kI^x-aD^0;Z zbB-sPTPk9S)`;q*netz!2$Oi*G7Ag+1L)o7;+hGY%;w!_7E zZnrb<&p7c3dwS#{N{$D5QGMj-2?VU$;&>COA$YJYX5F*ZkCv9oqt{zho*Oc&+o%dj z4k`(^_VfMiAo-X?Y9{5Tr~ur?WIT#Q1@}hDd6f%rdK#2iKLHs2>x>FpwM%lkx_m~R zW4eN=Uj{R^HBSPt=?ugpeo@5Gpb{e!nm>RG-TTwuD)xdS4r4!dW28zP2`1~l6Ya8s zfjgE2PS?`n>jRM1C_5c4Pha(&goy5u$zQYyZTyPXwwION&2G>cIGiIl%)TKc97*S` zeHY2Q*Ak;?63Myd1+Blxeoc&I(`#Zq61A<2dy`&Q-a2f8L5C?oPI8FsKA5~UJtan) zkX73xtPW99ht!p=MTscOAg}&iqCS+taHV?I==)5-fagSm{$;AI@O|EtWWh0N&LD3l zg+3m;{d%K-+ey2L|3l&X@Uxuyi_G%L6B#6Gw*j5DE%KcN`U(iHaWtEH()RbbLg~Woj?jQZ~3hv4QMI*)5gYIWiyS+--7~ z{_(iPxWl5fVqV3JXHz>eH@*)n=AE$`E!QBzlPvvT0{{9IVk+0a?EN-lS+~V)6%jY6 z-8nSoEKB-oq&?7RyHnCO$^N*FFPOvhY**3q>A+9$GipM6)aB(!<+%`2b`uf%RdjOb zG+!ETEgA4O;tNajlMmv(U-!RPa$ON3HU>^*D&y@G{+Y|9<7+Fkk3bAQCE}MR;NInI zc7CTr*Em>MMV~NVIoBV~0{6$Gi}-fh?Y1c)lZ<=J83m^RbT zR*MpFGrM(PY$3fC*&9t~%ImvKqu%R`@hy<^kast1nZClv1(+2uThc)ciX4lNo`iIHbppKX>r!xJ5V3kZj1xmW! z5OFWIyb{woP|qDmqqP(}56?eZ7}c5jZD2q9^$kuL3Z*B--macHV2Xx2_}0cT#q`qu z$mR*N$LagByCkorf#eH`_Z<&Ry=5aL+>}N)lRCBRMvH?-18J#?L1c+bX^Be;h99b@ zKOdHsR>Qt^9Y0IDO^hh`RQ|F}z?F|wakRaj*(Ql0tg}Pza%f(1^byY`kOZqU#I@{B zI_Ws2x5E6Y7KTRAVFDi#qPxH9<+EHDNJek9ogVuC*dXS+)vZd+HdPzukP>SztHR|F zD9LH<@BA_GXi(=Ktl{!eePAE5n~d}z8-kD>p1|@0;}^v@8z9qB-%|;BLh^))ujY#aKcZ%+hfxHkeisIgjcRxkE;O%ql>S7 z%>BnCpZKfLb|EQ*Q{+1f6izX%eCenV@m;1_n@KC`rtkYuz&zg` z>3dEiFfrxXnv}=iT>Lk5y&-)aa2<^1jYb|78t1m*e4)#cQ4`0Tu(;+W;w{n-1jTAP zSH&PoPJdv>Yz_~cMBMeJE}J~jafEi8*eI>u)IN4u{R{#r#1#aqy7%D@m%*(6$&-WX zl`LoZ%u|NeY=Gnf>h-n*a_ajaXxyD&z>@oE(@;1*V2BM$=DEU~;By5>vHlSXFr zDHZ^|C~EdSQ>1&gO6yd;^K_p=O?c59sJydtfrgYHwD3VD7-)(2`?b53J@nOKvAC$$ zBA44_SiP#`4a0%FGl&?!q8&OTAHvb^!>b!#U^&N_PA1Zi|AXA*Pzscneu#Q|*y5U& zN1pUN2O%QLj3`8SVTWJARy$Yc*Ed`*jY|k14G{1ju))=;!FJ7+{oItdjW@C=lu11D z3o^nO`J5W0+2=cbl~T|T9no+fm;Aefby`Di(j+iZd6_(vN;j-V{7=*1;#9+ES^CqW z4Uwq12>EnO5+V@#p!lBdr^Z^ar3`2w*(1l2 zAa$#6C_3vR1fbc*BH*&JB^pZR4BVpaMh}BI{i4;dCbBvPu5x z-^EQ7l!6p(f_Y9MUw6?E1~2cW5STcqH(0M8TtqY;Q(eZ7oipM}z8-5*V-{%k;5eyb`ctqT=!rhmhbE4itbO& z2@@z+_q=2jx9NcOZX7BkJWCY-)dEPmUURB}@&J%n>uqrdH~`)N%}RDdM0V;yMseYC zCQ04`Eg#KCbRz`Vw|k^xE$PcOrxi+Pp3bAcm>bS_{`A@Yn1mXoI||X*U=%KpE*%MU z5sRUi?ynt4sL<7UylJbUnB-a3cm}xak88fp`C4f^G@@L&T}6AyVjij?U=mrq3{{LjegqGnjrvoYC4=JV(Gm3n9fu0F_-8RP62iSQRL%8+&XsauN+sk`z zB{AlxhULrW2RV)F%-dMxuT9q9*(OSV6r${>l|ONE6M!#UbMV|Yxm_iVXA_v~zuWg$ z^*GHft~-j`qp5;P`3bsxVSsN$xSzOpbR0%t?Nvj~IX5<+K|iA;ul!va_Z(#TTn6eL z0S*vV>zg&{8C;+5A9lDLo{ngy`u(iTEnop=cNs0IN2NrGNXZn5D6dcX2kN{@CuC)j zpT@b0m4e_E1T!=Ka_D{TtW%8>PrgNXvE-c}W{{gZ1sZDMlnAG}eTljCS7b z4s-^~lRQ~0MSmwhy9;Wis5!unhqo&~k3eIdgc$Ooz=_=Wb*BD=g0g_m#a$Czp5f#sBo)#uL$^I6QN*KBB%^91)tWOzu6AYQnoB9nDBW$z3WF2> zyxqXW&^!C8w9YIi-zBGg6!w=f`pNfbM0w!Dze8TmdCl9^zy>Yf>BPBrMWw#Dov5Uc zHA7wX8@OU^=lb}$E0;sZ^T-o$1BhMgkN$qNxbp&beJlC34KBv)j_tkSNhdk6b&|Hy zB(J=@U8Si!=;)ell{2=R_`tEO#wg*M=ZC&0AalC+d6CA$hh*65EAj)d@F(9Z?fWx`;VB+&Vu#~T17V%8p6A+UZj z7U1}YU-JymDg%b4dQsvV_TJ1A>Xqpf{+*<^8`9mS+$}nm#VlRADQi3~YG-GmKl&ej zf4$k=EeBPCe11e0rM}YYDR$d}a~$*MjWyGzZ=fOg_G2n{*$XMg?++pOJ@H@a|M7** z^dv`hPd1Pvo%Dm41^oVH;_Nl8<4|#WMgd4mC9j5&vYJ2dX`wk^$VBaIhn{lf*(u{D z!cd$0cQOLe8g<$ zi{*?mfexDF+M~x|vM-IzS6#emY%0u#>qDj<1m%@MK4P2e`(iBwZ8#us-ILb8At1vT z6>lymzM5C?Y_oXHTmPi{>lBZ(^3y@ z;#oZW0E?%Bb_sT5=(L`B&}F{iV>t^o6@HfvD=_7lR+!>mxK!SCBxH~6l%|n%XZ?> zkU#w^e^(b|En3V)FQ|w&bEu_IGgg7Rg_c4#BW*=bEXB8euv%PVx5ly)kcna^p2Pzw zV%PJXj_OGs)bw$7)5{+hQqDr^&Cc5e++t!cHuhU{C;z-Z>7zbOskt&CsYYd0@e*^S>91@*GB97OJT;p*v( zv?JDoZ;JC+S>MpH1Ie*^b2vD7o8OT@NBI%L`NgcDyqHKktDqZ~ zA;Nq3rUXd}$Y5i$c1sCHNT%jXi2@o+EA!EbF4bpU7J(P`{b&is>j^)N2D_TyB;+p) zs;2N)e$>7bcc>W+04(7~^=T(m*HUij0JgmpOTuoT%Cex*2pMB_3r#+0H#UB-%#Fq@ zljHpW^*)(GRftkmhe+xCEZ999$F&X+P-i?KrbFp=K#%*HGVcbeKP9lit<5E!hptwi zrY(oR$Z=V0*de;7lr)`{tRT{8YkRwGOJ2SN&AC`| zmU}2J+-+9^a~0sh648owyjZ{|Gn_vOhSqf^|6J(N6;dkUmseC1)c}gkqP&g~uVS+S zM|Gk`>`L3IjEf6iw#aV|+V1SShU?7$=lD(L+KX(&oa>aXttUO`$D)15-+*UtNuS&) zM~u|PUGliBYPkHr$4t3r`U5r`SQYNm=vO8gYRaDP!9_W)a!G5k-B)ks1+3^#a7+TH zCKckZKc2@8Y!kTv;8;p1{n7V%`ws$V(8ie%R^plNL4~uysz0;J=e3}(jSR?TWs}>f zizQDo3-x&wp(6^OEAUe+3TlsZ|KuJATv!sV>QMg@1r*5Pz**~UFLn(EgmybAij{m5T8Q+ zhzi||sF+OIczdnTZz~Tnf5Mv;L_Qia5ZEWuqrPbcg*JQ~#O?uPE2nXMJ-Z(ic=OYB zfLVb$1#Lpy{{eM_Z~C6^?!8#|gy>?O$#{{aEj&HV}y`)`JO+nWj0=#XF5gOs2OJF@YFH?Vwc?OMab zs4_2an!!%)?|y93neOv7o@!UONO~^EMf{NK;Mm7DR#qwnV*-i!3ug2)*}T{B>?Yq> zT{uTHFX#i_lH&&1+KHH-_=)@JO6z`V7(k`^l6-1v4T0}jGac(HhCW7x)`s4Yd)-qB zSQ@R{sw?h{91MRC7$uVnW(RspZTq?{!M52R4oe%+~Fn6Dp%=P$LnI>k#EJ+^7tA(PxSOjTAWu zBvclqZHJZbtERVZ$46TooJOJ`CgMF$>V^^Ur~WRGPb)yQL>XHuf1>JxYcm(k~a zkw!Zc-C6<^$oWjJw5geyy{U>EQ>9~}@w%jDtCU|3flZq?pkaQM!zx7V)ASaer)y2x z(vJdp3-rvdO(EbsQ{ait+sno|H;SH{%OKB0M05Ycw;LdMVfm!EYk}*=eBmsoXf4LK zTr7WS4)paznUpyGmCE#5UP(iL|M1=E{^s&O>h$HtJG~H87aW1$zGe%Aul2wyehQL* z^#L|w)SJ!}LRjKW+wXP(yJ7X@@Cvs-a_>Nqfop8_ImF?X33MH3fWGbRo441hA6U*q zPQ_17sw)-i+`Ej@I>VM)p|T!Ew$2h?JzM+3N!hP(QqE|kLmC~=e|48Dr#ueT7<0b~ zXhI=!HwCO1JVEX|o~WiXrRZ$zF1t(3C(*>t+6oyoGXKl{4wu4D5a})~z+E{l3$l%x z^IfVpyHBcO+`uJMc<>TL&V%Yj0sra1QbvI$qtl?jy1VDZVnV5=OuNKHS8H})17=+R z@ZRxQ=tsyi2G-+M`-B`o&!w)0m1L*}fiVi(tvn!H~7|ZRxL^7y8#Yio?@xXYo zBtLzDsmLvveU#58P3u!OXfJSJuOXAttU2!ftx654R3D}IZGOA{m(iGa_?A}a$knm} zvwl;!nGA)11^!Yg{+cWws|JNR;x7z|(2==ox2%Lzd>AdnYsO+Z4iXyzLTOY*imn zJAgDNW9lXNXN-%<^+vJoOz>nZY+lo2frG}Yn%u+-Jg0J1LA4WakDl*%Xw1+SbnBI; zJ_W_0GV-SxD_`!r$u6D%p(ctrzi$DE{c~2spo8m@hQ%2`RXd0OhS?`JYKZaBBA107 z6vL&Bn!llbqF6)I^MWm5jOfP&=7pi2qXcAOD5mNt0ZB0W=7-`$<>K zmoQvWu^!{3kfCU9-yCTUCo`OUPu#)hnX%vmaRBHPjfX9DAaw$%88BH_*dx&aGMK`X znwz5uV$jS;6t$%MQ z(9w>kcY*=M#W58;3UTiR$nSvrrMS&t#=TQO&2H&BOwrbkNc%^~Bgo6n5W=vl268vu zgQ2n5(`IeQ&k)d_0-D{}k_v)8Z|ls8W!L!0q*<-`9%eYIS52(lC^#KbfI=t9$rpF9 zP{8p_ADi3-^)I^lpeUlbZwXu`qj*#@HOx=e5j`O=tpf7!Uo>(!LoJwsr8LY6o%4hc z$8IQaDStk(FKAzhJ!8Dv#^m+CQ|%IJ1%Xa3Z+ndZQ*#9u1bS8)4RNuzH9g%70d-}w zn!VIcLm#QFBMGu*IUuDvAjRRdVY+5W1VXV?g^&ZLOFeqL59#|SukNDwVEtflz?)kd zF|jg%i7|l{&w;Lz{YO%yK=sh9xur5R{H8vd@tZ=|@zZBR-XSK9K3|YL(iyDr9P)!S zX7D)i@iX9Vpo)|$ms$X{2u#wc0_N$sX45GUMnN|Q>U-S|(6z>^Uaem?X&_#%5l-}G zZRg};>8h#V`ZLJvSDJJ&eC|7nCS0O#RhZj%S;o1Svv%>&y?7Eb7`1;u3c5fv8PP_D z{yG8BscpD5wpNV+h6CyW%n=ybSaUIf6?zG>!JYxokG#mj&f$LYEVHNSS(ShK!v_Gn z5dwXDO4q~S%IW*unmPCU24C9(zllQ|3%1D+lQiL_aGUzlbL(ZYzYJB`q`F20hEmIGT z8!1)tQHN5M@pQN0^<^XzoIj*ddT?KzpTY!p+kJ6%?T(a|e%?Edp1&$~gelAqtES{L zoMlz%O9M7nE2>xh_bE)_g5iEW2np?(bOH*I^^&S^KI4jKjhN(bgd+R~O7C)2)ZOoW z(`ud<6%os}pqX|tj?`UTVA^uxYhxNvus@*E7ur3%P5^9*0X`N*3{r@>-%}i)y1wfH zs?ywWn}xNdbQPJ5^4_(nxqo59zkTUyD((ACefGA3&SD8DuSBJs&x*h4qVTAbXcGgX zLpGae?7g%u;5W~lLv0#au3wQ=89;-IN^p=5BwbJe1$$JVM#ra7bBYLz30RHyyC$0f zM`PY0Vg{k>IIaE1c#^DlRvcTfhYVU!vXzCQYb0+p30Sk)Ev?N@kh)u#7ME{_ES)p< z?0}TPuK%4~U*_x#9aJ%+5VgAHAle>qS&$t`w8^-hd827R9l>AJz026YB=4^~@$e7^ z2d{!YQ|E0g-J#IBnkTQ5P?PjlU}GH{HzYWbDqbntpLPOkPy2Ams^MgPcJJDr&&vJ1j@%Vrc7c}Wgm$CRXuhCFz{jo=E4W{M zJPCIst8zHe{#Yz=^j(u{~#|Iu*NHiU7J#hdJoOZs49y17{-j^Y^^E-qo6omzIJme< z*p7WEnv7~-%o|M6c~9+rutkF|wtNG#9lLY&)eQ{|m6c;XJq#QicQce=0?8QkN7;Xh zdC>xhd>q=tNB$W>?kf;IAcNvu9n2n-V1at%Az_`-uN%yEpuMO3>=iQCw1X~wKV(&u8-0!$-1h=U?0I=&+t}@LTiz82XU}7tfg_96>e}RcIOiWB(lCmi) z%ke@mbB=}l7>qN3>B{=WM_@i3ybmVlo30Lfe*O9drhh!f3pL5Z%|^0i!2m57jb~tC zXH(G8N7>oLo!9Wr(sMkiWg+C(-OL*!UTo z+`EF>ZyOGSbl>mXu->%dhe~_Bg0>yPGmW)N6fc&gg&wr+xcWNl<99 zNf{4W#_cZFtx@xNKhTNC$I}(x4jA)xL6ZdBV@T{Ca)rmns)ISqgRbxRY*kiMn53ja zU=9#+d2%;m4CYwxrdwQO|3A+E(?a-ZXiULWF?A#z1%)9THq;qPdV97U3ccK^wqNfL zc$>cEJ-2b(-rnvL25yHynsQ4=PE16!d(v3T5%OqZdVCggiUfP!`J2k2mk-Fl02mS) zJ&pdB;yqN-)dzx7e>)|}nQ(uQq4btk;RA>*_%nCc0RSY9SU*|yw?gD_nVMs!RMUI3 zs!szwD3Ala?yo6DYq({nrN6NR9nou3mcKYIU!u!SrL{D&fP4h>5cvWJ^{$B8c&n4Q z+2W?2qH@>e<9!udQNcFy;vyN$+1P@cBe1dAcZLvKan|SM0YfndLo3oTjNxFkkOTBt zgGp?5f?zNqFC!&Yw}$rY+Y-oFNCiF4(#3SSy&L5$(!XEdX;qRkjPB3y{+x zb!M%qZ7{>B0q*@!zt`jriQsE&%FXr1I0REKAp{)xLG#~dL|)*kojmA37VxDU;8Swi zTwbCm*kZN~O@!kt2n22@^e%JPT-CmmQg*bS4~<@L&a2xG4l)W;A0+~<1Vo9(GDto` zA6r1@(d>hYva~C>Y3FU6%b{KdDA@wyfPdp4*V02>vl!)-YXK9VlaN4nUw_&69$8UF}x3qxVS+8Ae^qF!PsKq?X`xM zqT*}EO%-S7(=T7XAfn)EvqiW5zuwBg7azu#Ad_vH>`KkeJ=xm294?Ut4<3MNKQIPN0SQdcb=(@y%FKM9r6ia_ijRMO zGGm+2w>I;9VRp6wOcMY0MmjpbIy*ZXD^S;BjG5u-F(`wP(ZFZH2tG}UhbXdUnE_%# zAGOc^`Bi%m9+=1r8F7kX(o)mZJa0u88f^Rn#-B(%_C>(8q>1^F@Htrl$OBVeV1@_| zW~RWc8V=j>^aex0tqc?ZGPgYl=_e48M-%8G~`f?8U)g z-yLuJRiqdts}&txy~W}ugxYAgubND`aywN&@P)dh8uhPw%X~Q(`78hJjW$IQMDeX( z`9aLF09KDj7ku zuKl=urJv{YGYRQR*{lAB+x-41*5-^Qc9opjX&2`bOHH|`z(#Tgz>al%#~*3wjERbRPQ=a1#pMj94L3J8!4ZN1 zdD$^k=Gd)`jar*IUd{vo+j)LAwhC}hiW6{`5ind1d30z0H8n2aUJl>}DR=ibDgD?A z?q86RmsbmJw?IXe1_3n!kkGSQtW|B(=Ktafi4(ea zu-u9I{P`J_+w+S1OJ*jex%tM;wH_&`;qL1rfZG{dv4Ao2P$HhC^>r>_00>}IeiMw* zf%|7vS^wzkFyh7t=BsbrepsCVBCZ&7P zuo)BV&QS)s=mzH5UTjdn0CGwzB`K+Iw?TbfU0ht;i50Mr*=BMF1I)0`*q$cg&reCu zq!u7oYB47CuG?^@f?;_WwOUKUXJ6p_0hI^__Mf34kznwV6AHKkJj-+t-2!ir6)$x# zxUw8uX*7WS!~iBVp;FV*QXrLf+pu zADXc6@RXKIFJ#NvlA0p}G3h0*Eh+KP&3uVXO6`%0_TGc7|2xMRr39Jb04NA?z#lstk= z_KE;lJfz|LzH&uDL3zT+0iT|8X{M|Sd&IYd5v`Uda;L+~jjW8Uf+L?I9b^~5fFf>l~q zoBcD&oUsIyIW~z;QdH;L!?396=x1BuzyZY6Wf#nR=I#1`d0r@BC3K^Ew(M+TV#1{@ zub{Acd^~Jrf0vsZjfkLwBhct{jQq2_JnESuu+xPN%jl`lgN?t)hVjYl*dMik+-oVId$vXAEQ zYU{3gWJ0{MF<4=QCp=!7TF(AIMYG`xhI(8{yB~!U&bcKNnp2W}ipr^6&oSB7<{!v<&rgp^xzeY=0coma{wFXUKqlDP-!IBMy~8~- z?htajl9rP@{>xlbQ*-l-VUpZ>-OA3vK}YxO@a3(SCaMsXcUah40Re%h>vs@HX+eRh zkx_SRXzw~es^PdS!WtU*?}deh!R+q10cwk{uWwoF6R^-2>FU}5j!Z-gR+DG@DV}le zU3QA@K6$;WYXdPdKLEW>f~;A z#1mmWvnx98x3ACPN0|BGNea{1)90oz#6joZwV?`D7zr*7Dp|9N!u+YBCkngZl*2)t zIHz`)kl>BphbW5VY<@;MpnS(8tvYqoXU|Cbv3s``U8JR$QIgFjebHkjU}$6~VW436 zlc3=mD-r4)583g7X1f>4GAHnuXdMj@y1AF#ScPBnTkq)+0|)(yH;C)B=!JyaZ=-c8$-LZJsFJ`gh= zn2HJulaKlb2jk-7x2(AzGCF|I#@N`{jiw(|v1ToD+s)~E${VmN2f#yM*8B=g51R}o zl8~MIeE+QJ_NaLWEGvkC8IN+LS$%&86@5+EuZEcG_tKfAoXNNgVO4v3?lb5JwsJk6VieY&SNSQl<}y- zyp4B-55I#-YMthUcm*?C3V&{&EWcrt+FPyn-=ic{(>9WQsOO0e6#qlBdzFT@)VaSs zB+vCq{^Y?{L?$@>k{fN%$j}gmn3i_$@4H)VQ4Lbyh{DBHyE{+}7U2U)0i)v9+xohlptSIYQ9+*lTunmV=$$FEEg6(f0nz;^8?KrR~q3{GUHp z02YHPE-862AS=;O*3bYs(I1S)L**9~xSXzagOvs@3X6Gi83jstXGFN@=&YU(&H$qU zqzC+IJj;>C3ipBcSQD@gd5WDSXJSHmKb+oi*R83Xn4PUJOC*C)LBUXD&Swy~KGP{$ zkm+=NN&7cMk2hLv-6_`L3h^ot$MCBV1s&(gmF#?=xI3aEBQ!Mi&)DZ*WAG$?_BxyO zqo>ZxUs(0lW?TW;_Eip};u3vb?yfSs~h=e`uDe(_(x^0fg-JNL*D*izfg+AXq=tP(lF~ z5A^^rG!)3+Fe||8Ohr|d2-t*_YBzrQ^2K;4br#?=Z*M3!w|lOPwz8HxDG-V-cE=kU z8jjuKxd~*)V^7-mmz&gpSKRXQi#+gv5qbmgEjK>+E%&+K^1v04O4}vkiI%Z-Hu(QcY7V;y;KWJhl$t~)tR||yI%>BJ`or3g5{Tp z>S;Jzpz0kbIx3`>_&iq5Y@cYh!7L*7A#GRd<4y?M5kLHGWg&NWmrF#q_p{_c^Zm?3 zM98?j$GVf!`BPEjrOw(O6DRTj z`PKS->o2%&z(KR}s8UTkt@RTp^765fU-d$=|evur9 zDiGZ1~}PZR=%r^~POo`YJdkp1@29xCXYgwD3cY!S|K}Rxg4c zuJ7N!Kldtt`ugn~lV*)M@US9kI+NjgE@!q)HC?T^>r6oJV29M6-Yzl}IC&{@?V4;i z%IS1_?|wwj;^*RJ<0a->Wrk{o7)meV6z$Bh5f*0YW%DqQ_@Ro$ZSsc*wXW<9JU zM)C-hP(K32FDPh2WveGG&BG=3?D2is*~5Ri>&#?ayMq9A{Sc)&Br2q!Iyia#<_$o% zs>;ffqob#Qhz|@8_r4R~=Je{21!x|KBfvWYz)TQvbhNY{w*CNT60kwG*4FZ$KmRT- zR|9JT5F{U4lLPHvKCAXtxtZ0-Rsb+zVPRjtehvIWK=jJa%R4_V1bCpy#SUD#A8~Q) z?Ch@BM;@Q$`=Hy^uVqOewZ?^&q$MY7|AuGX8GP*Szch7>I;5Xn4 zxY|#Hi)_EU2K)l2br}RW>yW^sM^5*7*cK{BlKQEO?&@p7eJ?o$X<&-pLkQAti?^IJYH9qipjEt9pv@X?lPx^20=&m zdf>S+@7`%(YtGq@ydmqwBi)IjOFXok$l5)K{(Ff>xa8QS9 ztI2k=A8BS+xvUN zusSe5@kS#P3!;CcUp4ze69GLAKzavoHBc#XY8kDaoVIH}?zTx)c3?HwXEne_b5|lH z%dSTn^Dm^?8(O%?#&sroVNN!(5K0-8&y0cKX)`f}R+d_yoZFpR#3}xIH6hZCak@m43kK#p;LR~H=unUM*IwuUX_4Xs z_t9iQk2~OKS*p{V93QWut!-g$ZfoPI`>#+daxh z134LZp_%0+r;HkZuJLH{u$WwBfVp zY?0N|I{#tDJfQ{ki?x8%%5>AR9Lm!3FIenJL!uvp6Rk31P*Wje>6 z`#lIhFSCK4X=p^BcKidJDIXSL;}Y8uxmMycwX<;TlCC4s@AU2%1Kv2lXyuWEDK~Z1 z+F?5kxolDMW}=;f!tIGk2cMQhs*5i*|NZ;!-@g{qdEs5lxo%t~SH4viplXbEyRe`f zSxOzstt37@-DHxgIs%Zln&3g(WGVAJzGItY4!cuyVOvy3#}hct0B0YZ&1}D>9D2T( zUJH4yy-s^n;W<$am025UJ=cw)?ERtvTL`cFLqhQ{PH;m}G^K{xEGt_MKR!`eoNjLm zw%%t24?vUk?kci|NataEyNF3f6(-k_*$ut;BUEMZyk^70yXZk6_!R1BVlSN9ll=Qc zcf8|qb23buDs7ydu*;s5MNvCOLpvtdXsZ2Q9ra9>A_@4GG*X*h>hZ#n9QN+*)yRuZ z3tnAJoIs)UvOMSG)v*#vl7eyj!z01DMUQ?v!!fdF>4p~G%Oz})`vUDn>_0U7Y-zI6 z|40D2n)+4e@B7wGszk)0`%q>6Kbxs-7pERzMmt=-K0zHq4*d>-e_kU z>E{0Um`P^5Hn0-7@~JlBi*-a63uJ@=0g}&xY?i(0$!9AW`cop0;OaA{N%#WLHFtYd zeWLbAdNv%Ezlew8gg@h9w%4Mj(3!gX)gbVNagzo+i!xc}iXTxsJ4ynUHyK4_nq-ux ztotLw-b2Q*0}UzmNp?Mg##DnfO@aU`H^7l)kBp+I3w(!<;R6Ls0};P*%OiG){orDn zLNWp9izzGfa5uG)+-go=n%`MiyOQ4-`#U$#dhdP7v<|Ji@GL;LDHr){44*+f2)9pzfXHZ^m;;h>uVCq{%W=8xIOcDCY&KH z0)$HE=@nJ>fEIDC(VY*=kUTv0~wCl+*vu1|SrG=nAuY!16d<;i zAnEmQGl7Z(wyMxI&B;e#*Sw*DAx@PgNJ!{|dqY)3@&C>dBkkF`?!t0BkW6$YNA|L007TeI?Uk#Sz3r?WF*$)UkG6aDr9AK17{-1%?=JGlmU>j?l#A}FK7RUqau8GLDAyR> zcxgddK68RQdXtHPUnS{E1H>&O-sq2Or`$QS(b$g#;*`5#_+}wRpT@uj z@lx>^d0fje^`@oac^Jf8mg|P48MCG3!x&WLfJnACFFhDE_XE3yWBZf^NGZl1tugUR zM!d=LBZwe&=!=PZc2t!gpDQs^f4j6Ma8sM^Prz40g#w6X*wQNlK%P*2rtQ;qaD)YD z5z%=rm9^ixu@L&9zKLsbhdOD%RowNnS5&N&idc^z*Vg>u>|*Mn+`{u?)L%qOtU~kH zNDP^6jI;(ol3UgzE4xUJo(MMHB@-XQ!+Wp?r>aVKq#W-112e4~%HifsUR?HxJqD62 zgdsuxzHyb&wP#MwyML#aK&`@WV(b zPI*E_exLS$-!F&(J9M%0oC-ipIT6)~IHNh|=h4%p;ZS(I*A4^i%iwZ)VPAEQ(+#je zjwwyQ%X|^$#^iYFW5v{-Wp-vtU|zA0J|e?Up=mt*>{!6tL zflC`+9aW+{gAsxnwCYDb(*XvU9_aQq7UG2H|BQH08gU!gSUE@xUSciYEh9XRkX1f| z11@1(e7p&-LLfz%!B?O?n3gfcl$Lp7vNK9Sy#G%xfb6(^6v#Zv_6LbW6u9(|$XZ`9UontGn>Jx)%pDzPFkr3`pl&t9!~fxBA<%Uu%w6 zayPzkbL({@0D8Qn=jlmJ-S#(yp`kAK4GiqBpHL`}_nM8(N{Es+EJGRM*381fZJWQG ztib=h_Hkzq!DBDEGOV0XAdM<@M-Ooe-ZZlE0LWT4XZ?4K7;*yu_z>o;uiL!S>3I!G zG!X*@Z2R}hsAkMyuobSy}3etfd*L3KPsG zys~*C@|t%KS15Q2ZkQZ{#m%0h2Ulq0!E^sA8>E=8X>c-hG}V>vgqOE41|nPXaLP7h zHeD(rnLKr(GxYYJ{QY~)=9($q?nZm%E-Wx_6lwX?>dSuWoGgMv>Ygm3X7I1!e1qhh zMFzb8*Ww*7Gp!>6!-kSx5psiRP{4lWJ#AV>bj)$DHG#qf8|&)oCV@>dS^|45k3gclm9X+v`Re24|@v-$t`V}@pceuKEE(6G&Hi* zfIYypTI-%0DY1%F!7I%jl)|1P%kQ8Ou|hGHi0o##p|3?YR<(RHk!oh;?f`)pbGz&TfNE_o^P;E z6Cp!a@~ygtuJ+d@uN>1dikQog4{Hm2BdRjXlRb^vMQDmj;Pee;^d8RV7ky8{;}=-n z4bBwF%%#lF?!ZFxnXQUW4Ko@jx5*-|MUzPhINv_q2qspQ4#W4K)6g>AtN=#F2Frqe z0W}8oAvdUsNSj-nc4T?#*pQ;vn6Xh20ZO`;)XwfMmcIw6@)~h3jd^9M#?&<9ZSNZg z^P6cKt~i&xUO-k_e$M}F&ItHN{HITMorIML_*;*v_`K3tPTdgr|hT3lT_xAL%c;en7y!MFNnd<2WW zyqMpMwLI;QeX49GsnF`u(^7M;U(HEX*E6R(2b)_pkvRXm7EgIKT;pLe73`_9URB)> zQa`H~8hE*Rg~egHtbDuCH~yeNeyTG01!g(X3BfSZ`Zn@SOjvItV^TagooI5zwSQ+Z zLJ*6z>=w>@h(iS5AFqyDU8nnfq9lB@Ga!>Y>lpx^afhS)@;oH%S?4tVcqj=!PfeCL zWtiVux=Edj;oOgkLbuK0(bB>pe!GO>;IKI(kBMb*D)lA{ zPLIdVmF=##`_tF%0|Uiu_{QF0bw9NASxkL4P@H-={D<;bW&=D45jjQ4$^lNXJ}>p% zjo&XE-`#LgjiB!MqrIB)%ZQ6+3pvEnE&N3=`SmpPtleq(>@n zFV833dqNdYnJw&k! zS#}f}jvdi?s;$PK=w_UsGc8zBce#(nUQ)6tgO1}vG!P%^7v6+E0Vc7npowu7pImv- zi-Q9yADPpJ(!;CsUoa<%h=+4i8Q{#q625qd`?itF-Fi1D=aZ^Sm|HtyH zh4%S$lj62-yX&eN;8 zBdmvWcN`$A95S%q_@3P#UB$oN+pf?H5AnO;eu?a^irtHc-RfIZ2lE~3n$b6gFL+v zHK{#gwxXitH35+*$Pmmm`pwOek+!GDM9z|MGEAJ#Nvwv3I+rS#r>^Cgq~KVpXJrvQ zLE@$I{%<#x5-!TY0v1820Vj1x6?u7B{D?LLPHHbO+=jQHp?{$_p_N*q{>uh;R^Ybr zsVSMn%M;v|1F;rR0^4`r7~T|v;%=wGC$_YppafOzH7koKrK#%Er`REG%;p6xt$N?{ zZJSG4sZW`OpV^&Jr%mE&BIN?LUE4N6j-b~?W?(p23eObr7hL~s%IyV_OMfr^XaDfv za5N9a@!0YnZgg~K8imco;NG#l8{NukO8!gsUI22!`FUp|i@bt9FCGcHzpem{yXU0Q znyJIOCs_HW%5@Z~0D5J4whAH-dC^{At^xJ$thiiGzLpb?-xL(c`Nq-jI#XsV)$niO zD~VZFJABWY)G)Sr7GW)-ViW)}Gf`0b-srSEdQzQXSSP(#-mXgy&>u^hf*LwHvl}Ob zzb%#LIOE%s`$BW*&5a{cr3uQ`-%cNxUvTs)jE5Tb3>`FU zv&CH3XYxq?QSs}xdqCl!|BK+1;;x`P9K6e&rV5}~9UEI=h!Q=l$NZ$lD`LN)?UD~K zEACRZke8S4=MG<9EO^)6X308k6Ew35Kq&vsy7~+XD8AJQ@=d(e0+*F0JC~Flb9;z{ z9kaUn7##DpcB0{qmg@)Fgwq7|j*$`X63q%v0cq)SC#E;ZnBCb94%YU55y+NHnEeF; zR=4|1gNZ)BNb_sUKCK+ga@)f>9e2#CzwaY&FA;LXosm8e{3;^$MmEj08d+2aA`;Lx zjAGa;oKyo^RY(9_0$8#rBnEJGg|XiTyt3Qfrp1yiEtF(tWwK60^JsiVnC!T3MgBcg zAgF$KMKJ*)w{wYWC~%;vE~Q&;QI0dUR!9mL8RZ+$GMmUq@j5=f z&K|yV-bvWVf`Ol3Ufw&O`l}fNb*ghw8BN2frYg`pcdl;gc6%=DQw3!>FoiYpDoXhQ zDEDyixsNMCFw;(o7%#xe){?F(e=qf--2N;SG_1CMQM>-k+h(LoH8uHxtif}js$DcH z-AiH+IIot1-@swXdZwmujn2%B1(Zel_EgM_fkHtr zbMeUJgx@rBYzzkLqT1LkG0*zl_^emvv>8kE)lFQY}gXAAcQ7Zbkc3Z@382i)f zMP(l~pjS>;c7q3{yShK<=-8h};QKf5`uV}><$s%IHpiVR>Absy#+4b&S-QXNeq0v1 zW39SfG-J|P8N~Y!cKt}3n)>CsTo*D7HxY4v7Ss8AI6lC7rkw~jgzn--QL0>bS%^}2vG;BYQ~=qMJ`Y%n9_g? z{qw`fq^R^;m15M(v0!f~t=5P%K2Z&>S1U&me5!(TmHqpM)o<^BH2jif&u@rmQM&N~t*yWVqheu815=gOc`{(;dc*8C3tw`dU%-A0ZlTR z>961G{QamGoD`K12#>*RhDkse9pznbhnJrMrB?Hn0J+9oU(bw-t6VK840G@+J@(Vn zyX53V=2s35zIaM+IVR$OVD-D?Ua{5^JXdzE!FaCfzWncM03=sdA|A5Q#?Z~)lmfLa z{>y@gyA9fVIuzX8;>D`#i4>qifk$@7!=bKp+3hAG$yNe200PKLyG8N7z#*lQOkNN- z-QN&6p%Je2)uE&BQ;lAZ%95SFpiUm#`QbCB=N-I`4mgf}@Nh`}wOm8#qBbn0I^gwe z$K2F;7JG$fP=9DXS%Y%9-pmX!{add`f4gms7A46x%SB;5;)ln~tj@Lre0*ju9JSs5 zyp!=|Q`^>iZ?@j~gwt5|+hx5hsj z|7mkn1o~}o%QPmM9Uu?ewO;Nv&rTd7s(Cgaq>_DSI7j-Ls#f=}4o|KEDk{n;ONs`K zDsqf4$)qM+u+}xMx5Iou{%VEd<>mgw z^X6?^osBPnx^&!jx5PjJbs?hhr4Aj3g-vh_I5aAF+Ji2d!I6}-!YgaiYw$_a?Ut@Eg-TmfSv&rS`R-?2n6=Z3nuF&aMU{#1e?l4&vHIEvYdPT^5CFwiQ-H@l1i>Epo!l_SBs&oEE}nw6f`6 zjI&TPQr^j?e-wfF^51lX%c}4~W8iGn>c)R;Y(7YIl%NLp*+FQ5tft!BT+i@3(mS0= zd0*fB0AXIHs+MJNPz73kOH_oKf|57LKRbI3?HZk2^5`5}QcZKuV~LxrgJZK`gebZl|go@K?PmF6>Qcp&kz1WfPFjuBsVc z?@bhVcYSO)L~wI2BI>`&-`8ht-4=p1Q|{9T@O!4N&`0sk3WjFBrJ_m@O63*W)A*wH z)fORE$Ccw17u9!PW6P<4vk<=vw1Yz!fg}g!STKN`Aaj8&yi9jgQfTh{p+}+QVrf57 zQNfCUUkbFgB7|?+bT7y)4KA`*vc8^$!JsI5{q25cYkAI&GUPU4Ea4ghNHGiptk-Iy zp)!K`mFQfSD-SMOEuf2%n);`%kh5#YxRPG@r@58UQ+TM2!@$8Iuhe;Un8>HvM%LS%>0~vS^nKY2=j6{@vtqi| zn#mE*2~Up{c+!+OT@fC~w{jVZNdESuNE{T`FhbC3&AB>x>#w^$%9ze|W@YgpaWH12 zDvnlQ^ki2*3r8Hkv(`fYwfb*qm?QY><2=j+9ufAzNtdm41~u3whW#Kch3Wro|b z0sE9tn3#HoWPfBUWDX8b2bgARkf>w<$Q-|tK5$k{=)r+nJd%_K9v>f<1=`aSS5PYo=^Gpx28H@6c>m5sZIT|J0oAzr zAG&adO@$AJbch*sviwE4Oe=D>FQU@!4T4e`xY?yY4K~=H@`Z8Q2?XBr227{Pyw$Q0 zmp6&^axv*teez88f$6>qM?K!d{tMC3{8!J}Xg*qKFIN9E*mZY#vqvWptdwIp$DS$_ zNhO!a6Lr(-c+@qPL(POEr4-XIRaXy~EgIS&Q-x_Ofc9o|It^Zq{=39wC*P>WBZzsD z%&4ce`rv?;?e^?(lHvmC*v3o?@n`}IQP*?&s0sC}6>!%Gq zC5)>~v#bNgS?*YIklVeR$;U%bJ?R4|uQ25#C)Z#YBAp0DNa*acTGl#JMHN9P^5GRk zuxsn@$pz*zm(V3gx0Y=4jO7dsQ?Ku9TxO^@Z-OFwL$KDAx#}GdeS83`NoatFqN19Z zCSy^c{!T|nMh(~32NFnT7?S~LpL~%)^PIz56R2q5;o;SqaIcTYbs%G}K>sz{aVzWQ z)}60OLgJ9HPIQcdZMwCV@-WNZOm7a;YnLv8mkuO*HGar;-;d3t$g7m=`yPWf4WEo@ z338kSrEB_wdz|aq0=$OV@R^c){ULkO0FLpK$=Rg7byLlvUn{509?h9{=TIyx~8UYXQ~FQEd~^Xa3r z2}aEab-b3_H*VJkJMw@Vmm0W`-`!o#G~uzZl-C&Z_P1Uhz{|;*&r^2MWe%isnnP9t+->sI~G$_iGqjox9-_W=0|BR8OE{AKPGjnS* zEC+M`pAx!$TgIe@F=&>X{g|1Qf#T+YFOo5jCFJ{=7uXl8z*GTi6u15HQy(?0sYFky z$dgX`#usvOy-`xXz~^sFa)xB%w{WHurs_t$EIyz$J(7vRm>1DSMoO&DsDp;bs5wwv zY%1QQ+UxxbE#plFO;Ue4$!HNVUfN)4PJopq8qN=YInpQmRNMXeQp-?RITWQ)v=k8; zzp@(a|3?9`B_*W0QhDlJvAVmtosjLeJG%UK<9tWtRbTp7K81=N=4JnPzNOy(m)YNj*Jk^)b8D$7?%5iMZDF!l}ZduX`f^Fa0)+V1u1WI~=MoT5VWC zVLtn&6};{DtT4d#7y<%ti{PYu(1ya)k?DGs!1igy;LfA82}zmcKmo5Dce_DFmTwQ| zM0|}M`@biP1I4t!Ua{$TlX{t!neK8NparO{oYw6|^L3zHY;#Usr8{=op46JtsDp0w z4oxIo6o_9E9x@~@ETGJyvw-g3h{S8C|6n`&5!%~ln&06tw*3j(eSeID>b*Z*VV9R! z%4usWY($YRgmXtP^x&=Q`QdB6H5GbHW$IUDZSh>C--N9JX9sxb=qI<^R@3s_1i9yE zW6*a3kDwz#u>MThROLSq#=f1=z5%(fuxKz`@CiO)ytLYXVjrL?n+erTaR_8oUg?1M z*0)jx1)!?Yf-=T@hGEz3U388dQ_%O6VCe1d^+G#^qtY4Mk#y%N zK~W>MYaIr=i!G6a2_+PJ^~NTQAb7D+U$0Fs9)*t9x0=J<-TH)hTwy6IA5KF94#77g z!pusZ{xP19y zs9isALh_kw_lvWQiAi^Q@(cIezba0I0ln&_C4U_6FBCzG51-kh-+<`0qk76ri@(5 zuyFsSqyL~n{k@^Axf3~&VlLYaM0NNhdle>QSCpxqyLAK49(cfx&6;rAKtmuqb6B6^ zSB41T?_Wg^eeaI9!3A#{;Ot3D8d@K8#_2H)5_EMLF^;`cAg{RF^eZzl1s z(0y9ctWz4+5YK#9~?h!d8FLO^}WM*&d^R(pl4|cw- zZ{lZyn>>**R;AnEjnZ6XW^$|NbWlJ{T%HFr0?AvPx4z-moHTe8xrQwze+8KM)z)Q=SJ$T0z1iMDj zDk?~m2j<@)Vy_G^p$%`8mQB$NhlBo3!wNo?^hiYK4tBDAHh5)xE`B4eM2V|EPmrvHtO&msQ%TPNfyrBmms@Ja6%$6JPZ^iT@&}S z&jCjTjDWNoB)r;IRT&rT$ay&L?)Vtx5m4l$lWw%!;9fNQ6KOEUa>0u8yMFNXR1XG3>oEL$J38apC$y*#6+eXHlb#uZogKZpZwz{|`u9MT z=-BT+iKWwMC9NhzvnpB?zZA(j^B>H@xViDW1<#JNu{u9)tdfq^x zV~Db+HSr@8^_*|3HEVoitAWj{$StI<|IWc{8l3Aut*-uZbbCMr1Oj2^u&^YQl1I(X zwmu~#AV9^TIvdHx(4UQ%>4v6zTF~-Vp$$Rxo8&ga|JL^6ctmz4+Q!hv~tA#BzAWG zsadPa5tqWHpmwvj)+07CZFprao#dO0FJ>1T@o8XiV8&EstXf%Fl;&RmS~`Bm0W)1^ zSM_e6R^y3!4@h{?5*$W&Xs;kNghmzl2n+Sr@4j`y@Pi6Ka?M_oe|O9jJJH&j zlW%@>s&BCeBgFL_xHE9es4gEkN@Nl9*1deZhgnz z;9y8iu{#24-=G~6z)LroW&o3nc#&O7a_JwB1f9Ux8#tK^?r_b^#C{SGSwoq@zP>R8 z?E~?noCZm%IMAG{tZ;U}M+w!oh9!vD7lNf-HsZ8)-C^x0Cfvd2xQK&exFi4Hn_uE6 z50^M+=V)j?;qO3kXi{b_thb;nCLW_dfbeOI1P2EbYqbaIV2L3bWXyqhpU(Dp2I=ju z6z|@VlLxsf5)u;d2SuSi+~(!yS=OI5B@Q)d=D8>;;Zo4~Z*9a;<6GdBS_ zWk=txF5N45G)x*iQE=fvyIsce?4UjN855998r_Nq!se9j&ORU#30v`iV6(mZqpT=I z3GCvJ_`Ii^G+7{|gXS4${vplUDmBFi-sIE}pUg-0Ko%d+`kw@MBW20x?hf?)y}gl} zQqsuZ?C}gDmW&+kSh$RN>AmZfIavP*+Pd@KU9`_tt2JQ4!{ai)UttUSQ=$p?)~{8_ z-aav6Osb}an*PDs&dBE-=i5-67p>ii*S5%-#{pOcf4(FD3GygAhlC-#veIdJekLdc z!P(7lv%e;TK<>{y=&wk=*8PEfq?>9JxJ$pGE4_f7zccsJB3v)GzVsf{XM+6t}5W;j)@-DQuF0B}rDG~&$Hn`MAN2KwcsH~Brm ztUNJ0W?Q423sl?Y+J{d<+r$hV$9M~KRd2vsc)c?`eT(S!_D~@ae^W@PsM=OV3rmsD zw>vvw#`D++b1rWJ4}$6z;g{uv+Q-n9a(|Xa_{^rLMrX9GbLNj0#$v-E2ZRl}9dFvU zuj>zB-`xDHQ}e5k*d8evwgn}?(`{p}iFnpD|0dAE2)aJqjM`&C+c-nLj>e1+s1A7V z6`c|3-U;`PO^VVp;`2kO?t6-R8f?pFpit;*ie2R>9-k0+n>RTQ z+hW$BZh!pox(aKL+T1+2+;RGs__qgJ7AE23kG zmF(yqRyQ}*%-Fh01LKCYyu2D;qJ#dpbAG(4B4NGFS%8&9id5vTC|D?*yKnQzwQJrb zTOs}#HXSNc2L-$GivB(R&9vK8k63)xdP3Xmlx!7npBWZ<)r~gj!$;B+2WB?(1Nhga{^4eAI-jf+gxg8RM45s z51bwbqn$e%cYA7gA*{Hj>Gi$I2REIjXsw`1QFBXI0JNWITws-en67P$@AOe@6~=-@ zEE3XezpFT!O-kBPu!Xs3T*Qkzu#e|vNHA`*RFLVTtq`rQo}{EeqODG&q)wv^{zHM} z@3V+ej|&r