summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess2017-05-20 09:28:22 -0400
committerJoey Hess2017-05-20 09:28:22 -0400
commit24e789a2ac981b3d4b2dfaf1af359c4407587a00 (patch)
treee676038cd69b8ff91efc3b7b5a85e63aad5214d4
parentd499d8d668fa8ec32833edb4b7a5677dcbf75c56 (diff)
parent3dd36f7e922b0dfdde54420a931e77fd02e6b83c (diff)
Merge branch 'joeyconfig' of ssh://propellor.branchable.com into joeyconfig
l---------config.hs2
-rw-r--r--debian/changelog23
-rw-r--r--debian/control6
-rw-r--r--doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap.mdwn3
-rw-r--r--doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_1_8ab6b313c80486f8f87a5e13e830bfa9._comment20
-rw-r--r--doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_2_773fc1441dd06e9dd41508bd800298eb._comment13
-rw-r--r--doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_3_f48a6191c56bed41eda55436f0aa3e9c._comment15
-rw-r--r--doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_4_b1769231a633ad2b978ee4c9fa90591c._comment9
-rw-r--r--doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_5_6dc24952c8efa31a401191a8cf2d0b39._comment14
-rw-r--r--doc/forum/Git.cloned_deletes_harmless_empty_directory.mdwn3
-rw-r--r--doc/forum/Git.cloned_deletes_harmless_empty_directory/comment_1_7cd0521c6d071b25852f8355f4f61f94._comment20
-rw-r--r--doc/forum/Git.cloned_deletes_harmless_empty_directory/comment_2_289f157f129511242d93beae76fd03a3._comment11
-rw-r--r--doc/forum/Manage_multiple_different_projects_with_propellor.mdwn7
-rw-r--r--doc/forum/Manage_multiple_different_projects_with_propellor/comment_1_dbad48163b2efd6434ea7c37a72dfd30._comment14
-rw-r--r--doc/forum/Using_propellor_for_continers_only.mdwn5
-rw-r--r--doc/forum/Using_propellor_for_continers_only/comment_1_95e8b7103f248d93570fecb6b8999996._comment20
-rw-r--r--doc/forum/Using_propellor_for_continers_only/comment_2_42b45a126cfdf1dfc370b166c8042690._comment8
-rw-r--r--doc/forum/Using_propellor_for_continers_only/comment_3_cd4b9b9e160469e9f0b105f6c40a4ef8._comment54
-rw-r--r--doc/forum/Using_propellor_for_continers_only/comment_4_9dc985b26c29b9ce21e6c75ec03f6262._comment21
-rw-r--r--doc/forum/Work_on_OS_X.mdwn5
-rw-r--r--doc/forum/Work_on_OS_X/comment_1_6d7d5b89f1de9604718f7973e4b3eeb1._comment20
-rw-r--r--doc/forum/Work_on_OS_X/comment_2_00b20c240fc13bed6dc54e5b985b41e2._comment17
-rw-r--r--doc/forum/Work_on_OS_X/comment_3_294f4783522a8e4887793aac921ee546._comment14
-rw-r--r--doc/forum/Work_on_OS_X/comment_4_74b579d4d590432b6bd236ccb929cc11._comment16
-rw-r--r--doc/news/version_4.0.1.mdwn6
-rw-r--r--doc/news/version_4.0.3.mdwn6
-rw-r--r--doc/todo/initial_spin_compile_failure_recovery.mdwn5
-rw-r--r--doc/todo/property_to_install_propellor.mdwn16
-rw-r--r--doc/todo/property_to_install_propellor/comment_1_b05e9a44e5c7130d9cc928223cd82d78._comment16
-rw-r--r--doc/todo/property_to_install_propellor/comment_2_9fea601af57777e1cb49952483f4da63._comment7
-rw-r--r--doc/todo/spin_failure_HEAD.mdwn10
-rw-r--r--joeyconfig.hs54
-rw-r--r--privdata/.joeyconfig/keyring.gpgbin113014 -> 157269 bytes
-rw-r--r--privdata/.joeyconfig/privdata.gpg2866
-rw-r--r--privdata/relocate1
-rw-r--r--propellor.cabal24
-rw-r--r--src/Propellor/Bootstrap.hs11
-rw-r--r--src/Propellor/Gpg.hs2
-rw-r--r--src/Propellor/Property.hs14
-rw-r--r--src/Propellor/Property/Apt/PPA.hs3
-rw-r--r--src/Propellor/Property/Bootstrap.hs111
-rw-r--r--src/Propellor/Property/Chroot.hs35
-rw-r--r--src/Propellor/Property/Cmd.hs1
-rw-r--r--src/Propellor/Property/Docker.hs2
-rw-r--r--src/Propellor/Property/Fstab.hs29
-rw-r--r--src/Propellor/Property/Hostname.hs2
-rw-r--r--src/Propellor/Property/Mount.hs14
-rw-r--r--src/Propellor/Property/Restic.hs202
-rw-r--r--src/Propellor/Property/Sbuild.hs4
-rw-r--r--src/Propellor/Property/SiteSpecific/JoeySites.hs6
-rw-r--r--src/Propellor/Property/Systemd.hs2
-rw-r--r--src/Propellor/Property/ZFS/Process.hs3
-rw-r--r--src/Propellor/Spin.hs2
-rw-r--r--src/Propellor/Ssh.hs18
-rw-r--r--src/Propellor/Types/Dns.hs8
-rw-r--r--src/Propellor/Types/ZFS.hs4
-rw-r--r--src/Utility/DataUnits.hs8
-rw-r--r--src/Utility/FileMode.hs22
-rw-r--r--src/Utility/FileSystemEncoding.hs41
-rw-r--r--src/Utility/LinuxMkLibs.hs2
-rw-r--r--src/Utility/PartialPrelude.hs2
-rw-r--r--src/Utility/Path.hs32
-rw-r--r--src/Utility/Process.hs28
-rw-r--r--src/Utility/SafeCommand.hs4
-rw-r--r--src/Utility/Scheduled.hs2
-rw-r--r--src/Utility/Split.hs30
-rw-r--r--src/Utility/Tuple.hs17
67 files changed, 2421 insertions, 1591 deletions
diff --git a/config.hs b/config.hs
index ec313725..97d90636 120000
--- a/config.hs
+++ b/config.hs
@@ -1 +1 @@
-config-simple.hs \ No newline at end of file
+joeyconfig.hs \ No newline at end of file
diff --git a/debian/changelog b/debian/changelog
index 11c9922f..90205ece 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,21 @@
-propellor (4.0.2) UNRELEASED; urgency=medium
+propellor (4.0.4) UNRELEASED; urgency=medium
+
+ * Propellor.Property.Restic added for yet another backup program.
+ Thanks, Félix Sipma.
+ * Removed dependency on MissingH, instead depends on split and hashable.
+
+ -- Joey Hess <id@joeyh.name> Thu, 27 Apr 2017 16:31:26 -0400
+
+propellor (4.0.3) unstable; urgency=medium
+
+ * Added Fstab.listed, Fstab.swap, and Mount.swapOn properties.
+ Thanks, Daniel Brooks.
+ * Added Propellor.Property.Bootstrap, which can be used to make
+ disk images contain their own installation of propellor.
+
+ -- Joey Hess <id@joeyh.name> Thu, 20 Apr 2017 00:54:32 -0400
+
+propellor (4.0.2) unstable; urgency=medium
* Apt.mirror can be used to set the preferred apt mirror of a host,
overriding the default CDN. This info is used by
@@ -10,8 +27,8 @@ propellor (4.0.2) UNRELEASED; urgency=medium
properties added to a chroot that way from being seen when propellor
was running inside the chroot. This affected disk image creation, and
possibly other things that use chroots.
-
- -- Joey Hess <id@joeyh.name> Sun, 19 Mar 2017 16:37:27 -0400
+
+ -- Joey Hess <id@joeyh.name> Fri, 24 Mar 2017 14:04:50 -0400
propellor (4.0.1) unstable; urgency=medium
diff --git a/debian/control b/debian/control
index 289e663b..e6819060 100644
--- a/debian/control
+++ b/debian/control
@@ -7,7 +7,7 @@ Build-Depends:
ghc (>= 7.6),
cabal-install,
libghc-async-dev,
- libghc-missingh-dev,
+ libghc-split-dev,
libghc-hslogger-dev,
libghc-unix-compat-dev,
libghc-ansi-terminal-dev,
@@ -18,6 +18,7 @@ Build-Depends:
libghc-exceptions-dev (>= 0.6),
libghc-stm-dev,
libghc-text-dev,
+ libghc-hashable-dev,
libghc-concurrent-output-dev,
Maintainer: Joey Hess <id@joeyh.name>
Standards-Version: 3.9.8
@@ -31,7 +32,7 @@ Depends: ${misc:Depends}, ${shlibs:Depends},
ghc (>= 7.4),
cabal-install,
libghc-async-dev,
- libghc-missingh-dev,
+ libghc-split-dev,
libghc-hslogger-dev,
libghc-unix-compat-dev,
libghc-ansi-terminal-dev,
@@ -42,6 +43,7 @@ Depends: ${misc:Depends}, ${shlibs:Depends},
libghc-exceptions-dev (>= 0.6),
libghc-stm-dev,
libghc-text-dev,
+ libghc-hashable-dev,
libghc-concurrent-output-dev,
git,
Description: property-based host configuration management in haskell
diff --git a/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap.mdwn b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap.mdwn
new file mode 100644
index 00000000..61cd10cc
--- /dev/null
+++ b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap.mdwn
@@ -0,0 +1,3 @@
+The mount command won't work when activating a swap partition/file, so we should call swapon instead.
+
+https://github.com/ArchiveTeam/glowing-computing-machine/tree/fstab-swap
diff --git a/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_1_8ab6b313c80486f8f87a5e13e830bfa9._comment b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_1_8ab6b313c80486f8f87a5e13e830bfa9._comment
new file mode 100644
index 00000000..4a144df5
--- /dev/null
+++ b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_1_8ab6b313c80486f8f87a5e13e830bfa9._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-04-05T02:17:00Z"
+ content="""
+This idea kind of makes sense, because swap partitions in /etc/fstab
+get swaponed at boot.
+
+But, the implementation doesn't take the types into account. The `mounted`
+property takes a FilePath for the mountpoint, but for swap that
+needs to be "none", which is not really a file-path. Also, the `fstabbed`
+property has a separate `SwapPartition` type, so making `mount` support
+swap partitions without using that type feels wrong.
+
+It might be simpler all round to treat swap partitions being able to
+be specified in /etc/fstab as a historical accident, which it kind of
+is (increasingly so, since eg systemd has other ways to accomplish
+that), and instead of shoehorning this into the `mounted` property,
+add a new `swaponed` property.
+"""]]
diff --git a/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_2_773fc1441dd06e9dd41508bd800298eb._comment b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_2_773fc1441dd06e9dd41508bd800298eb._comment
new file mode 100644
index 00000000..62cabc0a
--- /dev/null
+++ b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_2_773fc1441dd06e9dd41508bd800298eb._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="db48x@80bd751a72d5a80737e2f875342cf845629c7202"
+ nickname="db48x"
+ avatar="http://cdn.libravatar.org/avatar/ad2688127feb555a92154b16d8eeb5d3"
+ subject="comment 2"
+ date="2017-04-05T02:48:08Z"
+ content="""
+Yes, perhaps if it took an Option FilePath (am I saying this correctly in Haskellese?) it would be nicer.
+
+I don't mind much how it's structured; this was just the smallest obvious change, since it was failing to mount it. Perhaps breaking it up into smaller, more primitive, pieces would help. Fstab.mounted could = Fstab.fstabbed `onChange` Fstab.mounted, for instance, and then I could write Fstab.fstabbed `onChange` Swap.swapEnabled (oh, but Fstab.fstabbed already exists; I'm not using it because it replaces the whole file, which seems like an odd thing to do. Maybe call it Fstab.listed instead?).
+
+Also, for maximum irony I was just perusing your most recent dozen commits or so, and saw you enable Apt.serviceInstalledRunning \"swapspace\" on one of your machines. That's amazing; I had no idea it existed! I am re-evaluating all of my life choices now.
+"""]]
diff --git a/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_3_f48a6191c56bed41eda55436f0aa3e9c._comment b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_3_f48a6191c56bed41eda55436f0aa3e9c._comment
new file mode 100644
index 00000000..95c69551
--- /dev/null
+++ b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_3_f48a6191c56bed41eda55436f0aa3e9c._comment
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2017-04-05T03:08:30Z"
+ content="""
+I like the idea of composing smaller properties to build the current
+property, and add flexability.
+
+Renaming the existing `fstabbed` would probably be too much bother.
+(Also, I think I picked that name because it kind of hints that the
+existing fstab does not come out alive.)
+
+(The swapspace package is great if you can eat the now tiny overhead of a
+swap file compared to a swap partition.)
+"""]]
diff --git a/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_4_b1769231a633ad2b978ee4c9fa90591c._comment b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_4_b1769231a633ad2b978ee4c9fa90591c._comment
new file mode 100644
index 00000000..ca04f945
--- /dev/null
+++ b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_4_b1769231a633ad2b978ee4c9fa90591c._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="db48x@80bd751a72d5a80737e2f875342cf845629c7202"
+ nickname="db48x"
+ avatar="http://cdn.libravatar.org/avatar/ad2688127feb555a92154b16d8eeb5d3"
+ subject="comment 4"
+ date="2017-04-05T06:39:49Z"
+ content="""
+I took a stab at implementing this. It compiles, but I've not tested it yet as I need to get some sleep; consider it a work in progress. Looks right to me though.
+"""]]
diff --git a/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_5_6dc24952c8efa31a401191a8cf2d0b39._comment b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_5_6dc24952c8efa31a401191a8cf2d0b39._comment
new file mode 100644
index 00000000..f87500b2
--- /dev/null
+++ b/doc/forum/Fstab.mounted_could_call_swapon_when_activating_swap/comment_5_6dc24952c8efa31a401191a8cf2d0b39._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 5"""
+ date="2017-04-06T23:51:08Z"
+ content="""
+Merged. Have not tested it either.
+
+On my Debian system, the swapon command does not support the
+`--no-headings` that you used. It's `--noheadings` here. Is that a typo in
+your patch?
+
+I've simply removed that option for now, since it probably won't
+hurt if it treats the heading like another device that's swapped on.
+"""]]
diff --git a/doc/forum/Git.cloned_deletes_harmless_empty_directory.mdwn b/doc/forum/Git.cloned_deletes_harmless_empty_directory.mdwn
new file mode 100644
index 00000000..ce3c192c
--- /dev/null
+++ b/doc/forum/Git.cloned_deletes_harmless_empty_directory.mdwn
@@ -0,0 +1,3 @@
+In my case I have carefully set up the directory that I'm going to clone into with the correct group ownership and setgid permission, so that the cloned files will also have the correct ownership. This change just checks to see if the directory actually has anything in it before it deletes it.
+
+https://github.com/ArchiveTeam/glowing-computing-machine/tree/git-in-emtpy-directory
diff --git a/doc/forum/Git.cloned_deletes_harmless_empty_directory/comment_1_7cd0521c6d071b25852f8355f4f61f94._comment b/doc/forum/Git.cloned_deletes_harmless_empty_directory/comment_1_7cd0521c6d071b25852f8355f4f61f94._comment
new file mode 100644
index 00000000..91b403b0
--- /dev/null
+++ b/doc/forum/Git.cloned_deletes_harmless_empty_directory/comment_1_7cd0521c6d071b25852f8355f4f61f94._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-04-05T02:22:54Z"
+ content="""
+I am not entirely happy with this patch, because it seems that if
+Git.cloned took care to preserve permissions in this case, it could be
+argued that it should also preserve permissions when the directory already
+exists but has the wrong content. Or equally well argued that it should not
+preserve permissions, which might be a leftover from some past unwanted
+state.
+
+Is that really the best way to do it? You could instead say:
+
+ Git.cloned user repo dir Nothing
+ `onChange` recursiveSetGID user dir
+
+And then you just have to write a recursiveSetGID which would be a
+generally useful property.
+"""]]
diff --git a/doc/forum/Git.cloned_deletes_harmless_empty_directory/comment_2_289f157f129511242d93beae76fd03a3._comment b/doc/forum/Git.cloned_deletes_harmless_empty_directory/comment_2_289f157f129511242d93beae76fd03a3._comment
new file mode 100644
index 00000000..1a8c1447
--- /dev/null
+++ b/doc/forum/Git.cloned_deletes_harmless_empty_directory/comment_2_289f157f129511242d93beae76fd03a3._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="db48x@80bd751a72d5a80737e2f875342cf845629c7202"
+ nickname="db48x"
+ avatar="http://cdn.libravatar.org/avatar/ad2688127feb555a92154b16d8eeb5d3"
+ subject="comment 2"
+ date="2017-04-05T02:37:44Z"
+ content="""
+Yea, I guess that's a fair point about the other cases.
+
+It just seems inelegant to go back over all the files and fix up their permissions, when it could just have been set right to begin with.
+"""]]
diff --git a/doc/forum/Manage_multiple_different_projects_with_propellor.mdwn b/doc/forum/Manage_multiple_different_projects_with_propellor.mdwn
new file mode 100644
index 00000000..bcba383c
--- /dev/null
+++ b/doc/forum/Manage_multiple_different_projects_with_propellor.mdwn
@@ -0,0 +1,7 @@
+Hi there,
+
+I've been tasked with investigating propellor as an alternative to Ansible. I'm a little bit confused about how one might go about managing a *single* project's hosts with propellor, without infecting the global propellor config. It seems that everything is concerned with the ~/.propellor repository. However, I don't want project A's hosts to know about project B's and vice versa. I'm sure I'm overlooking something obvious!
+
+Thanks very much!
+
+Mitchell
diff --git a/doc/forum/Manage_multiple_different_projects_with_propellor/comment_1_dbad48163b2efd6434ea7c37a72dfd30._comment b/doc/forum/Manage_multiple_different_projects_with_propellor/comment_1_dbad48163b2efd6434ea7c37a72dfd30._comment
new file mode 100644
index 00000000..7513cc09
--- /dev/null
+++ b/doc/forum/Manage_multiple_different_projects_with_propellor/comment_1_dbad48163b2efd6434ea7c37a72dfd30._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-03-24T18:14:14Z"
+ content="""
+There did not used to be a good way to do that, but since propellor 3.2.3,
+when you run eg "propellor --spin host", it first checks to see if there is
+a `./config.hs` file, and if so, uses it instead of the user-global
+`~/.propellor/config.hs`.
+
+So, just make different git repos for the different projects with propellor
+`config.hs` files in them, and `cd` into the one you want to run before running
+propellor.
+"""]]
diff --git a/doc/forum/Using_propellor_for_continers_only.mdwn b/doc/forum/Using_propellor_for_continers_only.mdwn
new file mode 100644
index 00000000..faf07956
--- /dev/null
+++ b/doc/forum/Using_propellor_for_continers_only.mdwn
@@ -0,0 +1,5 @@
+Hi,
+
+I was wondering: Is it possible to use propellor to generate images only without actually managing any hosts per-se? I couldn't find any documentation on that.
+
+Ideally, I'd also be able to use it directly from a sandbox so that I wouldn't have to even "pollute" the GHC/Cabal "global" (user home dir) database on the development machine. I see that there's support for having the config.hs stored in a different directory than ~/.propellor, but I haven't managed to get it working when I use a sandbox in e.g. ~/foo with the config.hs stored in the same directory. Perhaps that's just a bug? If it's supposed to work I can provide detailed error messages, etc. **EDIT:** I'd also like to manage the git repository myself -- is that possible?
diff --git a/doc/forum/Using_propellor_for_continers_only/comment_1_95e8b7103f248d93570fecb6b8999996._comment b/doc/forum/Using_propellor_for_continers_only/comment_1_95e8b7103f248d93570fecb6b8999996._comment
new file mode 100644
index 00000000..dc6cc616
--- /dev/null
+++ b/doc/forum/Using_propellor_for_continers_only/comment_1_95e8b7103f248d93570fecb6b8999996._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-03-29T19:09:37Z"
+ content="""
+Sounds like you may want to write a program that uses propellor as a
+library. `Propellor.Engine.mainProperties` is a reasonable
+entry point, just pass it a Host that has the properties you want
+to run.
+
+For example:
+
+ import Propellor
+ import Propellor.Engine
+ import Propellor.Property.DiskImage
+
+ main :: IO ()
+ main = mainProperties $ host "whatever" $ props
+ & imageBuilt "/some/disk.img" ...
+"""]]
diff --git a/doc/forum/Using_propellor_for_continers_only/comment_2_42b45a126cfdf1dfc370b166c8042690._comment b/doc/forum/Using_propellor_for_continers_only/comment_2_42b45a126cfdf1dfc370b166c8042690._comment
new file mode 100644
index 00000000..45cd3e0c
--- /dev/null
+++ b/doc/forum/Using_propellor_for_continers_only/comment_2_42b45a126cfdf1dfc370b166c8042690._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="bardur.arantsson"
+ avatar="http://cdn.libravatar.org/avatar/a0be0039b44d33262b7ae650a0803ad5"
+ subject="comment 2"
+ date="2017-04-06T02:14:58Z"
+ content="""
+I'll try that this weekend, thanks!
+"""]]
diff --git a/doc/forum/Using_propellor_for_continers_only/comment_3_cd4b9b9e160469e9f0b105f6c40a4ef8._comment b/doc/forum/Using_propellor_for_continers_only/comment_3_cd4b9b9e160469e9f0b105f6c40a4ef8._comment
new file mode 100644
index 00000000..fceeedcf
--- /dev/null
+++ b/doc/forum/Using_propellor_for_continers_only/comment_3_cd4b9b9e160469e9f0b105f6c40a4ef8._comment
@@ -0,0 +1,54 @@
+[[!comment format=mdwn
+ username="bardur.arantsson"
+ avatar="http://cdn.libravatar.org/avatar/a0be0039b44d33262b7ae650a0803ad5"
+ subject="comment 3"
+ date="2017-05-12T06:50:49Z"
+ content="""
+Ok, so I've tried to use this to build a Chroot (a reasonable starting point for building containers), using the following program:
+
+ module Main
+ ( main
+ ) where
+
+ import Propellor
+ import Propellor.Engine
+ import Propellor.Property.DiskImage
+ import qualified Propellor.Property.Apt as Apt
+ import qualified Propellor.Property.User as User
+ import Propellor.Property.Chroot
+
+ main :: IO ()
+ main = mainProperties $ host \"whatever\" $ props
+ & provisioned (mychroot \"out\")
+ where
+ mychroot d = debootstrapped mempty d $ props
+ & osDebian Unstable X86_64
+ & Apt.installed [\"linux-image-amd64\"]
+ & User.hasPassword (User \"root\")
+ & User.accountFor (User \"demo\")
+ & User.hasPassword (User \"demo\")
+
+It seems that \"debootstrap\" finishes:
+
+ I: Configuring apt-transport-https...
+ I: Configuring tasksel...
+ I: Configuring tasksel-data...
+ I: Configuring libc-bin...
+ I: Configuring systemd...
+ I: Configuring ca-certificates...
+ I: Base system installed successfully.
+
+But fails immediately afterwards:
+
+ ldd: /usr/local/propellor/propellor: No such file or directory
+ ** warning: user error (ldd [\"/usr/local/propellor/propellor\"] exited 1)
+ whatever chroot out exists ... failed
+ whatever overall ... failed
+
+(I should probably have used a different hostname than \"whatever\", but... whatever :).)
+
+So it seems that the chroot support still expects propellor to be installed on the host system?
+
+I should mention that I've done an extremely small patch to Propellor locally, just to the ChrootBootstrapper instance for ArchLinux to allow it to call debootstrap on Arch Linux -- it seems to exist as a package these days, not sure if it did when that Propellor code was written. Anyway...
+
+"""]]
diff --git a/doc/forum/Using_propellor_for_continers_only/comment_4_9dc985b26c29b9ce21e6c75ec03f6262._comment b/doc/forum/Using_propellor_for_continers_only/comment_4_9dc985b26c29b9ce21e6c75ec03f6262._comment
new file mode 100644
index 00000000..72d7ca83
--- /dev/null
+++ b/doc/forum/Using_propellor_for_continers_only/comment_4_9dc985b26c29b9ce21e6c75ec03f6262._comment
@@ -0,0 +1,21 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2017-05-13T17:42:41Z"
+ content="""
+The way propellor handles running in a chroot or container is it exports
+its binary and support files into the container. This way the
+haskell code can run in a container, rather than being limited to
+only running shell commands in the container, and without needing ghc in
+the container.
+
+It does use the hardcoded `localdir` for that.
+It would certianly be possible to make it use propellor in a different
+location, perhaps using `getExecutablePath`.
+
+Since the git-annex outside the container passes command-line options to
+the one running inside the container to tell it what to do, using
+`mainProperties` would also not work since that does not look at
+command-line options. It would need to use `defaultMain` or
+`processCmdLine` and dispatch itself, or something..
+"""]]
diff --git a/doc/forum/Work_on_OS_X.mdwn b/doc/forum/Work_on_OS_X.mdwn
new file mode 100644
index 00000000..e3c5fd64
--- /dev/null
+++ b/doc/forum/Work_on_OS_X.mdwn
@@ -0,0 +1,5 @@
+I'm interested in using Propellor on OS X. I understand that it is not supported though.
+
+Is there anyone doing this? If it was developed, would support for OS X be merged upstream?
+
+Thanks!
diff --git a/doc/forum/Work_on_OS_X/comment_1_6d7d5b89f1de9604718f7973e4b3eeb1._comment b/doc/forum/Work_on_OS_X/comment_1_6d7d5b89f1de9604718f7973e4b3eeb1._comment
new file mode 100644
index 00000000..4eac2063
--- /dev/null
+++ b/doc/forum/Work_on_OS_X/comment_1_6d7d5b89f1de9604718f7973e4b3eeb1._comment
@@ -0,0 +1,20 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-04-13T21:36:20Z"
+ content="""
+I got a patch some years back to make propellor compile on OSX.
+I merged it. You might want to get in touch with its author, as
+he may be doing something with propellor on OSX.
+<https://github.com/tittoassini/propellor>
+
+Anyway, I'd probably merge OSX patches, if they were not super
+intrusive. And I don't see why it would be, as propellor already supports
+FreeBSD.
+
+Since `Property` is parameterized by the operating systems it
+supports, it should be easy to start by only porting the core parts
+of propellor, and then port over individual Properties one by one as
+needed. See the commits for the recent FreeBSD port for a nice walkthough
+of the changes you'll want to make.
+"""]]
diff --git a/doc/forum/Work_on_OS_X/comment_2_00b20c240fc13bed6dc54e5b985b41e2._comment b/doc/forum/Work_on_OS_X/comment_2_00b20c240fc13bed6dc54e5b985b41e2._comment
new file mode 100644
index 00000000..aa33c85b
--- /dev/null
+++ b/doc/forum/Work_on_OS_X/comment_2_00b20c240fc13bed6dc54e5b985b41e2._comment
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="joelmccracken"
+ avatar="http://cdn.libravatar.org/avatar/45175015b9eb3dd3f6c740b3fe920fed"
+ subject="comment 2"
+ date="2017-04-17T17:47:30Z"
+ content="""
+Sounds good. I contacted the person you linked to, have not heard back yet.
+
+
+
+The first issue I ran into is that propellor wants to connect to \"root@<hostname>\", and it doesn't look like this is configurable.
+Would you accept a patch to make this configurable?
+
+Additionally, is this the best place to ask questions about what you would/would not accept?
+
+Thank you!!!
+"""]]
diff --git a/doc/forum/Work_on_OS_X/comment_3_294f4783522a8e4887793aac921ee546._comment b/doc/forum/Work_on_OS_X/comment_3_294f4783522a8e4887793aac921ee546._comment
new file mode 100644
index 00000000..ed654d3f
--- /dev/null
+++ b/doc/forum/Work_on_OS_X/comment_3_294f4783522a8e4887793aac921ee546._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2017-04-18T00:08:13Z"
+ content="""
+Yes, this is the place. Or you can email me directly, but I prefer to keep
+discussions public.
+
+`propellor --spin` needs a way to run commands as root on the remote host.
+If ssh as root on OSX is not allowed, it would need a way to get to a user
+who can get root, and it would be very annoying if a password needed to be
+entered since each `propellor --spin` actually makes several ssh connections to
+the remote host. Anything that works within these constraints would be ok.
+"""]]
diff --git a/doc/forum/Work_on_OS_X/comment_4_74b579d4d590432b6bd236ccb929cc11._comment b/doc/forum/Work_on_OS_X/comment_4_74b579d4d590432b6bd236ccb929cc11._comment
new file mode 100644
index 00000000..d386c1b5
--- /dev/null
+++ b/doc/forum/Work_on_OS_X/comment_4_74b579d4d590432b6bd236ccb929cc11._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joelmccracken"
+ avatar="http://cdn.libravatar.org/avatar/45175015b9eb3dd3f6c740b3fe920fed"
+ subject="comment 4"
+ date="2017-04-20T02:23:06Z"
+ content="""
+So, it turns out that yes, root is a thing on os x... but it is complicated. I'm going to put what I learned here because I think it will be useful, at least for telling folks how to use propellor on os x.
+
+1. Enable the root account. Steps are here: https://support.apple.com/en-us/HT204012
+2. password-authentication as root is disabled -- if you try to `ssh root@localhost`, it wont work. you need a key pair.
+3. use su/sudo to install a public key (probably at `.ssh/id_rsa.pub`) to roots authorized_keys. adapted from: https://discussions.apple.com/thread/4078360?start=0&tstart=0
+4. copy the the pub file to authorized keys: `sudo cp /Users/joel/.ssh/id_rsa.pub /var/root/.ssh/authorized_keys`
+5. you should now be able to `ssh root@localhost` without a password.
+
+I'm not super sure that this is even the best way forward, but lets get this working first, then we'll see.
+"""]]
diff --git a/doc/news/version_4.0.1.mdwn b/doc/news/version_4.0.1.mdwn
deleted file mode 100644
index e870a510..00000000
--- a/doc/news/version_4.0.1.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-propellor 4.0.1 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * Fix build with pre-AMP ghc.
- * Tor: Restart daemon after installing private key.
- * Tor.named, Tor.torPrivKey: Include the new ed25519 public/private key
- pair in addition to the old secret\_id\_key."""]] \ No newline at end of file
diff --git a/doc/news/version_4.0.3.mdwn b/doc/news/version_4.0.3.mdwn
new file mode 100644
index 00000000..eb467287
--- /dev/null
+++ b/doc/news/version_4.0.3.mdwn
@@ -0,0 +1,6 @@
+propellor 4.0.3 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * Added Fstab.listed, Fstab.swap, and Mount.swapOn properties.
+ Thanks, Daniel Brooks.
+ * Added Propellor.Property.Bootstrap, which can be used to make
+ disk images contain their own installation of propellor."""]] \ No newline at end of file
diff --git a/doc/todo/initial_spin_compile_failure_recovery.mdwn b/doc/todo/initial_spin_compile_failure_recovery.mdwn
new file mode 100644
index 00000000..423b279c
--- /dev/null
+++ b/doc/todo/initial_spin_compile_failure_recovery.mdwn
@@ -0,0 +1,5 @@
+When initial propellor --spin host fails to compile propellor
+perhaps due to a ghc compatability bug, spinning again doesn't fix the
+problem. IIRC /usr/local/propellor has a git repo set up, but no remote
+set, and so the subsequent spin doesn't update it, since propellor is not
+running there to receive a git push into the repo. --[[Joey]]
diff --git a/doc/todo/property_to_install_propellor.mdwn b/doc/todo/property_to_install_propellor.mdwn
new file mode 100644
index 00000000..184977f5
--- /dev/null
+++ b/doc/todo/property_to_install_propellor.mdwn
@@ -0,0 +1,16 @@
+This seems redundant, since propellor must be running to ensure such a
+Property, but a Property to install propellor is useful when eg, creating a
+disk image that itself will need to run propellor. --[[Joey]]
+
+Should support:
+
+* Cloning the git repo propellor is running in. (Using eg `hostChroot`)
+* Cloning some other git repo.
+* Installing the precompiled propellor binary.
+* Installing the propellor haskell library using cabal/stack/apt.
+
+Much of this is already implemented, in non-Property form, in
+Propellor.Bootstrap, but will need adjustments for this new context.
+--[[Joey]]
+
+> [[done]]
diff --git a/doc/todo/property_to_install_propellor/comment_1_b05e9a44e5c7130d9cc928223cd82d78._comment b/doc/todo/property_to_install_propellor/comment_1_b05e9a44e5c7130d9cc928223cd82d78._comment
new file mode 100644
index 00000000..5a826fea
--- /dev/null
+++ b/doc/todo/property_to_install_propellor/comment_1_b05e9a44e5c7130d9cc928223cd82d78._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2017-04-09T17:42:10Z"
+ content="""
+Making this work when propellor is setting up a chroot is difficult,
+because the localdir is bind mounted into the chroot.
+
+Hmm, `unshare` could be helpful. Run shell commands to clone the localdir
+inside `unshare -m`, prefixed with a `umount localdir`. This way, the bind
+mount is avoided, and it writes "under" it. Limits the commands that can be
+run to set up the localdir to shell commands, but bootstrap already
+operates on terms of shell commands so that seems ok.
+
+`unshare` is linux-specific; comes in util-linux on modern linuxes.
+"""]]
diff --git a/doc/todo/property_to_install_propellor/comment_2_9fea601af57777e1cb49952483f4da63._comment b/doc/todo/property_to_install_propellor/comment_2_9fea601af57777e1cb49952483f4da63._comment
new file mode 100644
index 00000000..f862f79b
--- /dev/null
+++ b/doc/todo/property_to_install_propellor/comment_2_9fea601af57777e1cb49952483f4da63._comment
@@ -0,0 +1,7 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 2"""
+ date="2017-04-09T20:49:04Z"
+ content="""
+Well, seems that `unshare` does not work in a chroot. Hmm.
+"""]]
diff --git a/doc/todo/spin_failure_HEAD.mdwn b/doc/todo/spin_failure_HEAD.mdwn
new file mode 100644
index 00000000..c131591b
--- /dev/null
+++ b/doc/todo/spin_failure_HEAD.mdwn
@@ -0,0 +1,10 @@
+Seen recently on 2 hosts:
+
+ Sending privdata (73139 bytes) to kite.kitenet.net ... done
+ fatal: Couldn't find remote ref HEAD
+ propellor: <stdout>: hPutStr: illegal operation (handle is closed)
+ fatal: The remote end hung up unexpectedly
+ Sending git update to kite.kitenet.net ... failed
+
+Despite the error, HEAD seems to be updated to the commit that is being spun,
+but the rest of the propellor runs doesn't happen. --[[Joey]]
diff --git a/joeyconfig.hs b/joeyconfig.hs
index 6563dd6f..c1af0a0b 100644
--- a/joeyconfig.hs
+++ b/joeyconfig.hs
@@ -38,6 +38,7 @@ import qualified Propellor.Property.SiteSpecific.GitAnnexBuilder as GitAnnexBuil
import qualified Propellor.Property.SiteSpecific.Branchable as Branchable
import qualified Propellor.Property.SiteSpecific.JoeySites as JoeySites
import Propellor.Property.DiskImage
+import Propellor.Property.Bootstrap
main :: IO () -- _ ______`| ,-.__
main = defaultMain hosts -- / \___-=O`/|O`/__| (____.'
@@ -50,13 +51,13 @@ hosts = -- (o) `
, dragon
, clam
, mayfly
- , oyster
, orca
, baleen
, honeybee
, kite
, elephant
, beaver
+ , mouse
, pell
, keysafe
] ++ monsters
@@ -82,6 +83,7 @@ testvm = host "testvm.kitenet.net" $ props
darkstar :: Host
darkstar = host "darkstar.kitenet.net" $ props
+ & osDebian Unstable X86_64
& ipv6 "2001:4830:1600:187::2"
& Aiccu.hasConfig "T18376" "JHZ2-SIXXS"
@@ -92,7 +94,7 @@ darkstar = host "darkstar.kitenet.net" $ props
[ (SshRsa, "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1YoyHxZwG5Eg0yiMTJLSWJ/+dMM6zZkZiR4JJ0iUfP+tT2bm/lxYompbSqBeiCq+PYcSC67mALxp1vfmdOV//LWlbXfotpxtyxbdTcQbHhdz4num9rJQz1tjsOsxTEheX5jKirFNC5OiKhqwIuNydKWDS9qHGqsKcZQ8p+n1g9Lr3nJVGY7eRRXzw/HopTpwmGmAmb9IXY6DC2k91KReRZAlOrk0287LaK3eCe1z0bu7LYzqqS+w99iXZ/Qs0m9OqAPnHZjWQQ0fN4xn5JQpZSJ7sqO38TBAimM+IHPmy2FTNVVn9zGM+vN1O2xr3l796QmaUG1+XLL0shfR/OZbb joey@darkstar")
]
- ! imageBuilt "/tmp/img" c MSDOS (grubBooted PC)
+ & imageBuilt "/srv/propellor-disk.img" c MSDOS (grubBooted PC)
[ partition EXT2 `mountedAt` "/boot"
`setFlag` BootFlag
, partition EXT4 `mountedAt` "/"
@@ -105,6 +107,7 @@ darkstar = host "darkstar.kitenet.net" $ props
& Hostname.setTo "demo"
& Apt.installed ["linux-image-amd64"]
& User "root" `User.hasInsecurePassword` "root"
+ & bootstrappedFrom GitRepoOutsideChroot
gnu :: Host
gnu = host "gnu.kitenet.net" $ props
@@ -118,7 +121,7 @@ clam :: Host
clam = host "clam.kitenet.net" $ props
& standardSystem Unstable X86_64
["Unreliable server. Anything here may be lost at any time!" ]
- & ipv4 "167.88.41.194"
+ & ipv4 "64.137.231.62"
& CloudAtCost.decruft
& Ssh.hostKeys hostContext
@@ -157,31 +160,6 @@ mayfly = host "mayfly.kitenet.net" $ props
& Tor.named "kite3"
& Tor.bandwidthRate (Tor.PerMonth "400 GB")
-oyster :: Host
-oyster = host "oyster.kitenet.net" $ props
- & standardSystem Unstable X86_64
- [ "Unreliable server. Anything here may be lost at any time!" ]
- & ipv4 "64.137.179.21"
-
- & CloudAtCost.decruft
- & Ssh.hostKeys hostContext
- [ (SshEcdsa, "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBP0ws/IxQegVU0RhqnIm5A/vRSPTO70wD4o2Bd1jL970dTetNyXzvWGe1spEbLjIYSLIO7WvOBSE5RhplBKFMUU=")
- ]
- & Apt.unattendedUpgrades
- & Network.ipv6to4
- & Systemd.persistentJournal
- & Journald.systemMaxUse "500MiB"
- & Apt.serviceInstalledRunning "swapspace"
-
- & Tor.isRelay
- & Tor.named "kite4"
- & Tor.bandwidthRate (Tor.PerMonth "400 GB")
-
- -- Nothing is using http port 80, so listen on
- -- that port for ssh, for traveling on bad networks that
- -- block 22.
- & Ssh.listenPort (Port 80)
-
baleen :: Host
baleen = host "baleen.kitenet.net" $ props
& standardSystem Unstable X86_64 [ "New git-annex build box." ]
@@ -356,7 +334,9 @@ kite = host "kite.kitenet.net" $ props
& JoeySites.oldUseNetServer hosts
& alias "ns4.kitenet.net"
- & myDnsPrimary True "kitenet.net" []
+ & myDnsPrimary True "kitenet.net"
+ [ (RelDomain "mouse-onion", CNAME $ AbsDomain "htieo6yu2qtcn2j3.onion")
+ ]
& myDnsPrimary True "joeyh.name" []
& myDnsPrimary True "ikiwiki.info" []
& myDnsPrimary True "olduse.net"
@@ -366,6 +346,10 @@ kite = host "kite.kitenet.net" $ props
& branchableSecondary
& Dns.secondaryFor ["animx"] hosts "animx.eu.org"
+ & alias "debug-me.joeyh.name"
+ -- debug-me installed manually until package is available
+ & Systemd.enabled "debug-me"
+
-- testing
& Apache.httpsVirtualHost "letsencrypt.joeyh.name" "/var/www/html"
(LetsEncrypt.AgreeTOS (Just "id@joeyh.name"))
@@ -450,6 +434,13 @@ beaver = host "beaver.kitenet.net" $ props
& Cron.niceJob "system disk backed up" Cron.Weekly (User "root") "/"
"rsync -a -x / /home/joey/lib/backup/beaver.kitenet.net/"
+mouse :: Host
+mouse = host "mouse.kitenet.net" $ props
+ & ipv4 "67.223.19.96"
+ & Apt.installed ["ssh"]
+ & Tor.installed
+ & Tor.hiddenServiceAvailable "ssh" (Port 22)
+
-- Branchable is not completely deployed with propellor yet.
pell :: Host
pell = host "pell.branchable.com" $ props
@@ -650,12 +641,9 @@ monsters = -- but do want to track their public keys etc.
& Ssh.hostPubKey SshEcdsa "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFSMqzJeV9rUzU4kWitGjeR4PWSa29SPqJ1fVkhtj3Hw9xjLVXVYrU9QlYWrOLXBpQ6KWjbjTDTdDkoohFzgbEY="
, host "ns6.gandi.net" $ props
& ipv4 "217.70.177.40"
- , host "mouse.kitenet.net" $ props
- & ipv6 "2001:4830:1600:492::2"
- & ipv4 "67.223.19.96"
, host "animx" $ props
- & ipv4 "76.7.162.101"
& ipv4 "76.7.162.186"
+ & ipv4 "76.7.162.187"
]
diff --git a/privdata/.joeyconfig/keyring.gpg b/privdata/.joeyconfig/keyring.gpg
index 01dd24e7..d5a1c070 100644
--- a/privdata/.joeyconfig/keyring.gpg
+++ b/privdata/.joeyconfig/keyring.gpg
Binary files differ
diff --git a/privdata/.joeyconfig/privdata.gpg b/privdata/.joeyconfig/privdata.gpg
index e1d68081..9c6150d9 100644
--- a/privdata/.joeyconfig/privdata.gpg
+++ b/privdata/.joeyconfig/privdata.gpg
@@ -1,1436 +1,1436 @@
-----BEGIN PGP MESSAGE-----
-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
-LpzHUjRGyqQ7is/IDlvEKkJrfbzVguoJMqk9rT8y+Ptn0Z3+YKjVwo0bGrmSjFua
-JwhoLNw+ZHD97vhx6NkUFCoJq7/Oxg7Ky8igdNWJM1BSiV4EvwyzQic0IlgIs4YZ
-8njVa5mfs2zYsa2Kn5/urFgJ506tA25TGMlkd/pPaJo3oQ7DZhIM1fZKNS4PonY9
-lHfGFM63ourqMnxDZKs+vaj+mNnbY0OR5rSL43JqoqfYxBJaVcKlMTXHUeUvTMnY
-zWJlHikZUsWDogcFHcoZ8yo1RpLQmjIbz8IcKfZJAhTRme/5EJbI/hy8NR4hqSrS
-KDrH7y/ZV869Ex2XasOr7+V9NL8e5RZlMbL7kyuxy8c86VtQuPLjahCLf9Incles
-4UeGHLDTAQXyK7XzwA0zrKZr4gCIBOpNBaO+DNbp1JAIQ3qq3btcAInlKyiJrmvj
-kwq+a/N8XwWcUZ84UGegOGxSSVLTIofvWYSf06iPEvTwz2XBUJ46weKfWjBjzO6h
-Y4I1IzGbSIneStjIMzSixtRiDVY/tE5Eu+in7gWgYP+22LmzPM4RESrddBTeXvae
-vtaZ3TIRy4YNarLNCfyu7FtMQKmUUgXcuGLhFrQnnri3qrrWAz39UhRVmV3LjO8h
-SWeyAo3a864+/d8Skj/mDsBmdTPEMcZdmsjD4IN4+9i/9FvwKwpF8oOZLJ7eNOuf
-MUF2vp468cXbf2KWu0+XLU55yG49mX9C2+KWo2pxpyH7o7gw4DqYXnLu0mbbhU64
-VShGky7DAUgOf1ovVMvRaHCIpC43oPtEX8nf7Xd0i+q9kVBrcvlgHJofBW2VFd6+
-kxXsUNLIJpsipQ1iQWGwmNh99qXPfpldK3sHVQrOgS11y7O7KrVja/z1OOyCAI/V
-c3VdaXGnkt6NvBxiUjB8s2SQL7Y0/Un3+jYJ8ALCMZOgfmMiX8ce47+SYGCKYNIy
-RVilruXylm4E3aSdgB6+O5dbXofPZSCfjQqt4o4T73n6vGnGzTBXYOL3lPTjg4JU
-jFBrXw1nxglYrSdyYCwI3bwYiw2s/XENQsPfTVmFRFsb4ZcL1vhn20CKZwi/90WA
-tdNUCeh6ZZzyk8v99k0zOJnnXOeWqoMfu8a36SWz7/Gsj6/OXvdtrZSOmeUoz7rT
-iy0lUK+oaLGp8qHBLaUxwiNbsImyhD4Gpiu7S3kj2Lan3Qrr+/8ydHE/zjPzyTSx
-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
-3+TJ7B0=
-=9WOK
+hQIMA7ODiaEXBlRZAQ//V4BHd0OOVjINRDVR4jWBk4pn4A4FIsHXpgYnTnibIIBC
+pGL6Pu7JAB73wkpWCosRuPPLApBDzIP/2Koo7BuIlONXiZ7Vj32b/BtU0ezFdrv8
+P7ko9cYiwfOPK6eYb0Drj8lkVVew0tuhc1uqOqj0aXf/R3I2YfwEJvWvqMEM25l6
+8cMcO9vr5DgYoXB+ULYW9imsV7GpAk5jy8brKQVgkgut/caYcQPo8fFCvIaAOrHk
+itzaw85VS9/S38Y36C8VInI0ps+p/EjcEWD7CRKFxck3sIx6lZOETwc4PHA4FbeT
+MCYM4EYD8MyKF3BdPSqIuY12hS2N9E9HT6ki5xiEmFtQc3JLA5WJjAslXvIxtjXW
+0Ox/t7B3lQCeTXZCfVt9kUJhBGL3ZKX1WfVUbiF1PDOqo8z5E/iSWi0TFoCo6sRx
+JRwbS9i/HomyROwmChDufm6mPFf5u804Aqw6ooTnK+V7YlmqvmqAihloaCCXbM1e
+96mU7cPwx5N23SSJKQs0ZFPCXDU01lCaf2NrexpNsUt+Y5fIT4IIWlqAe3bgJhBQ
+Hb4xwCbf17G6SzfbMinVOft6WPTrYIIZTgD/ygAXYifgVO2j5PgKqAGhOT+bAUSh
+RCiBrW5fa/46iKpFSK+u+HIFgc/uaWkhQ4rPI5TksawjxFIVWlEsdT9d+IVNZ+vS
+7QF0N53usandBRExOisfeyi26viMh1/dYL5dvqjYp62dXfvAkHSvBu9L2+GnaXGN
+GLdkX3JRHNvG9mkX9jSbPl8CZpv2RMbAA87CafDVqIAFwUdYW2fVpbKEExGWa6IX
+g8AqMUNPyznAlV/mXCBvdr4Xdmdx5bi0brj9w97QbENGK7TN3ux8nmtIh/uuJw2w
+RUHH3ZnRUY7gbU1zF0uZg/U/T/VHOsl4aqzOGdlufDgmaQAOV06ti6F+j+cYpnxb
+fhZ0SM3+tlGNDHD+VmzGcpvh8dP4wFTn0BArhil2TKnz+Jx60U6vNiToq5jphMok
+4YItbfn1zJE+X4EmEwKQoKlgXMIrOZmEtlcnHg2wkcEOR5rfoFEyCtyVeGPew6a3
+zZSL5TDAm1WvqD90T+Od2nZ8h/j0/EzgJBhgaYPFsqb1VGLcTj0kAgq3Ix74ycWE
+YOcE8/UXC/YvDRNGEQeAtfLiMYsjUnMIfJJagqDxsCDbLbli5CwkyMmSpxnzaqpz
+jngFBOvF3NqckfAufq0WB6e8+uSfRAynYVN3+iwYwFPdWRrL1D/a6v3XWecQowgO
+JcpGpV3wl0WaDqMtmq4TsY/GtZ9hhTjE0WnoXSRFezcv4vfK5I/HlRjHe44LS181
+uas0PpMPLLDBIR56GOn8cshWJ6JPM/afk8p9tUCZV4dTT6kXolHOZeRj95PWRHly
++DCeZ/OknxZ2x1Xj29st11PZlcIv3FQmEHk2FbMBlrkmEVilACQlecJaPFEUSWV3
+PUMQkndj8eAxSOBhp4neOnOPQ706eExHHakEikPwNDG7h9A4fIMQ0lCf8DLxac9K
+bFZD9sLEf+aliLRJO1W0Vppk3/p5TL2gBZJdSc2x4Zm4j6d31vVk0taK5glkXkCY
+7nvieVFTby+JVmTg3eVzGAx/mM26dYbZ4TuE8oRJfSP40yPJhEiGFA4eRtNvt3eU
+3IAjIWzEormewq+N0IAAY7F986qC1vyLJHdP7oy9LDl9jXXt0l/9JZTNKl/eFg1j
+PSOdQg2StmfDTmzXaJB9lJdlRMHcPLfM7/J5m6gQvllzsfwpW03t0fb0iyIFk07A
+gy9AgxRWPnAqM3oguBDji3OguksKDzxbyIptqPHorwNp+QaaYgueOLhmzyka5AA0
+yJYWuZjKCAvE6KSCCCIVsd1YsVEBuGgPxoTmMbL5d2xnPt/aYmXplkseNBNjtaG4
+HFGB/NbeMXt3t2ws8uZdvMhQsYPcstJM+jnLdNy6XyXnhHzLMWnU+7OH1cH1b5JL
+Ly1RdsL9dpXJ+8YJyHPbDDuEDpcfZtzM5u7OUg/HjmLRjkAmZac3+MXE/Cg6lPex
+hw/ZnfhivQvHvMWYWP2AaUGEBDiOxXNYvd6RFG4d7hp6jYUBQj9Xd9Cj6+XNFQs0
+kV2XksFxoTK4/SHqVffXEoUI+bXzKy6whbgVCOu3u3O3j0/mBo5OwF64j+CmemcE
+1tSj5/H+pRtRvXOhwFIdqKZpKlenXkBBQLbcZr0V2V6eFyW6wjDqIFtnSI3qSP8G
+2f0xbCy0sD+J/4r37j7B86xQOUzBKZfAOQXwJ1BpOwLh2tc0vsWSTwkvF9enbNld
+/GB25YXPvAJanFrmZgL+Jhi1mXaHw+7IOtjAsFrFzneC78/SYaNqS55AbOWselnd
+d7kGBWHH7SX2g/DtkVkbHAbn7EC3bXNyt1S0Qq+fgQ+qvpBnVVVy4nntbuJ4wdLz
+O9zoduvRIyJ4jYp3ai6hi7itY2u40MXHLSO1f3YgNWGLh9UhlOA6QKc4MIet4DuV
+FyfvmCcO6TMb9n9bsWW03vyE/jeo3QZ2WWyqBWACuhMN9WucczxPGPeiyOV5gi0h
+d2SuHzkZxOgD3H7+p0CpNtK7dO9rd/yE6oHkGxSInEMwwe1t6Zk5MBlKvMdt8Ht6
+7uR/x6bsAhMri1c7poXxpZVMPFgs6nGQqRqJd3zKTDjSmDqrzh1sceUB2EGz/sEF
++G7FCRGvjrHA8YQqKJxyf+ONP1nJlgR/EIEyK4EBpblqvHLj9XdOsoWTFhHbO81K
+yAvmQmvw6Bh3j8LmLCkNP6zP6DuQ/yYUJ1Ab5zC1KBeLFqZF0tPcjNA+Dves4UBs
+IKqg9AblU30QWghCA+Fa/Qdsa2p1aHyTzUuAQ71tmKECLxpXCbjaeJc/jqLC1nZg
+CPNV5Q3gX2Sq3n/8XQosrFeqmiTGUH8+gcSoNxp5WulENzRH0108OiE3iQr8VuvJ
+rUNU+cSfHZ5lskC87QPWh/XbAtSv84mBSuWuAreYsgeq8X3ktzWZGWZT6rF8We9B
+FPkFcq0lDnLMh6r4rNSsz7fyFCi4xKkAsNtwOWVcOqcDhsOTPYELKtQPqkTD2UJr
+BW3WfFrrJH5OLmsVch9uhH1DEMzXqpNmHK8chH15fg46gsjnwmv91FdwW9EhuP7B
+Ioc2NEIUfISduDbCt9hZQA1Ejdj5os0m/HEEFFjTTjd6Yov7Zc3gHzXKMh0czvgf
+tRRCCYDdzrWJwJYxO4CSOvpRWKUKjdx2plXYoxMlDdMm0VQq4UHVuSAWM7jKKta2
+7mQoFaDz5NkcGACItI8mRsWpT6liEAYIHtPKQdtsfL00vnUtSKjiUqCcI5pawOff
+bTcUPtIf5/Yq4RQsqZA7R65grO73pwSPAw5mFB38WKZGSW/KcfMumA0tYokLWdHb
+CXVdzv5hER9KnNf33ZF259QZxCnwOcAyLWrdCvDceyXVUDhlzDkVOk32arXvUIz6
+x9ERgNoK7SIQ3aU9Bxut0qC65XKDe61KwwIcNGAPeDm5ZwULnAHH3wokr3P0spo4
+nIiWscQiCr/OvexDLNCU8XisoUK4YNxpSq7vDHw7X/HNPaf/1KCgMISjtOe5ei/a
+5wt3WBRPAX8GD/hcOwxONjUT/mGOThYM9xpPJb3mf45+SrgKhI/aOF1/9Z0BCoOs
+J+fQptmS2gZoLKXdwK6zpDfyVXDmrjNxhBJviyWO11wQqNSxh6pUR+LQjS5pdMls
+maxPRI0jl4Ls/YNj4LX2y18O1aYPPyNtuo5IjchVlK9viPT7Pq268PqHiLvMk9sM
+HANBSObIiXuPg6ciMc/em8erEolgbI69q7iTxtpZ1TT3A/TdnwR0Xym5VdhlBMkU
+Fv0/rb0Sw0TdhDCsL0S6cwsyK+ne68uBwcn4aeK/2IdormnaIuLF4x4useWlsygU
+G1SLzddpH+jxNhv/OXJ55QRmeJOrO6zH6lErdU0feJQN5hAfX/9KHLOhij+WYv3m
+1hhUZdYwswN2st1bFcOLt8ncFkbPypFWCH093JGkx4MtnZtgbGzRd7Km2XfdSdAj
+BAVYiJ0OfXAbGvrlJ/ceYeN/lXCbeAMLt5ao5QMvuDf6j/wxHzgg4lRvpQYEI+TZ
+k3FJFCXQkERScP6nTN3gwosFVpH98fFPjndwgx6JUdPeJ3MdKjokei4gi5bnNBGJ
+xGe500U+CADNjx67kI/IAblrDgJkk4LeLJtvOeVtP4qFWtEt9YiAPj2ZIhgu5EoC
+NxCTSluXIufBaw+LjbHY+1CMrZiPnSq2ITggSeWYQLKI6ES+i+MVoi4Ip8WLNe4U
+QOMfmZPaPP9xL3uQnx1Rnc5lxuhXMiOkf6LgQ0Py6hnC0os5QXDzcea72nZYfg0Y
+JamrVwGHUE+1XeFsHIj86cwXUU1RHxg2OVtA56jjVPeSy4mTg/2jJ/d7qsdWkGeq
+/l07/8bzHyhT8btI1ANZil35XtwUN4k7oZEskAT0eAk5WltfMvfqSkCscKxGrvyZ
+Y9JZm/7Vahb2r7G04HWjbDtF3VRztmNSCji28eGP7cyhmeb5QaqA/eSIj60prxfn
+TaW0X642pvTEq7tB1VZK6gnuTRrhgjuLH08ZGLwM5LFbD55h6gGttvJgoVIaaIOz
+luLt3mrHfNnZa44BAjlE5F1hHidyRM7yEMUQ59eE4KOLM5nY5zWUCQVpD1eJ9xz+
+KqwgAt64UI/XGaATIueA7iuPAx4xMpHOZfkbRUbVJeaHmVdtg059HcIQ0zmK8U0M
+20+DBFWle2ysIvxbVuB196MjVn4AS13zqD/ztDy3nGe/JFgEZlkLg6K7bca2UlUh
+xaBF0svoKP+fU1h2uIcMrA5EfnhzASftXo+sgpLTdcJ6OxppgDv6pYiIsjSJYy1v
+AWTyUn3MitioEW3fzggBA8baJRPMcGcHgzc55DiUoy40ImLpdidKG3PYwhkysMiB
+35zZF9Vx1amt2+bymVITUfXu9SGTURSMJN/GqGDzNfG+GbvmgUmWUFDZYBDx3DuG
+5iLTdJO5pYQy6CX4whAgukdzci8yAes8bbsbDO1ncz2G4zrVsTs/5JAXh8YXMp00
+mjD0xsYboj9LiTe58e2HME4Lfq7Sv4O3SBmGLhrlRxCfQpWJgpjNOERoolNXnOs4
+3garorjaoC72iqK1AtFx3AyzLWeownYdualzNnftuFfPAaNMFFK+odIig94fS5SZ
+mO9HW0+dN84+oO0U2Wh8zvXqIl8nxFvpB0RKEoDUt9OvrhzNlJ6Y0MAI10fRysJW
+hWtWmLiF8d5TS9gjdV2Sje0UMIPNuPhAAIJEGK/Zek/bFfj3K3MryXyyabkrjEQx
+PqR86XTIv8UM4PdY6ec1kRTiIT5eimqCX3S0ckNXh4eSCjDo2P4LDDNDly2Tqmvs
+hbw/pQqL8QwAKRtJN99CopoQb/e/4EsK2UnT2x9NCA8khBhtz70eDq2E0QmxEv+9
+6k5luA81V83SS03C6lOK/jwvW7E38h+ASyiKwxxdiIHEObmz7vva+JgLi5QUpTUN
+Agwn0E6cmB2QPiOgqOexY30st6KS4plnAgFAekTDvdusCW8Q8PREHIKB/l8xhVxA
+QS+3zIK82sBlOYpagDgBXh/fgUECACQ60uFmVX2pwG2ZkXUM0l8bAWRK/qsxY+ne
+kWzuljyZrF9TljW79k8At9jYx5AbkC3Z9AgagTX8ymRcqsmGGxia+W6iG/KdmRdR
+DUBLPOOEobc01f/hpLcY/hVtcgbU69mCm5Gu6J4+uMIvIse8L+Fi8fmRSR9k6+tH
+jll0Pi6YdR6JyoJZeZbZKdj4ZRHlteX4ZOu81OaC+R2QIN7mwCcpfHYVAHTkMkQk
+3sjjtVqRTOsWXuRvf1XyevGsYgIG/OC8NBIgToVfs0+yPcU5XFNZiGvDgcsCqXla
+fMPENjkYZAuhuPurNzacPlO9X7rJ/zUn2CAHUXclgkn/qNDwwJr9fiT5mnsNs1Z+
+JbekLyJtMM5isTzGX8OH6FsbBO4jQmWYgXSlidgfXY9wKfmZORHbsJ/ZFReJspjc
+XsEd34tvuE/uDOzmL0VfEYRaRfZRBJllwtGIUjV4KxPuoRsLBV3YXfoJJ8V0bDUQ
+m2v7MArFFlaqruqfPBT4T3qc0QnlkgAdOrDs/A87kIkxO8UlvqQLXkxNF+1/vtdy
+4REXsNBt2fx9dfwZF5tSVqOdmgfB/k6vgiGuc3iIat3KaG3jYwaWIizyVxPfz/O8
+BJVIA+z7kRYY+0+AsdSy6jQXEin/odtRho1QS/tiBxmTf8m0udps+SqUEhqdJTtm
+W6LRx24vpcMdDh9PBncBWhj8Ljcpe+P3jvvtvf412T2R6BibhQsAo9Xxb6f9sTu+
+Oi13Onf7kktfvFUjU5kfVJnOO5hIb8+8bG9yCvkdHB6IR9QVwBjbqj194bLFccVg
+UxNkIp/hhprSZAfdRVJ7iG4arCcm0dQNg/GiKX5mf3pYBw6XRncpvGnYMZmTehZj
+IRqmRUwfHdCMWSLS5Czju+mGQW+k5tKzrba1AY26rxw53DjHYkV1iEjkSwmovUyP
+jWf/aYY7q81ftlVmPRNFi/nOidGEz1mNEaSb7zIwMLXg1PHmEo78cS+Yq238ya1x
+xwxs3qpV8VaYA1ZYdoZ8O9et/7rlvuQ2RuCsV77x6Qjf8QDSydqZChqa7Lk8zBLg
+fkg7IU7xU3TYW2zIKHtu+DKZmyuGq253bbaEqS7a0VmOEMu9CxnrEVT+2+HrDNEg
+bn+orKMxtKVwfAPN4Em7LkAQjCPDag1U5lmKvxMvarEI1aniaIE1wjZTamN3Relf
+ZI3VSrkIhhXoEVNUkJ+O4tRR0Vi+oEsFrEh8NSDCEdouVWw3z/BWfiellHq5Mcoy
+mWBA7CAlO5hAMPLXSms4dhbe41njTYeeyl80ULqplFFdnEFKa6mLpsP1aVP4NZyT
+fjGENxviU3f+yuOvEvF//1XbnaLfZXPvgvj6v5aYqCiEbQqdq9r8C6zQgyiFdMkl
+WuSsf+fJsEN4xUD2MRnOGAzPm2S191Z6eYh3wi7v498jGQdjUwYYel4fvsJB+rG4
+vWGVySAApqUjPJNylMm382cDSpKAOXFJJVnMXPsihXcSDFMh0VkGmrauTPDggQTB
+41AX/UP5h0ZKs0keJ0NREp0dQHoFq3CZJr6VnD1X4RKLvlE1nO0ANwXpOpYsj9GM
+m0NQMJENGYzS6ZBzS5L6lkcGPZNrsD3Yc5G+/QOY+Ic5+hS2sy/H2CS8VHpeYvA8
+qJC21ZVScFrjdNcOaISRCniogZaOXT+J8YllZ16ZZH8yCo7gE1GPq97ZQDHvnrVn
+o5hYoMdfuWdKpMzZb3ec4u60/JwB244lWyQ0xQdTcUqrw522XmxF9kIX4nnKFur7
+DkV0lTsiwcaIosGqFzUAWkzxk5fhFk6NQNX8vgNC/LjeSDXqByEMCH7R0y1n86OR
+vWP6cEokUec8DQ0Ma/F9CQpD9m9sejW6wWlZp/iim7EVnGk4e8eYJQFYCefLprL8
+L0BOYSFsxnEGzP59ZO65rPzN/F/9tTs3yoHU0P35eWnxg65WuzLqMacGSrIOZX43
+QJK58IMJxy65sRmYoQ9umPmBiR5eurPaOqYUmg6236FNvnEYzl8W+DNuWcKuVwpZ
+eRD72Vj++GE3KEut44nYxS4F8vBXfYVsXeBpE8VnpLVOhk7aGb1B8zgmgE0/fjqX
+OB7SXB4nmsrFTO310QbeVh1TjicBOvXKBLkzZEoXFpWoFTxaTyIOe2GsQHRgB4Yv
+Le1Y8951a7f1PJeTBGtakyjNLsR2+9ZRTTl6/QQUDMhTnAHE41q5BUPredY4uxSA
+VKmB2pn6CkhUv/SgNuZ5nd9tS7Wm4kc0YLiiWRnockR2wB4Y8YSOVeSi6JY3xpwj
+49XkH3XCslUF3FswgmMjtfT8VSCclrCs9SEKUGS2Pm825oY+xiOBqBet+pkQyrAg
+VhlbnIuoBwqzzx0U4fMD0wYNFdJyQBfYNC6an3jlU1qJ0mQ34WTJ7HY3SLeF7r0q
+z67czWGHV6Uz2IeJ+8v+FgY+94Nu+UFo3J2f+U16ZdW3nQ83KE3IkljD+GZFerBi
+xvEqrclFLzMvrDd0pfFMq9skyWWs1CbCNelDu6mGI9SWqxJqF2H5AaDBfq/pxgxi
+ccY7731qQbTjXTd0ivQqN/DIXRKFrxMfYKFvXQhUYIs7L5EWFX7w73tsOHfYL3L/
+UGxLep3Nuq6CDTjGvet8seXTI7BQvntp3R4Q9Ip3NvfSBb3xehmX1js3DtM7dQXD
+Ogw8083B3QlOtUgXUINOTo0hUHgq77dUcXpEuDUA7+mcOuU1XmA+x2wmSLVQFFog
+YNAMEGYEMWeUU3Tbe0wfwiLtN0048xXN3o07qun/afCza2Z+QkCh4qstew3bsZHA
+mfe2AFkl6vfRv727BPA8r3orvOnwp90XEbLelg735tQt4JnfoNh2M2UhaX2HJaOo
+rUP7YSgRv/siVS4PzNL5H3ph6yannZ5PPVd+rqTfweMqTwPvzSl/NdbelH73Cw/Q
+CzhCIVhXKr4ETaIEGUfpzkQoIct2I57MJN8i2FW5d8oorohVjh/jD1d+lda8VgrS
+BsMosLfZUBsk+jCbCFGQTcGCcJctxBKJjleQWr/INbtv+GeXtRT1Ag51ahpjG95U
+zRi4fnNc16md6vbgSlKTrKCUStiCEUJj7UQRkutnzR6o3lbEwUx1dY6i8Kw4lhq3
+KRNZaU0tPSLc06voJSB+YPhLeRiegv0V1i/UlzPVmJdHZwMpLCg7pd5yiaLjeadZ
+IayJfxYdUIqjH0mbBEetNO5f5hzUSNRN+BmYrMKVH6veysYlf0cHSptHkpadiVtU
+OVEQ78+SVr8rbzhJU1RBN/tt4MOoj6xCW/ATH/LZSYpi1nfb0Lvy2VG4vTyQisqF
+6QwBWznQTe2gWbecTZpSzvN/J/0/FMs285aUU82hAcGHqtWRHR75YjcYD48GFoeI
+KagxD30REmKujwljQyv/mwGCdZSZlEtooKZ/ATP0t4Vv5S4Hzlb6u3tkm3QzY8fB
+FE1BB800Nl4plgVMjciJGhlHqZymSev1K4B1ILPkcXRUpmM06QY3s+B/UbQl2ZoX
+hsb1HrYw8NWHnIseSZa2mqBsgu59ekAINY7lha/7kteWNzf19G+aiREsi4QoEHDW
+W1pSrj33xj3Ezr22PNNLeDB+UQh2htXgLvdaLor+1Ne7i4nHAnlyh9YwsfeS4Jaq
+mZrkmNyXUGl9z0/rvikNZeb2i6E3DmcUd0wItTPDB07XkrxNpxtS+a83JiDqYRnx
+UcHpJzucI6jhUthOAHW/0mlKCvXySLzJm7a9+ZEJIm8KDiB4IJWdlkWkflzP3H6y
+TuNW1PtdZ+0EiI+0DlkJ8AMKvfUfC8Ad8Qz2ZonruENLj5Jqntsm20/NjXz+9Qlw
+wfF0Akwvaj2CnLods5JfUcSdLcrCBVVpxkhRbOZjykM3hvDSs7G3LUdCjEvSaiL9
+43Us9VgNeFmqTrucbc4r/rBUfsgeQoi4Ji6nf48DbdGU/Tog6Z8VwOuKKgVrFcpm
+CpM43OsEy9cGQ7aaDnJ9b1eK7Jm4OvwrF2WNKnfP0elbblxa4A3xHnjQ8iubITyn
+mUrvlqRzp27Q7g5IHbUAU2H47aIAhxiKXzXv9gWSh7FF7vd2BxI4qpP6ykN4kVnl
+cEvraQ0wwkFcl1X93fw1h8z6hAivNhvnzM5GsIcJi3xHVwKY3XTPaEOtrMyNUxBN
+kwKjbPsJ9kM3Wp9R2CI1f7OfYybmLAdcrE2+EebwmBiidCORkp1BC+DEKw3IScrL
+zED779xRt6eF49yot63Oc9mgb9tdggCn1K8In+BkLQOi2+u9PyJrlu6ZbDFWL+AR
+iiFFyNWfFtEN4SMIcCwX5c24oNXPZR0ywJjQHpyQepSqXPQvrkxkS5bCswpoH7v5
+b3wod35QDnusBZv/ZjTaKc1rUtjpqUTfYtkRJsCML9w668iAdDOapJxLEsyxYqkE
+ytLkHJzJd2W9p3bUxDEPPlnLxA3nQxc2OFptE9DLWo1VlZqlwn7B4zNXFNTh6M34
+Xj21OCYo1pgwrI7S6Q6hjPQAv1obcGiN1SQjY7qdd6xDQ64+QFFNIBlpfGm0KVgf
+qKkEvVh7Rs3CHr/JY9ZOcrKIYSDKbFqS7GSbv77TPhYxLD0l1NVZcmUlXTYVnGW8
+qpoX8YzzCh2O/40VS8BPGfP5ED5AGR0Y2sEei4nlndRsYsd+MRhHHMCc5EoWYuLJ
++PZ2wCYw4ll+VyOAd/aby2kbCi3Fv1mNX4z0uyif96he+qIz4QpEpGXaZExw9LOr
+s1nM2oTtmsAVNNlC6XsWIDckTB5MLovd48NHwzrOD0O5VsbMf0Yl70ZC6HcQyWJE
+86df6q4e+tGA8xpEDenuUDx5bOjOIyHsKKRw55qY4fhCMwKZJpuW0XjUPdEf36iQ
+aiY2BYx5M+xTpywWmawFhNsEWHKkaVPX6YAnFIagY8/oOGrIDv5DLWtSpvU6rGsR
+1MKFUlR9PhrgAO/pXq5MRwCWr43TqoNKserOyKPjtudtqOj9uNP/5p36y89vXhAe
+8W1Dc1KchmYhUM4rM6znFsUFlcPyII5A51UHzgCa+Z7YqLjap330NVS+BwOgqI0G
+mYBBab7wTaPqw9gSWPLTj17TAtdprLXrEea6mK2a+ulF3dCC6OqG5jnnIIPyMorA
+LyeGN5Gh/OAHPYc1SLFVFmNZ1McCTVDNXlH/gsHp02bOI3yDISgjEeoUK5eiecYW
+hUedejycaQNFI2Zq4GC612GuIGY8s9ojv27OQYuML5fj6PVlJw5O582A4ZbUDmra
+89LaCd+lhQsB0P7/Oj7sIIMBU36LX1I6XhgFCNAEPDnRdNuPqKVrnq022HG/7BHR
+VWquBJoAWF7Kl1R9phxKyVxnkBwGck1S074CUvH4VmFyQ7fS+OjQ4LBhCA/mkWs8
+ENmlOGBjqfIJ0ow1lHdYxFEM2a34/T2cSSJU/gYI8r+bIDOVL6Hd+/vY9rreGPsK
+IZEEhbTi2IP+s2TKgA1b2Fy+QfZIQVg3pSsdKMxsSlx6PRSnYS/tSxNSyhTPqLiB
+P+Smb9tOyesfybqd+sz3A4Y3H4xxsnRVO3hfYRRf+hKgScVGicZwcvlfN8NLc5M2
+t2Q0yMXIfUrNauKDQsoIBIDO9SPMgGO6XuYr/ozNjdL2kJyMUzEcYTtY6O6j2inD
+y8/lao7FXExHywv5ttw44fxXcrhyr/76Yc+qsgycTFwbyt/f5T2EZCpjGkCQojbk
+BKjjNEUqMWE19iycxF1DmqSYySeEsMCCCEuqV6kBhLA12CKP8pTMe7hLPILqeQOp
+cSFLGi6+Pfq5aJtnevVZQhWhuiAnvDpP7d+TgtCy8i5SpcXkW6LL/AhJyf084kZf
+TFwvr6sT7P6uOjCwwzm1aMxyUI/hKCQrulNGxLvK6KQpY+13I944mEIgbeTHsuau
+m7tVRwFxd0HyZv6nErcp12wKycT9nZfzAwiFCCouKAOijU0We0h8EUD7ipcdC6qQ
+WA6FukqYW4Suysk7y8CwJ5Qh6No0qzvATVk6vCacbrfFKof+tEw03mvJU9TKUiw1
+l6YG7Pq1GNJ8MTFLLt6DaemF676/E8gTbmnqGNU1Gs9A7fJB2EhrdLyHMGyk2PAp
+fCY85MXnzoWnRNuQaZCSHtFOb0MtZu+pJCaFoV+aao3qGN/Ikoi4PT6gAjw7o22+
+YgldHZgdxygTJC2sZCVBqNWNCt6n3P71rOxvnz5gq6kG5LKZyBMlb51c3KXBNyO9
+zQPjUVjDFMwQ2WexYE+GL66Wr6XTPKTQBevc6ZKp3C/9/lWP8j/T2I4L9radK5bo
+uDdXA3/+2z4s9oxYWmPr193ouNnQnxBQ2zV0J/aUtBl+WR7U/IduBJ7HJBin73Wd
+wdQzEH4zA3qo746tZ4tJd4uAnCVl1Ks/4lWeKFT55J9jF33MW3hBfiw33/Y/Adfx
+jD0RUOlexO7U2f+cYxynnziR3nQGXN9x5Tgi5JIHEe5C1xc9OWIdWnlGZVKnOauH
+ocs2XNAJdzTM/alQzLZvIskuIchVUXa8IS7LRaMCy78B93r2PHB40EKnuLh6RL9A
+MsTdktKHEuAMdggKmNw8DTqMOo/54DssCKukrjPAaE2UufNR0/R001Xqbv9hx7kR
+jmpQqaBexGs8vqH3TNAsyUMd+fjcPDsVHHH+66CRMjzcaiHN7AT6lAbl5RUhJguw
+pC+Lmj/v5MBsNKa5YoDJ7DeYFEYUEeAbAgnR5Dgs9g8zaiMZQmxbyG19cvDmY43q
+7NwUHnbWZXeKMmAa3BaXShNmim2D50iorwpSER29x9sQy29w4d/mqMPkR51O3Ne0
+HsLI+dt5fp7UkzrYpjNCWatY+QQjkIHn6ur5aBij2eWISbeCt72hGFbrH6E5gZx6
+Ipl7UDvBiDZ+9cR8+8QrY88GjPb70aYiFT4+p+LFZiqqQwO164cRqFQB/6C269hT
+vz+tqqT/w5Qy5Fh00CaqbmclzRHApdP+TLrYgV3nY9GrOIriCGwAem6wdjlIt2Nk
+99FxEq2TGFLIgSzqyN5bJUVauPTzz+VW0QQmye4Ce6rB4WXVzYxAGXlKJLnlHyxL
+TDCGyyIPsR3JXi7Kz8hMbnBFtR2yWZk7Xr7aTPx5qlzOw5gWv9QoerDEJhO7bYXA
+iRh3UoSUGkQJb89WUv5K8q87MqPczOHuauYqOqdMV036HlgPbmXpbLshlr/LY4Js
+o6B6nk6eTickalR52A/7EnTfh1FksnaSOst4/dxeQjGt397zWRh0HUb4qpRgdgLO
+FT01RdTDWy5prDlUQ7wDcN5OWcfLK6yu9nyiDjq7cdCLphbeisC+5+tLFPyu83/X
+XbM8LbBo/DWrAbw+FkpOMv0xzMW7Kuzg9hnhSZEd5v9iJDJn/4YbzlP2ZEBCfQIQ
+sDg+PTW/KKIGCwowkp/UwJIg4gPhrC+SBcdOkc9vUju53khRRyoTywJVP5sO4RXd
+4v67hUhzXqrIeK9oaNYAOrJzjD/PBcvUYKWD+3XVAby19x4VAxuClYm/wFKNTe0v
+PwWBIAWR90ZY+B5APdbS1YH5hdNbKZ1r9VTLx3Tb9H3WWuwLiJeD2JDoZ4NIANow
+rt6kOLiChwAMw+YPkuPf+o/9iW9bs7+/77qT+oJB9F0bVQGmQ9fVE9uDTfBxfXet
+cDSxZC2Mv/ecoK7Qni5ADx1/7aDeuX+6g5SWoBBol/SVYmckYLVW8I+OABNoxrf7
+DW6oCmlD5hSAGanAjf0+fFrY0I6bdA7oM88rDNSks9V1IO0IJnEUtfW7kptkLhnD
+FJn62kznY+IucTACPp07S+Anu2m9cpdf2xjMwcWBrGpTlY+q15JiWz9ijqtLek/4
+ljgluvKtZogMgTlOf70puhRipMqxl06EowpcsmwNSU0tKdiZK6Eb++R4ZlstpzXs
+VkDllzgOSBc2jPQj7GNaBNap7dE9Pw2zWC8Qv6TiVAD3xX6iMrQkgoBH6S12CLrY
+legeRacKnGCVVVimg7+mG8sctn7+nArZlClaJakLSGzYZs7Le34cC3fDp+k6u2zk
+ep9OU5Pjk27KPp5jrVZaL5m+9f75HDf2VfcFU20t+Edo9JiNs6pgOpDjQFiDFS5h
+hRTpLpDpWYI3stMNg1HWOGfE2kUm+8nXe8MDBaXVRLHj9+NH38g/Fm4+gMndx4BH
+qf8lulWGPmfFD9fbETz/yr+zW3kt25RoC6TAOgvGBIULACuHiGM4yJcY2zceG8zg
+zVAv3ZHLI4eag1rp7Ete8UizCc6LXfYtZVlib5FjX/nr/ljMCB0z+XG4MM8ZAxVC
+ba1pGEnriG2qrRVLdx9ibPPaswVHWPGxVfBiiWD5qSDkQkxrcF6/8uXAF2FT8FXD
+qqiHy9YNUnxMWUlNuqWSKFYV43yB2y+TfTmA6fLDhulsxhnbENM7GXe0nMGFDUMt
+A6on9yQDr35+zWQO+neBy8/UijWn26eLIe60OVlLZXrSQXCrGjGp895r2S921ZVz
+EOUikYy5En0GTDpMBq/yK9bUsG2fMKzlty4wHMsEFxsFEAb8zK4XGE+vPcWc40PK
+sdigx1MFOz6YJl8ry44jOBmSdL/8Bkw7CnRp6O/M33syNaIhZ3/meOLIHK8EPw3U
+XRku+Z1PxwWPVHIvIMEP5tgP12Mc99hQieN3vhVgDI1BbWbNxozesx3QkABdN1RT
+I2rUlY+XtNs/yGhYxWTvNoSW0OuNHGX+27i1DJIwLug/ZpMKM6FJtyj3KgK+J3d9
+mj6GprcOeWkSBAVzhd4UeJNrZ7rUiwKZLu3qVPsGurSV1x6X2gsNvQ0VUz70ZtXw
+n18K7CTvzRnu8VVOPrX+QhXBZZmm3ZoAGMXvNFa20b8aS0fEN4w+vbRsr7sRnorG
+/SUCVBoPOsUCBHPlskaQ2VeIDoVWUZJB5s1ti1xev6ulQP3A4TniJU6sEO5VOlI9
+MLOHjNPAPE8WoIYCN5WEZd71hrjnLh0uie/3liczS4qJ8lIAmx3UyBwoFzmuBYui
+elqrItF/TJzZZ4L0YVwsU5b/COI/cR2qvGx5Z+jisexOU313qdJ7Ez4mUdY0fZHV
+3wZKwVM0up1Nh0mSu+0m5ccC+xkxi4TvH8q8ueC4pZGw+xfGYVPpac6+rpEhcqvc
+k1beT5y57cFtximKyXtjMuWO/TLg8QB/5lS7TqJJxErMRg9BFgxFGTU+zZGN2fhn
+1Et4cwqdfnGZe+AQ94pahoEqC2FCEQRGcAEJGG3Xatwnq9N5Ph93ozlW6DiZIOy0
++wPBhrQCB0F+jAK8uCoAcx2+I0tk18uFHyl1rqsEgjoQIsGNXGZsRhqa4ws72MPY
+87Qx3gxRZ1eFrQUBRkn2jEGyNWECYUXGvDBHmQCGjr2XK6gwvxYkxOAFHsDOYt+z
+cGmKU480lxQSxG/uFNiaeIr7z7LQWzagNKOlf54QdebDPDxywxHFeN3qwM20E5A3
+qP6AOTNuXXAjJEx1NwOp415dHLLMcynhFvRi5V/7cSOESNsz0aQyGmd2a39NlT5p
+GZyPtCl+W2tJz7w7j2ntVwgTN5ZSh8r8Kve4ystrM3dihi1EFp96ejGq5sArq38U
+FqQW5IY/jdLbPYUSoUPh2aXKvPGQ6ddVRvOnmmzD6pGH0VQ+RozNE20DfUqnT1EJ
++a9wGVKjJtuf5cdG5gV6ROKBs/rOzJ54RbmXFMdg4RfIQ1BRuh7fXcBrgQ/j8B/r
+dQAZElaAhwb4f8ewhTirLp7hMFSK+3a65P2AAFBto/xMaJu7oVvTw9y5vlU/0lvs
+kN/egdsyRMr4N64Dm3CSap47x+Wrx7es6g/PJKcSErTNtnu3dpU1t3DzC2qLbpGV
+CgZNsRfyBlK5S3jjVJbAS5AEdeBCRS9TzHYGvAWYbGG7EkgGIT1CCOGqsVX5GiN5
+cSmvrnSFKldiVHtt0iEpUp206wMUL8zvqoaYss+WUgPgnkfxvLbqHdUVziJu6DuC
+6x8swL3rFAPGdrJ8jYDBK4uTOeiuyR8iui+TpgbDyN246gHwMhX6XMjgKBEQy+qh
+WmfoKYsBM+Ohugl/8SBa0NpQX7AaJEH6fP6e5l9a315XP90oXFQAsZyQGZKn8crB
+5PBnbUiHJTbP+4pjXspPTKXBkPTMLMEXWifXRL2cQp3p0QfuDunGCtX2LeFMg0tJ
+SNdvwEGNi+1vJNlVgZNP3HNQ7M6yY2eOGyNYjyx4iOquURKXLCt0INjIo50yNrnV
+nRIOBpB+QPCH6FJXMMRxnfayMHIm1KZ4QePSk+3o00yX4c6LZW5WZoSZR4PudXC0
+dqRlr8UcEonuXIlVROgZs99BqLPO3ekPLYPz35nq1oXrm3yIarzfX72P4uLtYnMX
+ZAYNDy5RkStdrVdsCXvILCJSm8Avz+Ps4EU/ujKjhWR9X2CF2zTrEQQJh8uDRomE
+muZ/uSNycWrXk5S+DyGsSMvYgphGbT7FI3ziQvxn5ykimj/N8KLPqTmYT2MCfR+P
+yojDSdDuBampoVXDcYFdR2KDMGodFaGuFutsEvlOdWfuflsCHswD/+V4NXXYGa8z
+Qb+nakuhhJWE8igfKsGzss/jp0+bQi7G3Lbn0PkrgjerCuMHmTH2e0hHmSc9fN+w
+6uRDkKBdXDPxogxj+IxnxX9l+t/zvfCeOLDezti5U/O9x2Zne0t05Nm164yJoJXJ
+He9Sxc2v1XubtYs9Lt9nK8oImdi1qv1kKXokIvaHLwHZiSrztG5SmKeJvXi4PtP4
+jCiMeOemOB+hLpnbyJjg8lFr9JnTDJxM2HVDZuSOMy6/IHLOcOjhNwEteCOYSHPJ
+OXxSRUXxaEK3QnIx2OsYGikY3vqaFssiV2yatFjDeJWN3Q2wgcVDji5TL5dRp7zC
+WGWB2GHzWNUZzXWqqcFg5ayy2oRjTYLwUm+0lJeFGHwX31bkcDSxLgpHHcr8RXib
+8ZcH9Q2hmjJtvsh9pCB9DGzrP+mqZlB1PJpC9qPjAFdaQUm4CDx3KWFi+HwaFGI5
+UrJkvIcKAT62ypnDp1BaOu9G/8kRisYqkmJLguCNXY1baOE9vgrgm9iuRN+0RaOw
+riuxgrFxhFHUJu+jmWhpURHKNzDe10ImcaOPf5LHrk8g2q96NNnAKRiM/X/MF5km
+OfXfZKbcolLMJw47VD9ij361ZranJHYLlWYKUdMzhEJQM0QRQGfOGEgH8hllaxKL
+Mq4jR+UHVCnKAD5M0hQzXfvB35Prjjo79ZjrKAW39lNLwTgyIUHTH00VEg3W8Lra
+Ww9YkjSNFGfDyK5nP0wqN+ugcwa8VZHr4qyEwM/DIuiXWNKWMNEUvEKRlotkcUXZ
+oKf6SJvZ8wThtgugkp7mjGnQFwnd4Vi7IWb2nATLbRFtHjWpXGO5ItUpLKIdIirB
+bxn2a1K9u7cU8ecW/hp5R4B6w7oWkP7H92wIq6mcmCDUQ4wY6GjirTb7s6V8AZJw
+QPF52uo7CmqG+RdRzHBBvVa24qv+aAAxYhzEnljUwTSPSbelRSOgrljIVupWJY0O
+jpSejfXR1qRS5gUE1cXTWG2xlbAgvzn0wbx4nyGIWqMdMkQlyRa67CP2eNz3T/Uh
+7+OAltIc0OA03OCH2JE4OmFBwjo7FNhiCdbqV2TqPIa1S3J09hSA3Z4XeA5GdyzI
+zJUjnxN9Kkfe3BFaedNG7B/DIgGZxrZxQF2zgDtzWhO6ijuzm7sxVLxwcbkPPUX5
+BfIagKjdQaGaPpgauAcFSS2x7n1h52FFT90swixljwjUb8+ASKMJR9rovdTDypeX
+AFkRKxxabJDnBHi0+NFjvr/Vg6Ttl3/+6ZUSfVkYIFD1K41VnikpqyErp4cZE8ss
+k1MA6SJ2egshVHGrPVoDREzjrUblJlY+59R35hEO95s4Tp6ewqmmjvUi48aGOwLS
+P2V+OA11C6t6iZPBqEhxUyFEB/d9sxDSfuJFUTHuuMRtY1ZfAS9Z9x8Y0R2w3Oza
+hrLy7+oPOMYnBJdj1P/LmVi06BvTcg+yO2XpN6X/kxBFWhhm0YC8RQELfcHEnnG7
+AZ2QcYemMCVE2PtBVHI3YkHedYUV5ThdxW3TBgM3tsJK9sTD9TbijBhuXpPdxGDF
+hIYUGTLHXPWPAt24PBowzmKcfUySIbIhnfn0MSVGu38EO2l6cIrv/sX7I2V+jdgg
+mplDmBWOCfzIYlZfGx4+x+OzWhxZPyKSs/C2y99z2xFVw8DC1amt3WSNz8PtAprH
+Ag9TgCA1YBq6Gnjm8PZJStjnvsK0S+Ph2fDwByRago2kwNICWawn0rP706czorpl
+y+w2BWxgDehwV04X6msywgRcnkot6bpOuRtgaHSwFM0EGgALiqESAxN//pAXlewc
+IuD3KtdleiFNT69eYCa/G8MumZSO5F1NnXNiT4Hsr1UGxtgazmCrRvaaN+h/5jEG
+K5OhOzVitBg8E0m+gjz2gnHJ9WlyMwdpdijtgQbVthFCU43lu82/rNb2atoUNbFA
+heVQefrcpwytRoc/5tqMjOhKsXI+Kr4rwMZHUpkLQ+6l3BTc0lDCCRcSxjIZH7rK
+HePtNaH4mGr/bOXCVIJkhcgDrobF8eIpQSxgP3pdAR3HOWwkd9Yzfl6/BrdLx+PV
+Ec6d3mgavSN3xPVrVEzlxkL7e79Z4LqTHf8NmOC2Ao7WKztCABfLGv0MGgmZeyyt
+wjr0ku6xErqo89pBPdfR1O6pvLsGKYEhefy+zOpiqa1kXuLnCDZPh4u2XYW5OO1F
+L76LU5t5kje5g/JrpG2MPYGXWgPLYpe2kA8my1uNIUa6W0Kl+UBTsXw7ks77jFcB
+MVpelsnIXtNxiLSDT1GR3PY7njuTwiyk3V8jc/cxMH1S5I2g4QjibDre03ojtbI/
+4Y8HYrh663yWwwkk/830ZDXlA1KQB0FlqOskEhZ4up66dCaoMfFHWpxdBH1HEKmQ
+OJEUa6A/V3AR+sRBxbmbtH7IDvGGMlYSkBUB6oUXYG1Q49M/d5mfZFmrZOnwC7ee
+RQ3b1d2nA61xBeE5gRiqOukjwOZ9pzdivrGcX/1fqquNtheDZJFjfnenQKock+cL
+DqYV0+i83k7az3CS3LwIwu3D/B507UfsrSpkMeuTEcudQwhFztSmXHcKgdpy1kH6
+9bWQ/lrSv2TtaGPxmDrFtDRnDYj7dx/NwD11wc4iuF+ZEPMYCDtoB7qq8BQ7Zfpd
+41NVpJ1qAnrVTdPqu6YT6sk7ecfXKd/ohMa7LOFELiAAKYSPSR0FKBLr5ruxP148
+4o4LF3781wuplKEM28/Us9S0cH0bxYssZXDWcx9hAzz/SO+hjwiwmnjrak4HEKD0
+l+o2wWPEE95FCa5rOeVHYK5ItgjEJXgr2qHHmWLFMG4wF0rnAXSsR2oqbh+ZdAlp
+n3YyYtaQeQVSWS5F8mT53Gld+k+AByQx9ThYSLiDe3jBbLTs5WMp/tnC8fWiXJBr
+sPwGZCwbzPxBJ7FrbiShcoh+Abu+OuKBj/SzDfCFi7GabwrbPGhOrds+mDKb0oXo
+zCev+vXhjuTkTCWulyoO8fDc+ThZI51iSFVUdX7Lqm+kfniYbx3ctxj2PEcTNMf5
+CnTL0lcTflzOZ1GpWnFtwq+2TvDR+f69t573x6EPEFZOj2LfzR4It2ZRJ5EJjs1C
+INfkS0RGhBSRwkn7GvLzy3eoQsnZP4UsW388OGzGR/6xMt4vRzYgSYbT7QCZziXf
+l5FFEuCvWrMF59ftMv1nVS4MowMuzbuMOedknNH21cU1JoQB2c+O9AMdbIU00f87
+dicTnaBmjF4anzUstxAPYu+yzrJZDVX1dWOeQDqoarCnJCv1mZ3xI4HshHf0v8dZ
+QsEhgUeODvqPAVmcLvTP7W6XHQywt2VPwPfeIu48D0HOQiBX+nIz1oa1PmBwdaI4
+GfXI9dO1uvpMxP9gnahHLLIhZkvYLKHjEK4RtOANgQqVYDdA3C7PfoE8Uj8mrzX3
+siBFKpOKncLHJsuxnvzEclqSWB7rL0uiMyu8xHZIzWtovwr/gdTPPbQ5r4I8uzwP
+PbPJ/hP7rm8Vgd/4TPtIvZnwt9Cqyqgu8SDPmtc1lmyDSW8ni03xZWO8hy1AaH3H
+DUWckSr7k7RMOZtYGA/EK7Y81zem6ySZVwYgE1xkoeTvpNgQmdulKf/q4l9xPtGB
+njTxc5B9gwas4RnVRq1/j8xDBTV40ALb+OSSGc1nYtxAgCu+1SRM7dh/76skf5ns
+cxI2kx2O8v8i1GvlVJ+tWb4WGV4nudjoU2rN2nLTqvZYx7qWLJJlUhoMXfGwI0rH
+dilK2MpMeQYKuPPLyb/nMcpwQPzSgBY8EyyzxoBH2AB6qAABLwPRKbAkPxNCrD7e
+qWUWSaCOFRc8tA2ncOMMzxtVcPYwA0/plt71+uvb92IQxdWsRy263SHaQOOkG/Zm
+TjR5uml2vH4nvnJixguS8BCX7TDSwMqLb4Tb6DPa4bo0SjODozbg/GsM+gi7W+si
+vGlBOiNpT7Vi/kmQD1rlGJSH3AfyRqR4EneFNSH7NXoBsfpAB/m1HB4Wje0DdtwA
+pTaTXT0kfu72gOb4iE6kR/HrJwBz0S9CI9EEm5L/oaNwFZWfOmBC0hM7KH9352ia
+Wx6bQ/Bcd2ZAJTlVpepLYiIViGKnIfdAVo/trYn4UxFek8rVu9O7vDp8qSvEShA5
+XXzZi5QB8xWXq9jnty3pItfd5HYiGkea8LLGFIO3O+Z5MVesukpJ7qtzI/AnWY+A
+P+DOfl54k1Jtkr3Vxzxl8SojXuBaz027FnW8XhCpCKk8dCfbnrmW80jLZ1PSxybk
+r7L5oaMjuivrx9Se0+8gQmE7yJG3fWtdEHYORh+DYGuk5fMY9UmY+Sx9EFeOUt2e
+9jBk3ksTzQvIoraYtpFk447rfFopfJHh2mSztPcoDiy9E8qhGbTaeJj14jtMDzmL
+E/CYNaXg2m4HG+ztxDzHQJlIgox72sXPYrRALCQOEPfBQE2i3GNRRfba8x1M/l4l
+vmxLNFKuPVdIev9Wd1MbvV0TFKjA/85FUnHuo6arK9a4ccw1R3NiKL/826gUUlmK
+Z3SBgXE7MnVHxveczwzSMDkm1g52/0l3T10GEFmI/hZ4/8KwyUr50rGIizcxxNqe
+9M0ePGfgFVyD1ClM+agEH2JGbwqMyHRY0m+1nHfykVrMLgmQ4K/VZYjjecyXNlCc
+xD0ix5ZV6LCmHvrSjllYOLZfxg6iSW8WWqW0kABnwJSSrZbsV7wfd1gsnwokO42X
+Yotc/F7/UUQmNFIOO9huGeQr5/mo/qx2w2x1HBqlp/JpZxvg3sb+uYzdySOGsYHa
+et1BEunPmEVrxU+O5WQWmtxA0zi4C+j4rn47GeDLybT9NTCcXvaL/xm4Ekc0IMPf
+CgpzwUaNZoJRR3QeMRSkOhjAk6l/H/86DnTJOxHFG9N7fOImRHztZiWUnTi4Gn3u
+M0LRYbKpCVHinmvhesI98/r4u0Ex+/M2USoW3gLAS17hPR94YKRlUXlU3mg+hXiY
+AbUBYAUl9fIB7JvGqFjsxpJLmy+DDtTcmM4pJb7EoATMbLU4s/b0V+3jTGLGku6h
+5keXrikvZYkKxYSNoOH81V1l7D4WE3jeSSm93iyXablO1ZLDnalo2y7VBQXY1TQe
+Sy0+vD98HOfzM4npqhJiByzsYqqbe9vNuaYodiIB5XoyR2BMjFwhN7eVwlRGkBxj
+EHzJtSLuzuP27Qux5QFJeIQZRM0/RsxwtR8rS5drL71VrvzNS+FFYvSZPoZHV3GT
+RR/k7K+8ad4IXXFV5Suzt+ec9ml2T3+ejKIKylO/pls3OcttrwUd3Bser0ivKWKc
+RkoQQLHQDatr0EJlhieQiCwCHi2fEsM2aQzBw0oDolLa2EyxuPOMZYy+RazHhPJi
+DLnkyaPM60f5M/pSlZTOWmLssXq66B5WP3fSI/O1HInwHiBkE3+QEFPi66/rqrkK
+lqWDPQ/XVrxnUAoJyrgYVDK0uL9z1Q4Wyk0OzVn66qqm9fiVwiq7FWnSKCEXgWbH
+v8h/0CNwlJYiJ1asd27aC8g7jx2xneWMQvL125tYj5KOzanouJcYLEra+93aBZ9z
+r4bGOmxpPU0Ceot74YjBQwT8Ij02l9Bq4DHsoPBZaXYjnxb7NBhG8FvNqN3ts6yi
+zYOBx0jw8OINvwT+Mfp8lJjIBbjMn60ZvctIcp9bS1FrowoT0KdxDwr/b5ci/qGh
+/xvuh1K7o2+Pf+2kRnG/XTdmBxwa0jZlkSNLgU6f7KOYUvAii2ElA8mRbYKDhaPq
+TgTeaS97g+GDxzohXe2SzzhSyMH32BMj/8SNPTY3nBrfMZVZohl0Df8nf9c+yZv8
+shxYQtfOUV2yN5BEgiY+rag6p+q8H/qntJS50VUcEopo3t0cmQQun4tDhU4XsNQc
+0KKMHQR8OuR+laMQnwphOcPOQgP5nNu6mmXUyacTehrNDaG+u9C+RCAZimCU6Wak
+J6gIeb8E70MrsMlO/9KzYeDcRH6qrBlrYVThxMZE8NgTXfQHcgcFGcl713Lj7yds
+SoTLQg6XmQLDs2Tygt99tD7DawaX+6Cpc4t0lfLBCC6b/vt4DzDwOs/SF8ycSPnp
+FzE11zUUQWmQLnGAvDLciZTceUCLZ6QgKwGCTNRVlwqTGJIuNvy2QRgCFM3TDhCr
+MmZ0wK0l5aDlxXqymK2L2UCXuy+yl0op0y+3iIBy6Droe+LityEzoZB5zJfDIyrN
+m0OI4s5vKsKTE71vhdCpThl0rgcvn70hmxvpVimnRq45fCFJmE7ab/LL+mUdQg1c
+5BRF8OoGgh+m22+mvi0HuiDu54CBjJIVHXcKHhPmuOquLg5iKR30advrc944m0gx
+rKPYH0XLy/CXWYh7UpWylqAbqAQx7T7y1TsMFbPlaZqT7pYNGno74WClZbB/hYwr
+ibvMa0bkH+vEilP0Hhacnxe5PH4hm4wenh5vd4I27dhGu/9CEd99467WQPhH6gSs
+2OopkGMOuJn/sn9ez5QeTrlIhyxl8aQJZe1foEqB0B4aQlO1zOM6/PgUMvQFY6Fz
+3V0GaLRDDblS+UcPGB+JvBqp7a7gmkroArSyXAjt8aB97qwEl4hPBAXRGqU2pM/L
+BAHGXzydMmVvdGOjRYwe1sMihkAp0HYYWO7oyYiipDy+cMw5cS7rA6Op/EtUWXM0
+5KlvmX0BaO00AK4IX5TTaBBmtvgtulgELxxQXK21kVD25AC8CltygQoI6BroGarq
+lJoj509kI33SbkL50pwBwag+hkKZlcVeZ1KuLVSyh7C5c0AJ1Pw183M4hSPRE+Xe
+kC0v7zabdOwIoZOIvHX2vIcxEOyStrpSrIiJZZposrYfJGviCasDunXsU2lfeEU1
+fPewVERerkkv9wBQVtcMoSA41e/g/jFtJh66emwCU5GGyW9BKB+WylGlMREwtsVW
+jXzyv4wjSisqzsGI2eCUdXec/J3cgWmmrQs+3bDj7H76OInH25eNah+g0iaOJ2nq
+83d3RLHPlFVwOF5FyluoobdX6w56GjL2l+viUjwzWXRJLNxM4d5PrYUZmg+xNzkM
+CSxKuohnq/Wjx9SSmFSP83imldAzs/aA7Xuskbl9Xv4Z2843L4DZX5Ev4y4yatwh
+xdRYUhL9QaSxmxDUPIuc3SDqO+xa/fzgPAICmiCaWiTXOBmRcqVNcDnkl9DVxhGm
+YXPHVxEVjjbVkKY9xfpB1PAroZaPBcHjaL5wM/29en3xdvdiBVrbjQByRouGcI/B
+A0wWKdR3DiECmnMZ8r2RTQHCAF3iQMVp+02OfxgRFK2w+yl6UPvRQOOBduS7ldU2
+tKfCGXzYvPQsop8sYBtEKM5qoxtee5GhpdP5+mEHtCrO3lJpQGf/Dna37+tHEnW2
+naz+i9RSqgRqPzGf7vqmPqiopvnPNi+fq3cB5vyX3pFarcdOQ3558JPj4Q83Lzn0
+m5kV7LUepK3SusTm3sQZ1xlpZM2onV7P6HZ505byhLr3940lTM8b9AAmr9MIIvBS
+DUXbKBLSb4wMNwCVlxZtA93eTCFw+YwBBQ9BJfdLC/eMxT/J/TDzMTE5jCdi9uiN
+GAI1K0zp2RT89D5JFPrRiBUxdpuTolYC93KRU4C2etHzKT/b+JbOnZfkiL0rktj5
+l81vQGLuT0Z6d2ZOfYXpkDx04bxBaSVRJV6xChPbBje4fAWnNo6qfZCtHeEOHQ9X
+OnUjVZ3jWoSEJwNWu9V1qNuc8EhDXcAAsfZhIYrygvjbw7A3cTwB2rjKNg6Z8tN3
+nsLZL1GiQvtbqIlAvS/7L/bMJhIrzJ4/XCYq3VIyRk6pmQZalXb6ew3bXvha7ac7
+yg5uAScSuFUJlTgVybhXjJa830TJgA12z/BTdAfAhUNf05SQhDxbQce4yTgxMbf7
+JzTw3Vv8hd3mIc8fknuR53TFpCopJ1toFj/fnwrP7RCT2GOt7/euOikjVzTMVflz
+Bc88VSyfP1LtKRueoDG4eXcOr5+ckNyLHuzd8qWlEOElJsShx3WqhsX48JQvYjdq
+qcR/BfROJ+/jnS9gpJIwUsHH1mQd6Milj+HGOx994IW/8g2QTZrVAVFVJFpmQMiZ
+rXxim50yj3+l/ElCs9rVXiVN2mgOItFGy/p1zJtylaHtA5qfukIddyPeDQavXv/v
+bdyUjuGJlSVtkUiRCR1ccZt1GrFzomaCyROCnUX5CQsgL7BEDfbtCnp/F+Wuoe+g
+J/i5HhXUww5A5blCmN2VQ0czmr4BmSu2NQsfcOl7axlsMdZ8UQfq8iB9MpynQCkb
+dsEK4yhNq2q4gEKEfabXF7+2XPG5Aa0rgad4XARZL+UJFaW8Bhv+zqFI7QSxcLi0
+G7rT01H8TG6DEC3e3s7thz0feQxmIT0g0vpp8EDLSMzROngPXPni3jYFGkvgQixh
+APpmsPUWhO0PjN35I5uNzu9SFdxEWC/hsRkfTX2U86+wwRUV9Zfa1A5mLmGZUEzx
+6P28PgrBF3h0lpNvWFgt/9twdPnEZkrboE9RNxs9M8v5s8al5N6HJpX5QsEhkGtC
+c7v7528Ev3lWwaYFWdAKcQ4tu1846xqlPLQqL4xfmhJuFuufu869EZhul4mto5xa
+K5ImgsXVqAzeGVJhpeMMnr4FTfxBpy+ZZVd8fvulKV9TUj2ln+oYnhpfeyDTFSUO
+7Ow7fDe0nZc8AQcQTSEDG/g6nYrraHqEymbv6sOxIv9lUZEBBbKu8mL/sxPsTJPx
+m4wpS8UaEs28ApBGM7+dRlGEHBxUtXi8wy70aKc8A75NWwpRQ7kM5KUsImGhEwNC
+7u4FQLExINfre6UiyfUhqtYBzRtkEVnxCsIMDxL/+FZebzhbMmH3wJa3hoarArPk
+pHpkgcJw7CZzANK3uYpaLiZKDYnih7iCknf+w5ygaFpqIIDu0XaVBO420wEbwzlx
+eg4Vlwjeb7r+O7Y+Jr7YFoW7oOXIMWcHJzXDQcUrMpB+ZVF1XYw6gx1zShV90i8A
+mKCGfBtTaredUWg1sFjPtF0giaz5VIMPWtmVhUZOFjc/AsfvRMbGA4NkXFT3yWxW
+hbCegXZKIF47mw/AZiBCe5GxBmwAJmxhlmbyoimUYcOarMz2EP558wqmeS9UTxnZ
+FvCOGanjmCqw+0coNH/2PMsoqfJpdcUhPz0l52P/4O9zBdqMD1ahX3tr0NfyLc7l
+WDAVG9paKz4Dqu2ygUQRByCi32HS0vjhnZvx6U8asXQNC3dy4EFp77CJlhJDvz7a
+VimQFVaa9QbvGAtXzG/Lw0lhr04EZtMQh/2jRmKFiiwOTzBTto+LAkSKx27MC6i9
+Ebcv0Vym7qxNIgeh75OKlg19cI9AA6BAIpESPBy+jSHdtnsPgoH/TL/GKAn4Zesp
+7ZUpk21F2YHTArJIoMjY8DlVxcez6DaStrXrDJQ0E4l2NTrerb0ELTX1csIHPG1q
+3DtyyIM4zoOkQxTbN773lkrKPPYJTVMQ8rL4h6HZ7ls8Rvk8oAf3jaB80aKokE0m
+GJhWwNq0S80LatL+tPDwSyAoH2hKoKFg/SGOkFVtMuuu+CggTnssce2vCoHa/M7S
+bzEiP3AgbcYsMvoATXRXSdaC/3PHEfO1hi44QwO9UVttt1AUHvhQYgAc5oIynkJA
+QYAoVGgOmty8bzWc+O8AGKqneTbIat3RSlLpOkog0i4fiFnnZHiuzvQfkSBudC6P
+ctrTw88G/TCIXpHn+azfYPyexshcA2snZtAXDQuEZ4rSXtVRXcpEGBegLZUTFOXh
+0jmtfE8NgyPsqfQVrrt3CGFEODRaXEl83yuI+vFZh7ScoibUQ6qacsOkxyXvMomo
+kYf5WtjjVSKJBa/zNt7YCqZqksMYoYL5txETwK7iDt/RGCOOmjy9RMDooFvR1Lkz
+jE+r0cgqM6Tf7nYpvLc6QaBDmjpExHpkggxnIiACGJoUgkum7EN+vwlxaVtwNk0G
+beUvuNyujbHkG209CcKqoLby/rUxG8UDh6wMT8czcweOuwLETVE4aV3p2cO/ZW/Z
+40dBqWO+AaejwyRCKjEanlhy21IY5Z+eKnxZi2NhmKA+5fB4eUlkAHDu3TUySN2W
+v3iAhkPlwaYk/GyuqmpQhZDA8e7/Ek1LCpDdjLhqAgin+w3PAznX4/9e6F1cdEaw
+4qPEe5Ztlidw99VhQOh943YSds3bcXQa2G8g7ByLEfwfIDIvCS7ZSKTlbsagLA1P
+9Dr0aIJbheIEJNpOMgkiGcuR2qoxVVvM81/cTw2nPses8Bcayfe1igiS6FOy0H44
+5xEthjj9ppOk0xOCwfGK9BGXDD4tkMTyKw10B4S+xxQwcuF8EpVRttwTtjZ+lSQB
+TvncWZf+1yqcx6G4w8TZGz2iHTDSlKGkGS1YSztu+ctzwwihSFh7Er/cqiQrj4vn
+iR7t+jG6JajGvfn8ci58Q+IVQBKnI6REKjdGS9qyMjq5OxEKd9DB/K7pvmEsX/fZ
+md9i6nfbg2kj0qiNCA2MJJSdksRX3XCvoeTAVR/I70jw18yQMc6YNQBPbKm3b3k4
+Pt6d+1rnFBeNWRjb9LUr6v7Y7HV37aQQm6G36jFeh33zK5Nolwp3Auk7/GGDQkxe
+xvLeB4Q12vJBgWDCFjzRjE9jY0lNHybEXvTQU284/nrjzfSJEZf/zAvus+K4M9im
+1JVAH4TDrcKoCM3rgGR/jNqYYlh7UHxWb4JGuFlv9cdWw0LBOZXxnguMBpQepDcr
+EFR/mW1vX4svgmenczD/9ry6CgcCIHKoN53MSDRhxBgUX1juW9K4zZTvCW6zkObc
+WNM8bQ+wOBMhFJPfUumYDjtEHI404WgQC4B9VmlRaJMB5UdNuR0qdBnB/74jv43q
+xIJdXF+Quq6zoz8wk8JGVeF/gN1h6bPFtCv+/RqIqRoRcyW988/gXNRmHDVgOK2K
+KZkI+leQthvmwMtaKCo5j2I6BP/uTPD4DSUyi4bdwSbKXTbDQzqYtqetVPyKqM3q
+mybCCi2vN+Vzdk+t12Xwct/UAwiADHJeaXlcsMaBbOfgsC1GnnbrDoBufMor1xRL
+TD+IHJTiw+WzZrnOxTWus5oLOaDDNJsh2q7g1ncphGMevtSl+DrXpbU+HcMfo7tb
+ly1RjOPj66xJWb/dWUXzP6vXJ9sX7TaSyiP9H5EW3GreUX5gdAYceb3uGY8eKDvN
+0CnnZCy/UXgyrrEmGH/6b7BmNfWjCaxzshvhgAs3RiaBDCQBVEJPM4FUoq/djiYo
+MjRfcRVHtBTW9DmH9GvkADY9UwTGoe5EdssMdgr1+LVrdGhy/GqHp61kSTqsCNh6
+C7Uo04L+HE13uLZw0x31PTamdUdLSYc2cKi+KjsHN/XnMHyQM8gSQC2TSUzAJzba
+v2/1ouIqvtGjXX2DFhjQyOsefd2UIQC1013TVWGYTn0WlbHgKLC8FeULPIzY1ZiT
+1vThZgzm9leAji0FYKYWg+n3BzkEP2Dsap46vFMtZQeCFvgElorz6WpncmwLoNeF
+/r5ZfdulpsP38wpbgIZ219vBDSf2byFhuHNYYvMSrWZq7oCjdNdG5E/WtRGPWYqs
+Kfiz13btilMtUybpAj+V3Cp7T3SaIcXHjPdYHBG6w4MWiod8nt1NgTKGnk3XtYce
+TUofvasmxym9Z5fsjuiLgcACx6MJb4zldrlTmJ17iS20i46gG13QJQeh4BGvhCkG
+y/CBfqpowO3Sf2+0joZggCF2PfBY8k9BLIZL2k9drm8rzGrMKETtvFbEuoLnCe9B
+Q4hgVoTKNRnJc9wxt+YavAfjwAwWjV4tLOOXp3QDm/f+9iKzZBuvFISY4IrdRsUc
+P2JLPwTS0Hwkd69Vm8CBcqsIuRwhoRs4W0y0Z9SvAV2qUH7osTHBDJI8af03SujN
+l1shZMIFeE0ArmzrGqnwbxiDZGo6HwPJq7k5LJz9TKqMB3tQn7wteWNczg40j+bZ
+CfcDNcPzuWdskPIr7Ka8IPXvzk3bqyfjMjirL5qIBv2RvC4mubIF16z6D+/kj4Z7
+b04UDURjePr34uqS6IsCk1G+YoI11u1E05NMq0fpod5k5QSbL/rJAciMyFKVFM+P
+ytKzYqT+eJI10qIUeIiMUWNSFjugfYB5g6chaSWtVH5s2jQFPQuglg1nCHVixJEc
+n59JNGYdllVb9pOA2kSGPJFbpZyuoJV0sdwmXLRiyRDlg6p69QwDS67Tc5v9qwVg
+zErs6HkKeSGEqORhgQ0iSCsEaog+QBSz/Y4xnm5OED86lWT7EMVADBCZBZabxpA2
+lbrupyHsWI6iTu5q+njmYkKD1PvMI1zmnConbm/21T2ZN5m3CUzkZRPqm5qVOsDy
+sazsdX4kHv+iwtIRCu/hvHGtT0oNe28iQPP3zhj7DGVAWqAhjOgx4Jcb48ESbIvA
+i6MR5Z2hX0eJxwWjicsnaamq4KXiTVB77reVyje0g6KhKZZCZGIAbQ/U27uTnIQn
+Hi8mTd47P1vbNTJLWfk0yrmVqeQqCcl83VPa67IW4Ef1n0swpYyTYlrrydgw8mJp
++xjc1L4ZUPumimjKVhWvfvlkOSk+Onxzwsl88qdwqAVFV/VNwsb5oOuHSKzZg+zh
+h3u9vjOKS4Tp/YObKfCkRTzeGXy/hD1QAlzEf9z+RPcuhAOCdykTS3Qc1tjJh43w
+XWx65GcQrN1H4JU/q0ffiV7LtlQ0spOy9+NlOHvj6qLUujgqQEabZFXuXzfW2ejJ
+mBrUVKIp/geCxw4fu6dPvFE2JghDq0sYmsUbW5UP6vPp998RCbs41pCl0nFXQDOD
+q/e4k/hTQk9PCQStqlFW/T5Gk002q5pKrckec2rPxwyoMj8z765BdISy0aTKWUDv
+aMTVTZMpYkQrXV9gwcW4FMwy0PcySzsw/dnZwn6G5IGYyqsd2Jq7dqb4yGaVeaec
+b2AeTIg+uNrONdlzqXsOzMwvI/yswsgVpMqbgIBHnnqiLV/xpotWss4ujMWcTXmn
+78Pqka0a+EK4YtpZXDdu5JgEp5xXQ/yxIqVqtuqB08169vWRcjF0tu4iRtu3qL6p
+P2T1EYjhdRlt77QYsorWn3JeCvt4NTkiGLKgppi3maKI7BE9WfLP2tXMsczIeqV8
+OUVpR88zETKOwgYCqBXm/AgsqD4fYWfot+T/Xpmf3OnVMaQwxn/jRubjAbGH3kQB
+YBiC37kLHw46GJ8/L78rgaYJ/l8CBJ9LYpalwdmApRGiQVK2n8Zqy77c5HEbaRnH
+v8DJ891J4jPROsNrElXI7M/+m0MDsdafEF7NL+saPRDut2BziqNJGt0QvGt/eeVY
+zwDzsoOua/GTy7FNUVFUohFQV39vPRYeKY4QKlh1LDlMijkZrd0GPZtYmKCOMcjD
+PsxyjPHCBT1wja7wDRDwBa+sc9A+bIvDkhMbfAm/8cmTEe4FWW0oH3xzD1OQBPTq
+fCgX+tbuOJE7i5pmFJ8AA67RUnv9aRyZdISDmMhHjnoVD6+zcGammVaewjfwwlbV
++7zv8fHDE37yTYxnvj2I3i8yR3QxshueDc9myA5QHiQHRF/WtBKeuuVrjTtrszh1
+mAsE11J/AWO5PQLJ1ebOIlvc13cAtm00RjClncmgArgqNmndMYqAp94Uqi2AAGov
+qseZv/G+F8qS9IM4lsUlkux64vg4ix/SZ+ls8p5Sq7EOb4RHTQOIp+shMe6EjmZW
+jbXpk2ism5LbHF07o/CXRWg4EE7loEZTBt/dhHxxa55z/hwdJEHFdd1dElSthx+V
+NDSj8wH6K6RopJcr3AWEZ7cVGyhtPY+8cH40G2rAEGeUhWbY8CRZgLwlJDDIF2A1
+gnQxFT22F9uK7peXCXrC9xZj2M0T0WwUspItQ1Of/F9mdXMgDATvTFiFkQ3RJDgj
+iaqA9izky9OegtoapsHT5xlkfwiJ4nGJzjvZojjeW0A+7BH9ttFgsCuZ3pxYbVp+
+rALVxZHrGIQJwrCaxK0aUnpzqPklGpQ5gSNtMC7Zz8gbwkOPPRfPGkiPXZFBKryp
+4p5l94V32TEAI7lKEFvb6XGaO6zgeSBMH0FLtXSxWREeiklKqaXNBwMiZdHVPY/D
+eAGhOA0ilYPMvzdQHLDIvRW8QKIjtgVEu/mB2hXcOCPWBC1LI60tVlWAD8nbKJLp
+1MhBx1a8GQQ7SXi8/MMaRegSuJCV+DtFWhyt9GOelFHRgimBzgslAZYqhTizVM/r
+O9QP3yKa4pRse9rwikZX9pCERYLLej/ppyAiexoNddQl9cVZM64EnAihgr4NA/Rk
+0r6SJ8Rqvf1t3qeEGvw/hIudqN5kS02PFktLsBi5jNJycqfoveUhFJu/BBNQZau5
+2QOlHgYWTgGs8EIvFnMi7S7sCqpxbdrPuHQ97ljeBjty+frKOQiUgt50F6UgNXjW
+dIMgOYwZIbozweLmsbCvTrqcESYqW77kaV99m0QnM5loBUe6GJz6p181uAjFgNjf
+mT5/P+3j+XaPCb+0t+++W6LyOkmWOAW6WJ00wbzRpzDF3/nxNX/UitqCUvep8Owa
+TajB1S9fenCkL6WPUMHCjwH3qYz6K+6uv7TXDspOqWtl7zCpLlG7k39ARR8r7n/S
+ql2BW+/ItOHvk14fAXK90CnHD4k1vEZgb8OVCkAViNZ6SFNvSJS8nhZoi2AszgMd
+jmTdpXh+Qampi08t/5u/OlFuZVRIG7Su15QCXZsGWJ7+Em1y2me0uUzmxZRRq6PE
+l22KatY6RJy4sg3gS2lC18eLn63kf8ePQLFCbIXu91CXfxusylbPgVLsDz26PVZX
+4NNg7LaXXvAfmgITXaDNwD//8d++gIKMbpkIOoLI4LpalnCyYBBZFKFJxOyUpqgD
+lBMhwr5vaJml9nZfQf87cIduRaZcz4dxwurw0luyH7kRv+GQc0q//ICC8sDsLCZl
+0rZx9dw0KpPAozwDbzDLmkpZekXXf5YYOGnt9ISqsss9hkmr5bLP8YyfE+yNkpmb
+0K6xlBo+UBOlDFy8ANyhpDG7J7WdmYcg31gWIO6qoBF8nCs5J4vm2vUiqg6gNiAD
+5iWbZxrg3D4BhftnT2uoZrJjxragLKTheCVqgVuxMD/ck/dZK4mIEQHpwcgnLTBH
+8gJnTc1t1hpc9H5SirC+uQYKG5UEwvZjqUW0EY09czLRPRFx6L2GAOYv4ZqG7EXy
+r3eQqomC5au5LcynFTkCpKQM0Ovh7esnEcpc8ljoMS0ljKvOkCm57uJS3aELaIp1
+d5lrVJbIRD3RumvzoXL3xZ/hTPMnBGFLybE0mWPlYEQcy9nuaPZbwqvUcTu/SEAS
+2Qkq0shF59nh83GASPLTxw/Vd8YcbBHFbW5SMfGnIBwRMAKI3NLJtr5xP6CIxt72
+e3VO0QXmt8mr3Vl6D2rzi+I2Y+OW0vfgtWdfTFlO1ckxbdo3YM1ICrlPME0+Vqy9
+BcOhq+BJlBEbYgPbAOjPU1lxmiviRMGeQ7pJVAtTX7qC0lwimc3lgiWypb/llYdo
+8Yhkgrjii2ltEww5fZ+l0nR6wIAra71WDAX8+9WnfRrF1KEBXulWEwrcQU5e85/S
+ilNZsYageNTEkmDTV/OWt3xmc5nSJlZ51tMDMhxGl18gI9V7Ve+UE2PMCPjZ731v
+ibjiuVyWWfHk5x+v9wdfZNQnYroOlYwamj+tR4gkd1jEtqH8A9paWaZMKPUMSlAL
+hFWmzknbcL4DIBu7UN/X/YupYx3ez4g86xcgFmDmw9IgTWf1aJLBswlfXj7dL5ph
+L+4TosPzlFErzY6twHRFUYLGii893PdubHwDvLJxIA4odCsWPC9zw7T+CMPr5PK6
+XbRpTMBtFpebHb97sksHq+JEq8/sVjiW2bEaKhVv6NlUvNy6QDVkIyoICd99Ars6
+lanvkaLPOYfTSmaY4Q4rjDreCfwTG6At46DmFGzSKFxsn+/MZftLiUuFmA47tuwb
+WAPJiVj4cIia7nHOXWpHXytN9qGyWoc/U0Nc0mdyD0XkvWpIuoBOXCLwNXg+rCBN
+kaiAPeSsqe7NM98vYSE1eRqi9ofUb/BnRVM3B7+zpazFLDNl5U4Xo7RavBSTKEoq
+tRwfyu6VVxXRIAAiijoOk2eOCLY4yVFHhMkSBcFPvjTz2i8PnifsK/R83Yh06PI5
+sZVVujaczRBORO7bpwSQRb0xy+5gjwUJrOq/Cv0mQjkrdoVerHodTWwgDnsJ/4gk
+lFfxf4YR/mxyKcMX35klA2MjEUhD3uwsJkw6B3jkhO1HdmDo8ToZuEtieFyNOnaS
+NyZfPtLvHCAlYXNFis6LVJ3HaZyskYtLDVTso4lLhInJJby5STe9yuVjbELEhUj4
+Ip0s6XwiuYJNFkOU2kN320bjZZZ18UPyw4X8dcmOH9ikKuAQVwKIb9H5N/G+pVdI
+1mErZ6h7zXJmpojtJObuHIE7ZVaugWKi9b7FdcjaagPdJx5kWW0dsFjKYjJFDVPh
+2WNfu1XfFQ/Pot5bOnryse0mFF7sxoPXXeDxU2JiRJ/bTOP0QYqbXLlRzHwbWlMv
+iBpEF1FgRhbvRk3/B3bnsxK7VC9qPXj9vOHIwhUh55l1NHn+UFx/b0xddXxYn+kk
+crbjESIvsCl+TFmmzlC4lL+SQj3Z/8rZieGLvhHtdOFEbpOphH03mNfa8o8XcxOz
+Wb/anNlJ4cPQjhEHT4Rubgn+1H7YTOdE9kmpt2fHjiM4eiXkJa5eZ9PAjW/Nvbs4
+MmObYV1G5yGOXGXJCcR/Vg0tRpQOnYTXUqfE6Lky+dbhDIr5fN2CEepxtisVb/Dr
+FSHSVgB9euC7t2va2YyFlbvK7sooldY/yuIwJPJWb6yhPXh4JgHY2ZMJkZRsGx2B
+xRhHRIbjWPjF45Zp7vKx7HIiVk3Xd5iHKQY/DFfMGYizXbH3hs30JN1GTKN+JtdX
+aD9EZe87yKH85Q5/5Yh8z4sAHQ9QVRbCUr8ppRWDyvozyFIFRpHCd4/tt0ChMfQH
+WiZ/qlg1tIv9VVrFX83won3EELsmL0eXd9PhP4zddXHkeMdNT4ZD5hH+emKLza7v
+CqXQ8Jg0t6ze192DaZZo7k6Nk42KArzabYdgh9gGrcSp2mFum9OlR5N83aCE+70c
+jjS8/6CDewVnvipK3cDV5QOozFpnkp9mhOi3Qoqso8InJrro5WS5aFfyoJ4uXPJi
+hDE2zUeOeT6Obahx3eW72Kz4YFDY2x8QSgbSiguA3CwOmpb9M3pzVsw1YwWaBPHh
+F7kmBPp9f7JD/NBA0T+O7pdfigEIAzxtpEAwozahH5RH+1ZgU75npa+A2STdlend
+QSuhjcjZKJm9zC9m0wy9HFDEDjz4i7d/Dn5pvbyk9XdTz4KQkfrQOxazh7/8cP7Y
+nwr2pl/qVIZdUsqeU8SHjX//x3OlP1AUpdzEzer9CIbwq/8WaIVWuFOJ5Ptmf7pX
+sZBcQBPDVeBz+BOywWpcSTDWs5Yt2diukaskyKTYVAaXqxm3ufWGGTj0wBrAuWj8
+6ldy6pyHb+IzlvMExrF/rj7rKtH9hw0qbhJDEOCFsnoSaMs8kidbdVkImsOaDZAK
+N8m+7b9D2jJfAlm/pVbEF/W300ZB79WqlVLm63/4nR65U3qdWl3HLuWc9BDJ9iSv
+wKcDJusJ73b79kDX0Qt8NimdoaYcF6vP9GrB1Q/oXclkN1usAqXV/osjSdSJC0r7
+UTIzR54+BFp88LgjhZZYAuLHeanHa3ms/bicWaO+96/Gxq3cpTtnggXVIH32OlTo
+l6Dac4+JHx/qSJ7KrG4jiF7m1TpQDZ87p3hKKHC/qW3+19Za3hnMWEZ2/P7CrRY/
+iBalXO/bCc06Sj89fRgNpZFEvL4GrJv7Z+ngQPAR0OP3+31PKNQvpc9e3iwDaMO3
+Tc1oMiOceGO74+zG/NEOl84hG8Rm1NfzR8R9mNm19Y7dIpYMW2r5ScFSCkewnswM
+D/hD7r/Cg7VvvEcaScOwP2B0VsGl1dGfGUOf0Ows7nXTfNz9u+XXu+d/0Rk5Zu1L
+c08LjWWqnNZYyG3aDSdPzyNuyn6UU/r6FS/ClEqqyPBGO6pHzwsaddtj8bgmocJY
+Ec2InVOVHcKjtrDXuqd4Gu2/oCcI0oFt7sH7dk1OFdZzsIuXWVF8w0BXZjkzGS0E
+pEaeYcQds82MB1/TFPR+XpM7kgjgoI6aZsD6UiCPPKaGs1ZzC2ExWtJtIiqXr+vC
+jcGjOnfacp+gRTl6kSj9c2xVkISLeI4Xl2lprxAaor4LUY6P6WulaAEkK5Fl47Di
+w+piwtRj6EbBxp9o2qpzkzuGznAKtSTuHdebnaX3Ob2PIb01EYR9GA0fy0zJYX5T
+/dC/zSjxYB2iWx4SVduWPmXgDXtg8aJ/MRDYV5GILJ7h+5qj17d/YdAHpY4nRDEn
+QhtUgjGi4Aq3LuzQRY53+eiBGK5IAavyc3gjBkOC68kggbzk3E4aWgHUWFrmGxs2
+LWnt3PuTSRtelTUAAxvQckfolfFe39SzwXjvMpoWjcpWx0o76/L74oijfH8KJDHz
+ryFMXBxMFJtF3GFbATf8YhXOaIL4JfsEIFB7mQMmqiASueNEKeRttWOcMjborcDa
+OBbHgTE53pe+4hHnVfFqNnZ1TbDF1s+nqaqzhGBzGw9JJHPtlwS0zKHsihQpPRVR
+OkMrs8Joun3groIxBCWePYNGzOYAHXJ/274ms3Z37aqfm5aG9Fa6RFS8QC2e/V/T
+RJW0ydQKZ8ttW64kVX3tkWheH4GDLlaclP2fYah/YU0iMm9MojXJLNUnfwV16ghP
+rRDuDPKPeBCdFGxDSHgMCqlBg0K+RDVuDEtcNaCKpe66IODPFgymMdIV9ysfcL+w
+DXa8VYvnbazQpEBeVA6392yy7QcGl7m2offCAbxxVTHKxn4FqiYvT7Pk4Zx7k68d
+IxfO6/4vY48lCyaCYqRZuLpzOiOsl0+OsgoW87GoOIHISnc63zO+IcXbe9y0WoEs
+Zq67J6uV6YLp5tQ5E0pCqjIA/8VZ4ribTcmGyOQ78IYqr8mew+8eAuhHCu7ivcK8
+YwHLf7/X08y0JutMMWvpRUGcs61bmYiuTRvTgodX8D3eAZnCS4fjY9K4Jyjl7Yc6
+aeYyaGdbhBL6822bt4+y+hRxaywPCz85cO666Jlgr4tHsUAQyyWRtVveTqTZZFG7
+FjsSdMyTy1miZUeWDhV01aOHKt6O+EgZ05BTGamyqcFV4U+bPsMdoWMTWMt5KduY
+EdYhVb0U3kZyZjbGWbfgZsoKygnyt1h0RjDwaIyRbTT4R7Zty2nGs4BhlkPzEqKK
+gZapuoUIfUJFfZH37HHg8mnT2NlPeB/yC7jU54z8IDZtJxZhpqZkn8xoZN4wEFaA
+CxzawPdTMZmfFjoAEwhojZcjLOnuf4oGOQRzIPpxjDieAe1HUtl/aIBesj74FDqR
+892zpPvdVfGjhak7uHyoYlMVDGgn2U2Ep+u4K4fBMQTeL3O8wWOHQCxfCB1egjf2
+aLWqprYzNFcU3qiOW+0DpWcfe7Xxeb29JHPbd8T6zIvMmpyEWHcTMHqJ4Ochrjnw
+ZyLi30RJ4bK51TthcvJcHqkN3pfmbTqoXp7YWEWhDTve+hCJAoaZjIuXmYtBxVJH
+2mLV5gLon4T+lunP95s6sxnSomhnVPAdJ4VhzQI1RRFrWvY1zuwHBCStf8mAmY/u
+bpAZpPvTVF1+zeCczXVcXmWz/MB2VLgpFQyEMBVz0cn0PutGReXp8MrKNq0vlINR
+caJey6VKd0zX1dekjnofRIBj7wbsIIzTH/+E59CbS3J/p9fLJJGouItRqVOjT1k0
+FAg7WbYN5wbX7hRrS0NtoljRils6nRXSVUvP+NWHQCBM/5Ghxg6+Z4ppbD4EUjVU
+zo8vTaqN6uyhfgGKwZueCSUUw5+M1TyD6DiIcfAuiPUpnJ+u7H+pztM49vb03VkD
+BU+6rks6fF7QVSQtGF5TwMQEo2lw9eQmwryt9QQpCbnEn/6CF7V6wVP4URkMeEnO
+sN9s63gXdyivToOrLptsCYmT+yXpb+kaFzVdCsLRpqMIDc96ycfkzmX//YbOBiDk
+aQ/irixCqH8PVRPDj3W/hC/PzqZbQjlrMZ+651rF3jAhE/lUMvv2bWcdMaoFxBoY
+RDFB3l77l2jTWyhXz9ta0KqDRKLo9t3jdvnqwK4796xbLMVrOgIiB8yCx0sqrTHx
+0S2u+PvmEmSKbmYss4EcIQHLLuNKemvNmGfRjaD+kD+Y0vV7M3iApMAqBxVdQ/eM
+WYwyZoSBRxnNOWcJNdQBKCdGOZvzzULZiuzV18c6vLCnGBdvwdNLq+tIUT72IJ9+
+fq5IOuAs69nxb7/IWZqMjyK/np4y6b8XkbvkJ/0dqtStDeGgbyYyfsWnztUUZ3AL
+EmdQFs0Ok9eZTY5CLP2a3UrI+tMt2nRTNarmGXLw82M6Qg5z4lct2plOBS6eDB2c
+CpP5ByF0UL0A0R+zpGsOWYg4S+LdXGZs4ovuok9ZV4Fip5h/fPIBsEkWaxzyujMk
+lXLHnOwzMgtgSQW2BoFah6owroFxm1LnSfrie5/esDelPVLFJ7mdscPgLr7O7Thn
+/rGJ/5UFNJQbfJ2RyM1NUa38IM/hswJAIbnvck1Hk+Ye64JiSFsPeQW59Pr9KG1m
++se4rE2GOAdIR/bjwmfwdKV5kJV2ijmxPpX/OB+qrf7TcrNtwK3YS8GKcsFw6iRf
+JLvOv8X95pd7dIEH8f0oKnwSzpneOF5GJamATOFwWAS+qdFebckIomApiDGKwQur
+7h2RSHmNr9QV2yO0028OYS7ivxL1oSK+6CsB9E39ThEqu9gU7BUKbjd4cllKBE+e
+WPvqwyGHutogcmzehNnbholD7RgCOnSBD3o+sBIhvv+UVvcFzg2MFGedMhUzZ7cp
+UHdqXHltdGVhCvJcew6G5JWOcf7WBZj9t101ChSEFJRisqGsdjfv08U4hIVKWc9l
+PhE0FxwU0JYjdRL6JyMb4N9zZKEdPaecmT811wMIdsbGrkRSzzbdWG+sD2Mdsc1T
+/Zp3R7m+Y0bCmsYncGrH+ueA7CmDAMBHrRGF7xuNG7i1owxEs/raJRg2Ure1jqig
+NjqXncdmpGL8XXo+uNdnYge5N0Xyxr60L9Tkpyl8L5DtfDWhIVL0tVrxHoDKTzGk
+jSIZ/KC47qQRNDWkNWfIdvj2lsL6kTyfYTGdrtxg96GyL1x2bPZ76WzNJT5JSHkX
+8uvhyXOvHx6H5XO37xJX9Ji+JowGGa2bNzo3NS/7iKXh+d2PhmP9bo+cv044v52F
+R24XYijTAqr4g89OyqPzPjRQRNcmNKYziozLxPfSjZ5ZMJmQipB5+MSM1UdFsi3h
++c2TRKoFTazfmxH1jPFbHdafc3Fybas7sd+2/F4zWvWxXb2SYQQzKdwF2ESeQT3Q
+taSLAFj7enp6UX+U6bSRtJTT7f+kIiYyslVdMDoP/Ygq38MHR004qRE8mrFfioeZ
+5FZPLBAykTLltzmRyY9+lNY0F6I/t2kv3rEUEua0mrePYUH6XsMZKIaIHgHxGSDS
+suMv8EBPp/ygEPW3VeBPT941Re7z6uH/585fVICfzy/RBs+w7RyxPrT/NwFCvQ6V
+wjyadH3VioMTjoPjy6UzRsvDZQ2pWy47IJUuGQ4+cxfik5F6Aqv2jpuOgL1aQC4J
+N/l9udjI1lWN9ZAfPJ4cYi3KFTnLnR1qp+gDCc4rn7u3wQsThHMN9Gzz/4n/zNsH
+dFDZNm/Ti/B6DN81Lb7EZwCeD878QXmzAbQe5JVa1GVmMp1e/5LAh+/2xf6NXCFb
+IwaQNGRho2xy/2VEvsHVQaZyQ0wfiUW9cuKGE7LHev+UaTUMDzGO/JtMnZyNIYRD
+LVT9mEMygrM2F9+uqJdoMcBu94lXqI0MLtq9w4o+eoMF0KdS1r+93w8a38+QJBKR
+hK/znmEXEVeCj1wdTsRWPPjF/usbGqzq5XFz4YOrd5HVbO9ABy2I7G7z+BFPg7qF
+0jDc2Ld+lJSUHbID10yRw1Bo2PW2nG1pIxSq2ZoJjCfFlmvQNeOn9Aqdov3ZuhF1
+Q5yClS2kaIT7Acld0hCn+A0o73icac6O0v7ZZw0tQxYfrWC/ZiqlKm2UOdPE6aFT
+y+YHqKAVYXjKKspc/54LzelkfG/B9Qr+TvjeqhKAlbnmSUw/zeYNRKwAUiVtxFK+
+HzyzyDLZbYlWxekqbf2RTWHaDJM/59k2PJrWPAAWZcwhKRRf/GVYk8D9NcoRJ+WV
+tPEbVq2TGkVEq/8c67TGRdmC8fCsz804YYPsnCSgZswqdZEfJgQIe/RBYnldyM7B
+9XWSOwshuc2mvIhRPbpOTHQy0ADIwu8IMa/emmTJ681Kx8C1lj0oi88TWjYMK7DE
+MG9zMRdstRRgbOy8UPoTwBWq92ADC/JryqDISX1XWqd7tK5rjsbicpGsZ4j3ZBsH
+wXgTEF13paJ0tVyrwbhFtjjQ+NbB8oJQeN7/ceF9qsIMfCnXRprh5VCNVBIVAIkv
+kKGnw4B+0BIYuGfwWgjEgSpAOuZ9PUq4U4kTXCY+zIiPPlniz0X1BLcwecMehlq6
+7UxWCOGD0I8XnPOEffdu8q+LvSAiXA8pn/q7WGCR+4QQ9HoPYVu3ahe9gkIjJxU/
+HNSFXBcAfvXseb1a75lseco4vZE1fRAfwAjtOBQZan7hUfQKf/hDnIjCAJRcjyUt
+KikPXPGRakBr/aE9kJJFxGKd/dy84n+8EIEXOYgu04uUBiERCmEpwiwEuMnwbCwz
+iuPEGNdlPP5UP1iC7Pf42ofyXIUQD8lLnhcGL7vpQUavPkey/naKpb5CtIy8JKjD
+VFq+mcWcgG9TJe80JnN7VzckoObZkr1idKmvrLiaDITibT+U4X0mnXqqjowEk2jn
+ymBfnHXy4M1yoUf+uI/emmr+Q4b+STLjMM97szcTdzlNpFlqPc1RVIv+Cg28Scy/
+JHIp5VvvbyWDEHsnsfG5lutho3i/sDmUipryfvN6CAwB+naEP5S+ESQ6tLP3iPRo
+B7kpLPie9Dz+/72ConDrsXp4xpLTJ0PiCfIP3TRgf572jQKkpQcSKtbdLXEGgaKX
+dx6yYOWWliG0tXTQZEqSv+uzDRfLRoBLftzm38n0BpoYL7MYu24oiL8AZiNwdXy6
+/MfTOW/FqgiVGG4WxXR23pUp2hLAEiKn3fDnfks2+wt8JmERjZ1JuFnasa6heDcF
+nmjvLV9+4W8Jwv17wsT33DRAznnb4kpTlVg0oYy6wxMw9QYjIAZBewd2welxUO19
+vdSOmz4DH1QukVfmzS/4/1TWOkCJ+5mNI9gycA9slZD4xRoc6O1WAeg6XDj/HGwL
+izJWLViPxSsGS9aQkEAhxKIkq6DdtNqy44QK4j5dvq5uQfBG+v2wbIDSSsv1auWF
+Xy9wRY6jRTizVTAsqCAURqR/UP9I1s4wvXxXyX5ZDmdf0+OWESG8Bf4cCvvSlx+4
+9GLC+Ci8IHHdpTnWAuU0mWi0eGCz1rbUGqpbxsXD/MXdKjGFiMNohskO4n3LoWkA
+wVeW5Xgrcbn3EWHXmddk54HYusnIRpo3FRICysTy5wbHlaz905iMsksT+o873Kp5
+ShQJ7hPiB9cP2CZOTASeTFIIypRJD0/W3OLXpKvoGUoyQOpQzk3sjkaaXhO879YR
+qu6JHyqYvXDIyO9/lcty8rJ9Tomql/GaPau4JLR2dO3utDPjPC1mBEuky6ESuNh2
+ipbyY5VGnTVdSlmYYgUGRW+q7ywmR14P4Sylny5u1dC7RvcDy1xAT3yFbFOTF/pW
+pXptlVq7jtk04uiqg5S7pQZQG6ou7tRXAbPbrJ9hl/6N9gJy8nNX81sLOLVtFcND
+cZQG2dH4wxdQR2zfkY5zTluZlmeHPTmYNUcBSIXLf2cNpuilWUxdLYBbqFpcKwQT
+X5XA81a3Pc3sh4UEqmpiNOjfAsHLyRzaVI8rPKUR2kjArIXWnYLu7dvgOD+II2sm
+Kt5BGLNu+ewwUnbF+qqwc7gTCnwAIeb61RuABzaoaX/XoBfKY5A+RlIMZ6R+ols6
+UEt1dlZ0l866nzl3O8LJE8jQQzsoatIzqEW80B/pMAlgVv/QmNPJtMTuyuccHpkx
+caZy/8r5L5xpvEzzn1UHZH5uu8YbNz4d8qAOewTp7uJUZWgoqJEIbCPAjbI9UTK9
+/WfKefuyP4HQP23lGOxQBtxnCgI5hKbL6GFrLS0iQPieGjiMowagf+TRPV740+Rr
+wmwTWnRmoq1A24Pvt5GizmPmTmOqex7T2CTv6JYcARnam0w0mb6o0XOD/8PlEzBP
+aIpceRx2hvL4uPqM4m6IA4tTbgW0w/+vxPgM89WDsQ4Ycla/f8uxf7bIIylVDDfw
+c35Q7EchbCIxQbtvr9w5rglwxSyu5PNTyLkLjnFMmTMEQ1JbMaP2oPf4YjE8uA+v
+bhdkc31GiL7DJRyklb3fSjQlmv7Q5mNaSZvAQqrlw8PrpXbwshnyYBl3poD2HGO1
+fUwWtI06myxa2XhwG4k7ZkUoExJ2nor9uPAAMKi3RxVmuUZQ3USYdI2xzxUc/goq
+LOWSRos80itymaNtljEHkZ9yLaK0twSY6h8I+ehwkZDuHf3QjH/ReYT77SX0Bh/l
+a8BkD9qflnQnjPjXfbY1SV6q/Lr5gduBp9qQvt19GmxTc/DwcSh8GDyrJ4elqmED
+j9B/1nsjBnaDXe0jY8iqE0g16399HMzZ+Thg9xJqqOlkMHwGLNLwJ2/x10tDz6+L
+jlck1oK6lDkBl3DkEPMJ9YwSt6iOIb9JR60Cltqs4+vphT+UFxBdht4d9+Q/3e+P
+7Q/zbtsOKO5oKOHLZxyET4VCN1+/aSCJxuEbzMi+PIPdRBIyQ43YLzvVcAGJkOaS
+aXYuQ9KdF5Yo0tJOFdxR60Fte3rbtGXvuj/1wYlCSACCoVgi6MN2n5sgEbU5h1W0
+n39msajtMInTSd1luIdGwl/NoFCiRJxo73PMPxgEw3O7nNj5jcNuQr0box9rRJW7
+oDrqRfo8neF1tFifKyuKr5mTHFNUtonmePVav0IaPDYW9TWy78TyGGV3xebbz4Uv
+JI1uP1V6LquObUMd9lFeoerf0Bx/aKC2Ju7wWW6yqI7zgK/1EIBFC+DtwmcJoMKW
+e/mXYrxzRJRRixYqbOlXTMvNPeTGvJMwHbXM8v4kRAjRZ6Q7EsFREuO7FaMO9XjL
+Vbrw+C8GWdGfG7W6EsDuskjxQgFc5QJRZLjkq6ewu5Nx22e0qGz0igED3zqblT/9
+Gc2cDqAjzeq7blBXN51veOpi+u36Mp7fCa5KmQ85LX405Pa6qBGTqvuHpX0PXrjc
+wM4IcfiuU3lm3uEeYeFV5pAyv1dmuyghdalYlxNl5qJ4m2EjRyQsVM2lOy1GBrag
+epKD990QvauzzGEbjy8hZAVFq4H/azcuC7BK/gGL8OowsBNrRhPCOtXwn99MQZ5u
+37JR4iSRZunHQQPkck1WuR49FV+UPbw42pHhuOW0Q8dkWD3ZEZ1BSt7Z/maXL09Y
+DaPgHz8LeWLbYL5ezb+s8kMUqsMcq5LR37DEYhHPHdv5hun/F/zXQAgqvySSmVdy
+xMtkaiMWc5Iey/fBhtMJtJkDTNSwkR05woHnnZUEKrCNvZz8fbrzDRA5T9EDLyUM
+xzIZ0ua0SQGUA+sK0o2rJkNbjGmqHklLg1BWy5QaCuk9d19h5V0XAWRfJ4UlYpyt
+Uwb8iPsTFlQN/2uVR0z8gCzHS3/xyRORaMBI/pCtqExyt6Zvy3RyL2WMY4ldvGPp
+UWi6Cok+vN26CenuCwakckQjv9gz4I8feiW07YuGq9PzWg1c2ZVt7+2rhOlASp8+
+IBlGn8KRL/UmOT0xaqW7HkOQo2Ytldt9QZEpgqXWMNkQxqQptLRbZbRUDFRXnVIJ
+YuxIEzuINw6no/MAkU4Sr76ID6Rc5RiNW7coQurs2riIHu2PmDDWRb/A2uI0UNfL
++XnMFXEYceQA9jWi0GIyRsFoj/Zv4J6Ycmugiw3ZWCimXlTx5oyqy3zMkEJEITWl
+XIJJCZEprXDHXFC8UyScdv1PeNLdhaY1NJvSt1tH4hw4zRf6ZgZfVhBK0a+ygq68
+UlOC+rd7oosyGIR1j5mIh9qG8o/LGRi4GXBDQGf+5vVVMNyfG4KszCjY0gZDeVwz
+X8FYtTRqDl7jv6SGLirY6WsobGfpVd6vc/02v5Y89GlnsdiYAHU1u7GK2mf6O0yb
+6Q+B2RLvUlz3zqf13w/K3kaTVEdxJfCMqAA+Fyk3FQ7vkgQeBkhJJRMgGL+C078X
+IUdY6t2UMxTExoi0y/vHPXnvdjC0u2WJW23YDv/aYc4CVGyW1E/AXGPBe7u4sdri
+M9MIEdFKgzNQgW3phIg50edtCAO/+SXaHnlxhNJQfTqIGyerLxrYoy/XUG7miowq
+MLhvH+i/NSMLfd3qGW82ZDyQP+e7FO62wvowZjDy5tPCmE9tqbUlM9CbVTPB89rD
+6XO6G5EbclM1T8H0lbxrQtq1eMVwfp5cVD2BKVOSwsRvF5OPvMqeTgXZ4ef3Zz6U
+Es2gpluvtvL/sE7hQzvsqWM1EihffxsHh4Qncmf2exN26b7X8z8ZWVrC2LAGs9Su
+39WUsLiDRxgmjRBYfoUXUNIwyVvL8BhHX+JZp4I7XIuOK5xeS5biaUoDx1WNxhBd
+Pb7qKKuNMz9MGxT7Y2ZvphRPjikB5b4W7H9uSOYBGOthliCjy4kdy5TBEk6sEhDY
+cbaUetSEWv7xUoDZdTAlM3B5IJcxPjL+1qXSia2sheecB/S9bS6xxVyVmcGekkdF
+G5/3avhX8MYoOmmkOJn4TK2H4HC+VWxn7SM6EYy3R+uJ7CiSc7sSvhVebWRZ0OlB
+rrcBMb2WBCJTOR6mZEsqBXlvFH2qrT6NqzLvIO7tstydIfjZvLlC/nw/9trjXy4f
+zNZsIzN6SWsrz6aeodDHkK5lYLwvTuSPHOLWZxD+GExJ2HcOzpVG7Pg3RfE8MWlt
+FUrBLI3TWS3Yjd33KE9llWFJlDDE90RzIVeH+9PCDCQAQb0N0YmiCwXlOXliRzXW
+9ZVoVPTPTnFO9NqU45i3Y/9AJAPG6ONoTb/51tIblfmd/kO3OGcHTHblI/DC7HmI
+pNRjf1f2rCxaOiYTEAOtNzjW1gS4dHYS1yh/speR0KU6/bIgTxemNswk8EX9emSK
+AJR4jnXCozLND6IZVBQJYx03oXF6kJhq0jBB/bMu1mXcs7QZfHm5TufNwlWMUWkz
+iFutny+2XRk8lTFVUV+xWRKWxxtKT2Cje0+o6hr2DL+NdqbaTMTVT9IP1Maf+DqC
+kgG+P4JypbQyQrNrD/LP1tvJNFLEUa84uPHkrysKvc+xwwJUOHLLUP713UJR8+ZU
+51DQ34VjKBmDfYRSe7w3z2j5m+BeorOIkWXGi1WcODez/yMdO7TZqeboMXwFJY4w
+o0MhwWFtqDSrienuTWtyBctXd+AOTQ938NeEBwNGA9oGw461dVVfV3s9WbrZRsmz
+PFyRGIjjyRIYImedvj6uIRfua8ykfSTL0PIIvTQcVSvb0yNADGMgTz6Dp/aQzdQG
+WRcjnOokQqTGZLKpH42zED9JQv+LpHGLdCbvcz3OrwE0qDzm1ZxvD2wunXEVK4Sv
+5hFNR5H0EJa3QJOy/Bpa9zw4hLS/PO0VDwwcEOj8m0v0QnfkQJCgHXrEq3TwefVC
+4p3jb+/Tga542PCcauwJAgbxp8GiIt7GgpdOAMexV67kdXEmZjgYP7svM2WW+6/B
+6eEGLR6ye7V5D6RwGIMqyKavWPld54FFCUaYl4cTbjPwb7UVL5nvkad05t8HXxJd
+r1Q9Mm2MbfPcm6fGw6nXRoeeshES6uFwyJ6oCgbfbg+GBAffifhcIlUG+3b4IFGD
+czms1AeVl5Hs/rXVb+W5wEQSHyKYR/749tcF68Sho/OsplFw5Ddam9XqpZlC1XHw
+JRdVnVFwarQyIH6T/LKp0FJVwnXwCPaCz6wGUXQ0VESwXvfN4N30ZExt0MrXU48d
+XhEUcJMqeYLf5L4A9EfiYT/T0W0MGI+ErXJfEL0kNtjU3D8tfUHd0gfaYPxmWQQj
+I/j4ZWrG6Kc4pU4TVYuv9ToGfP2NvHtgg6xq2/TRfCoTivdXsaWl+VM3laUIoaq8
+Qh7spis0EI0k6UBI2nEwe4Bk4tK5T/k24c0XemQo/ehI9xH4G7lgk2YUrpfZLmWN
+pQWgYH6BMCTxh3ZiqRdEvJvSwPIzCmZ8zeaI0TcBE2a1peYayJpvkkWAPQqbMtjT
+BiHCi/wi98mFF9MbdIQbz7TQHF03c9M5DRFAsrteRadlojzW7TzyMw20DM2yi72C
+2ZHx1aOaHKHbl+7NJDz8MjAVzAGNUIQbugmuHlVLqh1aJUC04p+4jW1wUgSPb3wG
+5uaiM0NtGUM2detwj9PyhE10TuUw9zeLhN/rZgX50i2VficCHjiI4Sf+r9ocjpt2
+wpewqBMnTyzLvQ4NmTBRSVMmlKO6Xy7wwIfos/aYk3dLXG977QVXaVQF5PE07jTT
+fryf/RpK1y1wDJuYmCX3AzxlIfKQKgnLGE+I+vyYplLwSuEnUfRPtVidm3SgES69
+e7MGTE3/Kh59GqWqi0EIqRFDhSuBNwlOxDqGI9b5dmAcOJdETWwaTkjnxM5uApwZ
+PS284HfJ2uy9GZNaNJ4Zit7wED4pbe+UfbUnLxuCaBAucIJM/0taYU6ZEUZ9DfWX
+q88NM8uYDPi+zKYVqK78dAvV9Kbfvrvq/5aTIclJsu/j9xSJi7tsZPWqUxFBYAKr
+ZEdHv38vNPhBTkK52BbLKOHp4DfaAVMMm6Gda4TllioINvY/2uAYjrYgJi6h6lO3
+OLdfc6DvZCJa4Vca+3ouQeos1ZP7LlVfsn877aB7hTjPZaJxmVz2JlX6rAfS7OO+
+KK3CqB//xGYq/PUzMZgTQbNfqCndN51RvF7CuwlDoGiXXniZF3vGMWdxcs1S6Gjh
+Lz0eDDhi4EF4gHJ2jbhnlsfHZX6nBxxfS6Jd8+gNHGph01k2+5ZKLqFlyYzj3LMY
+K66VB2eJoenrJIWYeilC+pExWedJ9PgqKs7NkDokBELWc+j5WrtE3xWt9dz/Sbzk
+0jyLE0oa3HGC5a1uE3KHfwLXrAA6FYvCoVB5MGgmLC4GT4RYQDYb8tsuVfHEuSva
+ksdTrMI/SfOwm0hrDFo7yE/SLROWPoAC33Fy3S0pNSn/LJNYzdtwzFX1OSGSDRsw
+XtBEHZJ27Wc+4iNyxharDy92rcMn7GuUrQJgG6yLQ0GRulc/yRRKuedaO9WKWnxd
+eKGeVFd8skewt8yJ9umiTq0s0p9GjPHB1KIXt07g5mN58rRWgZu9V3JsSBKbD8oA
+kw6YworSvKtfEVTewOr5UjmC8umrbTvtkY3836b6cQ7kmb9sL0pwDXtRGu8dZAA/
+fS5dD2RySHLOzOXrwspXVw6ILgSMorYlfqwAyIdxr42E3+Ad8MKZfh3rBZ6E9GAe
+YzPkV6z3kmLCTq6CoXgoLIkFx3XY5stT8luTQ/6NR7ATacsgdxd84w7h5mIhxvKj
+UBvkGENTpdHtpNkMy8uqRdRhi9IcOtM9tDIa7lwj2vsYIZYcWUx8eUfQAPAd80v7
+ELiRMu/jrN3QjMXR1IbfOplpaTlSi4fNI+HODQAvAPjSVZYUWfroAvVyu3qF0WMu
+L5fbWFbzv/T329A/M4GQA3L7b0ghq5WnxB/O5lKr09av81hF/5C8EbaVTqUGmRuq
+Axbbvaqrb5+JxFhL5h5gc9xj4WP9BE1revi8G3EYk6yLn/NIMNDcoK2CRhjSbdIt
+W/6hIz9KZygeJ7ji72PIhUNVFJuP4BqK+A03EBpuY9ABFocH965iFHDvwUQtZG3y
+aJ6PUdxMFpdjcCzET0yeby2GgVCncRbyw128mATsQLvmmaiAqwSuX1bCHK6oR8qO
+gAALEFRQxh/tyEhc4JR9qH1QTxPQOqaCH62bMHznWnv3wRX75M88lI6hvTUXQK3v
+V5nch/xvVonGjGlpVV4IZcjRKt1TijlPQZMUS2Q/IJih6Zlq86Zf9zoantzAyxEb
+/TB/f1+Ip4KAXpv+Auv+mmnvn9UlKAxoLy9Kc1yT/9RmESKAPbkGpRGTlJj8gnbe
+DLI6KFhMxM5Z7VzblcwnKW+f4O5c+EW1mkEjXj8N857Kb+GIgEwizKMNhasghoDT
+i27DZA+TfpfO2c1oiPGyKKsJOP2a1iGX+C1YI6Sv8pDyHShSjokFlMHDM8Im02yq
+jV/ZD8a0Y8a2SmJQX5leqDy+3kUZ2jEaatRXqUZ7OUtG7xZ/SLFtDXXVz1fUMu1O
+/woPynScDTTYSon2w7eGxGBpMlVou4jyBUHk8t2PqTdu173b+Dp2NwpwLD6G1M3E
+e0DYhjdjhQsMAIGPMBzd7h1VWrCXGDQaLpwGHczvDPeWNyHsIArQR/2FcBeF3wE3
+K2T3iJU98ACIRAcFS1HaBzOv2oywTuvjFhtmrCoZzYIfNMFeV7jtAq+ObA7byA1h
+Vz15k5Jqo1YonlGLhmAsH0TEEbVZPK0CT0r985pq5C7mfugYzafKyfHFdBu78A8i
+9H2qPeP3iTwre+3Vw/qdvi7Zx7uxcUwBUHDrVB/FzXMwcsJjxaXT8q9gDpe6A8gG
+CjjfXepapOfogb1yb2BPgkk58EdR6Xvzzoa+lhgzHdK7fdBeU1J1ZXdMM6eo29rG
+XXjLGeL4FLej8pRBAesWzlgutAsvidVyKqtxN4ah+dm8SPnI42RmDKjl9asXzuKq
+Qb5uPCMLOuloFhDaVozO0jPUkUzZcniwzWS4TfkE3iofSMHLqXT5nlU6hVfo2ylj
+vygE03Enbam1kDwoXCs7e0LfPpcdoTIw8XWmMMBlKnF85YOGktUucEm/yVGz6qB5
+kub7immQXXzOwOj0n5h6HfIQyANc5d5ASeKzfM1Kh9vQnZcuo0Q0+pSGSMEbCkC1
+y1FHRQRaIoZGRzOfdNU/rvueaB2JVm/gtDmE6zPuo8VXxU5XuayLH3sw7S6Fagy6
+RpWpexpLoIvjuHFp3L0bddAPJKCMKOyqbpcrevdM6G0eO7e84Dfke1qfQPoGAPtU
+gq2AHZvqAa/5YQOwLneJUnt6f0njSCZACpf8cKWxgZYozB7k9jyHdZi0Tocdkpfx
+Aw3v4wsjUqRPIUBmdeQFSe0EqQzQaIoCiV4zfGMV3dKLWwclLLTErmwDNvswKP9V
+IfZb/diKps4I0D2ZOXSgx0A73kqU1diH7xBJrju9HkuQmZe4z8UaZoQdSAneBXWG
+sD+FDVlYH9zR0ggL9/v3Jh9WzN30E7Q3+YAN70BsYog5LuamMxfa2hFQYPL4WQ07
+jdriZ9v4qUxil1JP02jKqcaQI8IHJCMm3ZFW+SyWKkoNIAsJO+wgl0BEbgrhYmJ8
+G2pqP/m933e+z/oNNJH8EXC5Z27wDZYSvZBkRdaaN36jF1Hg3oonv29laWBPAw9T
+FkMeQCbLJpAoO0sz9rgn1AcB2UQDbkkVVlJAeQmW5K23ImnlVfpaUgIO70ozkoKR
+Fe55kfsQX6jCN/fTtrpb7/D2GcfMA/mAL7dv53mtM/pzxeNzFTHH14f0FExVwX/3
+shjAm8pDx15G3geFntcUSci6d6/DiwO7FCc1s3PPkRC8ZGEkMz8GFF3NE6z1G1/1
+rR/F8tQ8dw0o7vOHibz5tLsrwnQjz9J2zJaw+sTcUv/PrvEBC16vvgIXqoLMI8J6
+w5RjktQIWy3JOb9gkUKpGv6LFupimwvFPBn/U5CQn+PAZZkaeSABEMrRiYOSfLKx
+OnrT8va5epDvYU/44/Kmhz0Vhp4ratxSxbQoSJOIW2BUxOS/LibA//9S74IzCF14
+1Tc4vBvGhrDktbx+vn+r7Q7LMgpdZoafG4NicS+01jBtUDdroxC3Sgk1znPzu6uX
+Uo4E0O1oNYSHnWYLB/C0j/JX2j25rSQsDFpFVdvfxsZiLAZEqcLGkEP0jCLCQiUW
+yCu6nSsV47Ctp0YkYKCyKyr9nTugWwj/jKKJaiVdKq9rtOxIOf6WNcesEY3O+KUh
+wwGdzk1KyGvqw9NlvBNc7zMDoSy6mD3pnNEkJsl4XR5akkTlyzyu0BrbhdINEkjL
+nC/u3Bz4ojj9745PvEa7v98T1LrtQbB19wtPCpOefnmvsmqdMbLmmmgdEe/FuREE
+uYkcznIKQFV3rel8gn6+o0NYHDyxJ+eB4cXUB0u5XNxHsRlE+bJ09McpO0/re+u9
+qHd+vQXHLL2Qf7IqKBhr5RyQm9Spcn6X74rkShhE/cvsfAbjVGy1BND84nn22NSV
+9iUl8AVF21Ow2WenczVkG8AdaDSdY8ibnOHETdt/btCfF/a8oPYFcnY3kHcAn0JV
+C9Wfn8E6UUTuoLnexZnWumoOmp4fTz29J1DYiSxMlVSe4zsxA7MthI6zsemjVGM4
+pLxGQor+NZ6C669b9pbNW42zhOCTgksUvsOi/+w/15m6+c+jgxkSxoIHiWcnmHmp
+CJuKgWyK5/9hdm1uS/ZXa/TVLDWzfPTHXwE07ovE0pPNupnDTPs2pRoMSoANPufB
+lMRTBjZ1olU+EpLDGUreoJCOE8Ppl6shItXfyDnbYsuUtunRB5D5VAMbyybPnZNC
+yzCTEhkmXSSmlAsLWy/zOpCKh/nymSG49ZL/3PEb87+kez5K9TS1TL4LzOrWnRIJ
+dZFCzgg47dg5HtzJSEmP1P57kJBjperElxxZVmu7wAG2emqBW1jNaeUkciUYCWWg
+UHSwO3fGVPpv5f1YIcA9zxMRGvFZ1h8Tlj7jauPrmW3t+Y2AQXOXSVKNH/YLgtD1
++Mji7PAlzs+3wr7cbI6HKvN0oPosX0YR74J91BOHta0cvpMCDUyW/5qzEC6oxl+Q
+i3XvPItuL7N3NBBebaFnPk5qX7za9+WjqEKVotQhl5QJfwo9fpGuS0/C63iWmxBO
+cGSPZll8aYb50VZ9VDCVI87HZyE530BouV49LmnuuIbAGGW5bJOW1IG+1ZCiOLfH
+ARlrHRi3JsoBnx8I5SkhjnX/kW8SL02jmJvqxsq/Xb+ZQyd8UrCLwnJPWzqPPogt
+EgRB8EYI8az9fHy/qaW3bqRK4QJ5Wrlt/ikM6Ay8sroAamVbcVQiyk7ppyIaxFhV
+2sKr0NSTg+VlH3wLPvlo/QuZ/jOd+iErs5d+4AXO+UoZdiO7GC0KiRdWe0mcUHSV
+sqFXwJxzleuu1ZwEjQFny7XtVW6SaiigdjhJCCmpb9Sfqa99cGAx0YtAvdETZ6pp
+DFxD74AJPPpmGCphu8DAEz2c0fQQs/7lPJUlGr+YE4RrLRcF0fQVEMP0QM4oFKqh
+JQus8zB0I36eTbL7uWJlv3MoqMWIRXtWkzMCAwM+DZ65zCOKH20O+sUadqoa5pEH
+ZzjQIwOxh4O82GzbZU14xE3qYG79qPoa7O7CemFy/+JkZxfTpyCvBWg0We4gwU2y
+/P12J/l/L/THpBMISYJCZK5lc4b3GkVhHSwGrvjQ6yPFeOg7wP78/vaXiEBZszCp
+CF/m09K9o2A8Fs1Ozrx/Z6QoyLkNw0A059Tb5BO0ZYWJdnmhpYPPa7Qgj99qAsvO
+NT39MClyxOM2KGn2D1YWzW+pxnsqQzhCNL2raN33Cai17LiqI3CTPI/gDvLSbjjk
+xKWe1plZpOcg/rWzq7zN5GBHoAJSZrl/yTHzTHNkPtG3lpxASaHzNsZxM+yidC+h
+Yo9TLPQaa5efX22m5A2TVRwfj5/rUWJ0SoTFzqfcRcowRENhrr6vaJ1Txe/24rCM
+j2O2IozrAjMxdBIw+b5JecU044OmohPnd8t3eKWFMVpihYuLmSbRGmNbedCX9ElE
+zbh7gOl0eKtBmlAKwwbKo2tQ8OxtlDGo3i0k3G8hsCqcAAOy31aapQqLzPBaKcVu
+Xgu7r/DI4RLF8QI1zR1yhKaBU7906ayeVnpC68wXiISbgK+0lOMG5eGbaDVjR924
+lJZ7ssKfM97Ku0wlE+CMD9Q6vE9CITzapz/J28PgKbEZNwcojH6nKQslwW7GODOX
+O/giw3gUd+7i7y8fFdq6Qmt95X6G48Qo8BRStQA4RY8OB55iMePiGa3wW5raVvzL
+hNP1UIHblT3E9JRerEH4IAOCk9sCYlrMulkJQByTQcgZZxUWiVN3QA8zNg9E0xnu
+UduhMPzqVJBJWXVY/w6LBj4zuGkFsmjijLHxBj5YhgVhxTxnDB/GjFawFiKzKR6j
+Ul+wp0EnVRjlpryqTkyrl3rbc1abrURyOMhl9f4FUXgFNkmEe/oTY5RzSVKqcAOT
+5BgtjeuPMUqhP8ATK/St0Fk0i3dTHClMxuaZWLhQA+IndJysxLv7lBEhGuYSl/QH
+7xis9+ZS2OGmBVhq3+I8rYAwyeeE1zuFr3xOKCsF3lZj3UwcnacFWYyhowGijYOP
+Nwvni/Y233318eEaveJweRpuG98VMcZkFfrb6tYgvdRyiI2xLRrfHedkf6McRzzV
+T/33IZNDg99+6KPBJeZ5MuXBcT+F/QPN23vLYVLcuWvhyg41ImhQdVerZUzfHP9G
+sFSrX1SKjZZ9UEXKE2XXpYO8cJX5HqZx3i8KbFcI7yjE88c+3yEfgTpYZNtRsu/Q
+qnta8KN/CeHFLQbxOlk7bAewx7QF5jQ1BdRYgQdauFxl0xfuSHTvAeIIRtGqeGsR
+BusIJPWgMuSWdIN1pOeZ9VDsjm3Lk5yZ6ANxyEFwsvJQe/tlwYXMV/DkNOJfPWa7
+xGl2n6aMBfMnSOxjSGduD5VDx1wSU33WPzlTuGPCMZOT7ZTWQ7KxFkh6/b+O8eya
+Ny4bmt/+MYJ17l+K547kwnHBBlJrpLvb+3fzMF2s2xY4VJ+zMokx1WMyYl6H0QqE
+02nZVYzMqhhl5Xdrxc55orGSoSA0o7HLgeRawNNLDrP+R7DBL6zc8nkWX1N5xoAP
+LEyoMPss1psMxokQ0yrGXCmhudrR6fDnEvfDMnVCmtiSz9pN2x0fxhGVPeUtXkyp
+XUkwo/0pal7IE+l/gIRJIxXlxjQvwC824zTa0RyEKKSVnpahhu3W7YzKgPksnMxq
+Sx9CPTB0Q0/tsqz9Qw7vy2N9jM+XcWbOOrzGnNXKtPWLb41sabwzWprcj++tjHq5
+WlA9hl8jjflE6Sggl0q+dbGMVHexLyGudtl3w4AHYl6OqeCBeBW5F5helWa4tsbD
+1w2Ibhkk1Wjrx7QHoe2OC7RvGs0sOyg7fair0l4dMuryGAZ/hd49MuLOqs6pYD9J
+ukRHwwMPDpZTheea5HOJUtKBvsyieOz2JjKSADOOYCUZK1ol4DMPbVl0e5UV/IbZ
+VndbrNtiyLpRoJ6OtHqSpOp02wjZNuUqqTs+Vz8pk0F8U3Rvt+BAGLBnDDPbiRSG
+5qrJcd0y3Bx1u9PsLl1q/E/ZP/DSL9FC64GXNJw66gSabUHB90Ix/xLmu88O5iPa
+nJ5KU3HXE72QZbrE2KbErCNy2xGv7r1evkiyeR5ETHz+Jkofwta5puV7KqC/E5S6
+SIXSSiMYBEqvPOG6i1hFXd981Syj4+k39onMWxnOIZf/Fqt34NUffgdbj3fegnw4
+5pG2cZreE7oRkXItGrYPf55fQGJybIQkdYRaTtj7fEVfpNO1RRGDJMY1k8Skoluw
+XT1ZpnuK0r0Rkms2ur6wjDSaRnJnCYMHDfFVkV0TsefaHxE0u8NYjoYfpp5qEnGy
+G2MZMrZkf7sf1b2BWB3UKBcytw8ZUAmxmaOwwtE/vv6I0htRUIFYMse/jT+FRMRS
+fc2h3IZNrc92QqfzoKFglRpw7XCUmEalYGhKK61xfFzvFI/CWrquSafx/XhOSMVL
+P1eqvdzR8mHXIB42xWrzV/fGgGV5Y3UamELk9IKZoSYgtepy/1ctVLOCVhTLXTWG
+aIR9RKGqf5P5Mo5//Kud9xjei7oDLCqXkyqvrm7l+Cwdyf3KUog+pe6cE2xUQMeF
+KH0phfBRwilXZS4plysM9OhVqOO/5Zx4veuEUx/mbL5p91tB6jDubcZgSdut596d
+c3ACqnlc7N0rINZOJ640hXiLChv6H7PvbDiXX1Nt0pRawy1ikHLtGVtdEdInVR0n
+lVnuvRNlkkF7ZFSmzMnKkB63Gco3kYy54+eB1bR8VvqDvtl/9eCOc4Y8YBo9OVsW
+D0ltd61D+OIw0yc5zWsXTZWtG/hLl+KFfKgbgU0c4IfzjxtA+38pH/9mS5h9XIbr
+16UTh6e3xZ4DjWaLxyUJXThODCiKBR8irkeTLwsGTcfyR4dde1t9JXOzpaRWfN3I
+s64VK9C4dYDnQ+kfN3MZXAQoA1Ko1nTiSjBMDx54ShfETX/WjKrUtLMFDoi+wnNW
+9Bkx+6rBgjxOhQQw4pRGI/H3GZtpMm9SIEddEa299mJpMfuhAleRN3+yW0V9V9wv
+SOVeE+kbAlfIHT2YHnGwNS5vUl9qtBGpbeFl2Nu0TVteyTJo96ihXgg2Fbsxq8OE
+YHHjsbVJE4ZjntXuCeFh23S72xXyMvB+O5IvzLgTPPBnmMmm357OREUIKC89Qn9K
+hWufOiS4Xtfec2Xyrr6pP3AcCq4Yn41kGuqlARN+/o+HbGpqWOCZB7pcGz6tkb0Y
+J8vNdKWt13Jc0E+XqwD5CXeiWv3cZVIwPfs42NQaucsPSPrtAl/dZPnyS1WBNDGq
+AwdVIhTXomvhVVRoCXteau0rt24JG2P36KdkkbShIxqWE6CFvGtnkp9PcIO3vz0y
+Wus59VQlFTP/vWOi4miY7n9HY8ClSG/OVl8Trwmm2EBL+6jYHTPW3/2PsGCEzbny
+vMIgO3gRkS/nIEY9Z8jI5/kdxB4IJ+uFSCrpaWFyqcEvJTfXC2p8ZQCm4JIvBWVl
+sSyQyDNgZ2HAsjKqQO0pS/ov1r+x83yW1TTgkDvEvx0U8SIz2N10tlBQ4dY6NTPD
+umtgKxKgoJtAG27u7jUoSN8MQIcL+nRPVSTzx+OnptomtIx0kOmTEKs3gyL2dKm4
+HPz4FfqsUhewxZI6ScFaKCjKTVIB0mEd/nfzFwE2HTx3mSYqe5k8rs/MDSW8mXdB
+8XQwt1bJEqeaU2Cteut+gKXyEXJ3ZmWFM/97VPOPrzHHIHIoNz2NnwL7Z7l0bHZB
+dbAIqwXA2qDeoEbLwx6NBbLM+PMwP27iSoWbFke3CP8rztX+2ySbXjgDhy2lloGg
+afy8C3WjZwCvBTEQn2BtGQPlK0xXkemjy+XrMKBr4Xrix8dnyYmFUUprjKOmjX2O
+5QNxn0oLSql6ociyD3dbi0qAoT0jn/uYr5NT4jFb6SzYeh/qv6WrviTFoud1pY9T
+fQnaJb//l2jXOiRnztevDp+pIYC3g6p0xAM2m1FPDwIjdfJpJfFvyMCASykvR6Mp
+nZ2jS38Xr37juP/9pGhUfajjk43iJUTRcZarxcCM4fQrhkqjb7fs+jiEazzD05rz
+XKg+ddM5VKRDYGlGd4Vaw9N3/5cXce90SvdZCTbvO2Fl7bb+fjC3FFoYKpj8Sqxq
+rEJUpYsDhJD2N++mxiGaGgMwhRW8+6Y7j+y4Mtq+egnfobuAjrjL3r3l0NXkrM+K
+5XRQl3V88APnYZMVJou76uFUtYNN31sKIFuBbGfSl6fANBI4cArTfajLakNpQVe/
+Yhr4F3sZ5cY5nNkNNwwRiiFq8viyACfkMUO5BPMga2b3rHrpLWYhoEYIBOoakUPC
+24UimWPGRbin6NsMufo4psA9bkWx5oCEnAeDrux0xbZ4o4eCXGfqymM1lpRULyVF
+3mod1Laf3a4g3LN5Q7sBpll/UEWQh0C3gW7sdRMMjSgZDtX3EAyepVeEGAFvOfQW
+JmMhKKcp9cEUG/gNwPdkaCAlB283Qic5KadFFvDSL4oFV8yCaPcGtd7yiQ978bNE
+qp6Kw1C9esZ798+WWhX8YDIRP1k+JqS8Aaff/Ts9ZvgoFC57AdDBi3nOMR54l0hQ
+a8ls0PC28u6PpyYC+CtiDH/ruwGz3asC+X1yZpnTTgCXQZ6HYZWhMyjBTBV1T483
+nd89OARVwQ0VJH8XBw2QW3dSdzjiFZHqMq/IeKGHw5buoR2VulO+n7+QLLLo8/uC
+1JT0Lew56pWYhAtEZ44Ah6QDapOMWoHKgB/nD5kCVJvJKLIjOpRDsD3CVhpT1j17
+2nRvWL8esNU8z4WrMiehFAnQhYAxs+aAS5viFrLK5QDHsX8ogenxuC7UstO+W6BT
+JhqrblFOthZ9lSm+IiPPAn4Pa7cK49Di1jZWQK8k+S/KD+4MWN3GJCFzPds0ht+5
+sbe+qvxm9BSXzznUsFGCzaeO07I6CzFKQmuhlIBPHnZ4QHErejESvJr25pMrmh63
+gm6TTB8AFV3XoUkh7ErWELhsM63k7DAQcSUS+sNpVzAt4KgL6LnqRXsBIkPGinJ/
+g3A2YQgl/oYB5p/HMUoKhz1AwKgG367+zMrIFRfSossYjFpk+Xp7kaaNp8bEc6Jr
+YY8o5r4T3c3ebo6ukaZ089KHCxq2WBZDkgEONVX67gza1C1n8exnhNdKFm5NI3KO
+EHTr01htsRwMZPGFYiHpYBh7UnDKZ+aNEB735Smn7u2KCTx3NEmwk10q42Ln70tk
+zpWUmIxsBr50zuhB+Wf1LR9Uo1PziY4VTe9BE3a3NKarFW7bRCZUDc+67qkN3qwZ
+lZmsXPlTIe/DygKhuT2+V0t3pa1MnYM8J5kWFs3ppQZhrHH+3BHKaJoMhTMmqgMP
+BRWKMj0d4PV1AEgQWeBT8PhRaE5LjrutyydJCRtPdeAV+xfd7yYCK+rLmOv5Hxtl
+dewbMqlhqPSgYXjnH9UeRt9+Zu/6SJmN01CHREjRQRw1Ghg6QLH5K0XCcE9KIfpY
+6LkEihk6w997FVBJmobwEkWREOtkOTrTzKJjYVxWvVzibDTgVQgJEeSOb13Gfmse
+HFH1HYj0hi6/nbpadGgt4YWxln9S+CGRGTUlGR/lxncHNwu0v/B5LCayYP09ipsp
+qVa2eXTDlXT35l+sLw4OygLnen3mOkcmajgHBOgKfCIcwoPu8NRatXxjTqK/wSWY
+6khIDZ7Nq2srzvc/tzIudhJEMYqkA9xql11soREoJtGeulaSeUt1w1TzChWZwRqf
+gxy7Io30fyaEn5lRPxOVxdEsAoMasCntGfdu5MTfs8SKMvSqydlkGp0APr+zbTSY
+v1DfjlRm01v2KLYhhoTf6c+TyZZBKfYGsYctvK7KkN32PNO9lD7ah2kwTUWv/rLq
+qheLbn80gVL31+YwkjJad3zt75UTUf37NnvrfJKWXEI6vAErGrCVKBYI7VNpxY43
+ckda2tRKRJch4d46M7Mi6i4jR2u3t39Ic7c2gzh/UatURfAaMkkpJwqKEMcnkbPF
+CgUcYqx6eFvOwVgLjC3ZxJJyyjTOHbfI3O5DImCLxujqVgyppus+jZeIlLPtuzoR
+tupC+tCIAxjuptQp/2l23wX7vQlQ7bVb0DYhcp6J3Er/un9/fCTIWBwzA3zl/k0M
+O1bGIswWh2Zih4cL0PKoQ04c+e1IpxY2k/6GBRbC1hFBD60qM3hcf9Sb/1akBgC1
+azKYSEi1WWayLRcO75zdCPFrCi1lldJAL7wo6Ks5Oxh+kfAWcGQSBh2/uUG2pbP+
+6IaWfB68Mce23MRmh91gJehRLF3fwaxBc/eQ7I9U9PhuO1WE148xZwIlkDpXHqov
+1I19JKIGv+jb90KNhmEH73EfehfQBlda6/FTiFaWyvFOws0B3BRQ0PAW5rJBX/Ky
+SM46SpLhIC56W5LuYgJoYxJYBi7YgdWuVXyEsXqUgQNyOYkHJYzw8Cuv9md6/Alz
+1a5T0uJd+PeJS7fx+SH/7ABrs43pEIMJfFN8cP2rN8KVYNw6gqLQJPcXctXMz6a4
+xtd6vBuoWU5GaJUxvY9Nz705N9OkVbHnUc2dm2khCLcaUdIDzKTpP8mVMN9Jsxh0
++qSDMYDZAMrn2PcSQhai9rnCB5if64XRXgW42sS9C17Gos0YUVOJEaKxdq0ptjKw
+BxN6v6PQaLKrltN4pyz0RuJTuR8H6BAfUjRe+gC4Jp/SsemXGKiKbZ6z3a5D8OH6
+9Fhehcr6EwzEjD0KqBDGZlgI+PxgB1My7UbG7JBtM9bVKIIIm3AQJZM4MMwsZRfX
+VzRYbvWGemSM1ZEGo8c190rXtmkbaa5RR3DNZnCBWBVXFtLqy3u114cf5zdVZWqR
++yrbK4hoLiwL3e564AKMkgX5sl6PsHBvLuir9C+F3LO5FCVDtcgoGg5Cc2FiPrih
+RZtIIWl81187cxkm+M4LNUhFCtFIu4aqjB5GdAoneaeUfgXepQF3GL+g5+QbQ3Yv
+yICIH90AsaejBRfpiIhQX194iptM8HkpSR2+cmG9xEQf8FvAZVNCkkSicM2W7VdO
+cFBFmlLPSefFPUjrh1RzFaV6cNjT+Af6sqe+cK9HeKtMmF39sB7404XJAKOWqfCB
+4j0PHr2ZOJ/rlEP6az4+ejDE5ZQX39LB8MyRbdl0Rlm0O85SRKKwt8U6q8M1AmX0
+rfYgSghi/C8dn+lNn2zZXuNGxy5dctvpMFcjQk+oj8qSBOhiPT9G2u3XP60ZDDQT
+sQqk8ZrCGdKcDBmVEynu0pTwYd22eDQdrwaPZUuWg4CscYcw79jLcw68rQMhdMcE
+x1uIYS+9o9WmjlZl98nOvqAkwjzCAKv9o47gfCIXhl4PJnpsYhn94c4lDW2baKA4
+zQOe/f17TN8PrblQbIfjzKWGBnq8MZbi7wagBITO2L3RYHsf2CvrxOv/7kN4KA4z
+YA2U0mD7zGTHqbcuViaz1Sm+zZroY9kaJMhcqmhoASN4xWdYJBe4hGsNBLz6zltn
+5UQJgYw8ol8YMVbqxZL4KTIDhOmPkEUZP7iNtrcXKUfcwfOJgzIrsNnlizSrV6TQ
+RJWSQwN0RQVMB7348BmYgh3kCaw46tIenfxbmCPmWefoMJmjzk4HssHXjB5RBV/F
+IFTI9FK/3RVCAKY9RWcotrCVLIgHU86TjRy6p1r5DrpRRXXOaMifvyMVKE/MKrXc
+yVF37Uho3/wMUUmEK0ErUn0jz+jx3aEgAYOjLS6cCRqjNrH+5fYqvHa4XqTMGN9W
+XSuhKbXTnG78ASizU9/b/WfDjMuOmZ/InQ59qnG8gW2uu4Czdb38Hl3/EM7j94lM
+1EFyVaY4Gb/QQcl9X7gbrIC5F8tR1G0/OV/i/hFtwbKxCp1AxCn0ULTIVrMtzmDL
+EDI2W8oXKo7I7bUYuP1SYpB/spzbFBhOUE3OSMJa29Jwx0PDHADBSY/IiPGyke1O
+FeH5qPDxpbAtocqWvw2IvKlumzEQ524h4FEQa1l1ev0k9HlfS2JjsuZMScDzbLZy
+H5ykA70GnKGb94r7TYZBpbitiLovgFsGF1QBdnS2kCzeioOaBwTlLYH5jSwIbniJ
+XKA/4lrh4+Oui37uhjJCKz4wHIJHsdbXnSvuTRi+2sMNa5k1QCPJOqcULIz8KJbC
+8HfxzD/fkXQq2ByRIGmAqL0iEUyR9EaoE7l6SpCGohde44rFrYf5OY95sKvw53bW
+Q712f36KJh4Vb64rZU91kKyfw9icW1ViClWtSSNPAKxXoU8uZMJ5w6ol6VtYgmDX
+syO5D77YZdoSHefq7dWCithua7JaZRPXFsaD2DTNty+9MZBBGb0meHjqeb0cJ/6z
+55uPT3d4WZiPbetCxOLwKftc/156/GBFm7pajhvHUt3B4z3rERYHaf8upT5HvwH6
+BuRNft5VgebYjrJk25Rl/8nw2yA8NPiAcJNIJru9LR4wvTwofLOH0gSMvye1JEcV
+nkcB+HfSrTCBxkXcRx0Zqr5QSJ8LKWgMjl/kFIhPS+IVrsMP4aJ5PKIXJge7svI8
+gR3r8KwQC296Pl3HwgvwyaD6fMcqVBzce0jE1+L5gbCKW1TY4ugRu6zLYP2lYL2O
+ZoxVPXrHIG7rrNHd+HHydDLh8XyiSZ/F4sLODrgGPnNNp4iJAxBbaTDW+LBGsJ8l
+ukYmj1IVp1xVmt4uoGzBr/m/txXfgxTrrn5VMEj055XaV63Zk87fo0vd3ml6gjIV
+mRw09xfXU/pI3Xu3gLfzDAJUmDZSCprpdKP9pi6NwYDpTh2G+7J4kBJ2w1Y0nod3
+Lmy+hABg92/OcnO5b4T6ib5UHAnLOGNP8dxagrQeJHr2jAsIZAc44D2nqkCSLPTi
+6I+2ylgLNjSLGRs5ab2Y+s1TnbiYh3jQsjiZL4bH+i+eD1j8bP2g+G3qRwVGnnK5
+/h/8bjNubZ4E2OIK4/j3pjYqbSpDOwg1otexkPLE5RlapKmSRRUObQrAEBIw3GDN
+JKem4041DSwr8YbEVQLROI4wqsxCLvEhR2jzWZIpFhuL/ylSyr/Uzd0Nr0/lMA7G
+JtjbggnJaJm0jzdO6FUcqK8Y0XhdkA2d2fws+DxXSPKwxZBfdLcFLzXwBunXZUWO
+k28ekngAT92Mlnsuk7RJ2m8XH12hAqyNLMIlj+8zSlUjXLstoyKQVgPhgNqSbBhV
+L4kkFBQ12fR1zgIJPdt6y8wTNuBlMsLE6oO4t4h9d41e8HxQXLACFGDkZA6bnflc
+Lyw/3oDbdL73yrO64rxgzkbjcwn2prJd9xT9/MOgzPFSuPwWVU7lCwKOhMip7/Ys
+kxVTbMzvE0H4pPX3vvFwq5K+/YaoqpNWKQMDvAGBwX2+byIf87mM2jkBe2w7tQxl
+gJPCKhoCm1vY8gVvrlm/D6/uiJ0pHi/bQWDaSz9EzDCnbBzSeNNSJY0TUxL+Iv/M
+RphPsiCDU6q0XtgufN11vZF47i4prTGIMIUtXW4oFgDcx2Gah/Z6njld1Ly7bnlb
+m7Gw0+U/7Fei6VWRnB0mW6Ue0e5BybvQVCGSCg9WnN7k5TVFmndDvTmhupD7W2hf
+4gdFEvGfQIuyx3zzs++OsD3iHl0j1btB5FLYFaR/1eaf269M66PnpKX5K3bhu9cT
+5DjbXFcwsK4QJfuxa/5QSh7GCvqYeCpI78wdspYmKeSN5IP6A45iJRZsQloXRd8e
+IDQCHCkzOnmYinOrowGLPI/uNmuczkCBKj0dqwfEtC/sRdLD6r5UOi/lL3ZCCz+g
+1h7eyksoeLpktm7QvxNCf7gwDPoP+unHv94DMfyILSxbd7a2jsiVoIx0Mdj+qgoV
+GS5U95t6NV+5tp+QOqq/WZqT/JX3iFsGov11Rg4QNG55azphLXkpPU9o4o7gMCLq
+yKH6pPgmoDizK8RelFhsPcX7/raDrVG0J4xU/AOMLpYwpuDT04nWqxMflFNXEqSh
+NLRtrjgbaL7vU35zzsiSdFkLacgbr2EcWoazXKiCjurzfh4S9ezpSd9vN3TPpTU+
+mGMTdnnqo3/YhtA0GfFBxHM35Xz2UQOwvrl7koWF3mBwAF5uYINRsEjyH/o5YifT
+s3RjexaE2YbhwT714bNLIclVZE13eAQqwBh8/RdM/KVCBJ05nMKUo3d2nQny63eh
+0Fr7ny7/hszVq0bUJcRf9r6RvNkynsrKqxi+O3gdt84jgBS4KCFSiDY0Q4HPKjuM
+/HPkU/2vNjMc4DJiIpPmSWZY0jVhwkWPxlG0giYYzoAysObsitAbPQX70zh5nvuw
+3Etr3d8emxzl/dytptD9uvkzRTGoU/qrPwxPURdpoDhUVSx04S6Y5fOqTngA1BE4
++DcimTSFnjuSsjXpHZwiCutiDvEWFdb9cVyx/vQ2X/fOmXEiNcM4kGEnAPyG2OeW
+yeeCM6SH1jJb/jQi3fOk3PFbxzi1qmRHOzucgMk+XAkv+5FUhsrRW/cwHMcbV01u
+VEVuW5ZtAef4/e7N6ScdRSDyiObOINei+x4o18NYxFlbOY/2Iqc+yDl6+fmF2PN5
+hZJoVst+JuWD4lQ72OK7tV7XG+qVnAH3IcLAxvZcoxkDrecgIgChgmBt7GxK5p4l
+uoHdDwmTi6yZidolrB5G2GpXJ4+FKF/+ZJLkdQv5iEA1+fudqoZtxkjf1+9pY3ua
+lpk6JellFwavFa8Uc8EYft6ML2W7UhML8gmGHegHUDlnf9wplLdqQideoEMGUsFM
+2vDoHGvEN9mVf2v1DwsFJlM9fPIqAXvKTBYxdoZLNBN1iS/pzSQYabzpjp0mcUpU
+Cy/T0w9XbHe+0NYH0ETqT/PSRhAEBZQmElIob2lDgMolCljM5ChrLoZ0XVJ2eL47
+0T1VXTaneh9fqXaXc/OYUm1np3SGP0NcCcxI5UQtLs+fp5EYV3SozIUh1zSuP4UC
+jsbJgRStQsq3OrBrJE/oB09oIv7s64fv8wFXgaqkO2GVAbLxYCLQxGnrt3kLpfp3
+ewMVWDc8B24mPX1kFw8Nzc+KJuxg1hUp7pWfFWMlYibr/rig5of4o/Oj8FP65lKd
+vYcbnBtS1Lf9mdPk6hqVJ2ZqCu/Kumhyss2sho6x/XIIkcc6+wLjrxsaLVoCVlqV
+F5Cz+t6+fo4G4yYG+qMVlYwxKu2gXvBJEfgxckmoPqFwzHEGcTHmGYiUS03BW2UD
+1mil1ve/H08FJwVQrxWuUOcSzHB34pWEd4xPnoOb2zmWUNxArmAzYMLIb936MyfP
+6sPQ3wlhb4PqL5KB60GXXK0m5IsYfnCfiik5W7aDUwOHdP3yVSEY+myKtXCNeU94
++PQl9H54JzYk1MJanVLc7Bla5IkYkX9jte9mSOSuTmq+go7W/2lG6krCuzcuY064
+SKIq66MYqp6j3oMC2mEDbvRXF9NYQCb5naNE3pR2zohflHcXFGeTx8S/ZQL0ta0v
+39V4+G0/hH7x6neXwtjenIKpPlIpko/0vF00l2ZhO+PtCqHEF57nkeFiBxV/y5Br
+14dqD2EzfS+Kznn6vLX0v2FWMKJyjhIePf35QugzsiyLYQ9vZPy07Z4rVpo1I1Ba
+VYN2X9QckRyG8/RlZFB9R858niQKcwWtMJIfi0Y6UlSsQ0Gqmocc3atA9tN8jWvM
+5Od2LMnky5JTBYgJ5WM3GEgYKCTMZBXbOZSP/WxkZLYrxLouxvMAEEwKpbELjOpt
+t5ltQwIGYQecXF6Wb0xnrOLqbnl+7jS6RKbTsQ7WDoJ0NtmXpVe5v3V/H3poMd4R
+t5o+RajX4kDKAVVmMwPf6YK7qWLyShDxga0Q3L6YUSc+tfQEh3ABwyPRAP97ucsc
+aWr58vlJKiIJ7yqSwRuUJ77iPmXuwEXj+nuB2TmaxPwaLyTafBNvZELrUurtfgnr
+NvoBQ7ZRF/iBWQY9W7VXBuW/SOcBdL1Esl3KKP/XXoQCfN3d3VAS1wyMNhLjg+GH
+2T9P5KU1SAZUQdTyqGGUKfeXdoMgxx4rcyxmefoFOwp8olksPZG1uiuHUdzqHSpC
++ueE+Iv+IRbdd+WQpoKv9v3D7dOXsayAoFus19nkGCatQQKNqWNzQsHRoAdvqLOg
+JgVduYJQgzjNolozW+JBtrSrkTe2FbSoavDtcV/UxavHhFmTxU1ep1v4aoFCqGN+
+R8ErNZuVqnoAwQYWP1eBluDW64V/mpr4SEsqUTNTAnix/SWEO+yNMOMGlHFYoXVZ
+nHCEPHqugy5MXjz7kGEgqAHUVDnhoJA7xEVEOpjiBoca9Jx+ObulHiQeA3CLKatD
+WKreY6EYc0a3g1CJMPnb77iYg0jL1AqzMwZHK0t82BhjZ8ok9Ah80tinG8W/c4bu
+f0zKMNd1pcy6cE3qDSwFWLcd5x0Foxw8lTE7PTLkZR1Pzvvog57g1qJH4xiHRgkV
+HFymVXUF+CfiNXbcna9Tt72Q0385nC/lvXMGiRS04pXzM7PdqMYYW2PVE9HlQe3r
+bBkTR1OPW7riNwK08jMsMqPjVJYRI8MO/W1XQILiHruYSLgpBerimKUf0xWQ70gw
+elaiAKYlSdtijFUOHCzKHr4TBXACwOfbmtHrKT+EQxkNE3/vmkkx5rfcCMxzaPDL
+OtdpsEYH0gYGg7Df41Q5WwEmpvPDTkPAjNeIbtOEQQNxrWYhpsRabKsLBZnMB26D
+fM6A/bRH7tNfgTaZCYrao95c/DNH/T15O1CQ7N7rSsiJMl2sqjLnmZx7rs9+I0Xv
+rGZHs52P7x3sVfqg6/ijEFGL/TZt64yEhf084JdoS2+n8iNLDZHHPnyXrfzRnLUX
+v08aYiwF2qbp1zK2iiBTpTeQ35Qyw81lvv15Xa4Vyy0ONDEyZuu8KBJ5eo9pVtJO
+/vDvR5G42X2KK+xfv5ofo5GZostckenMqEA5BDIgZ1aUlAyPSHab9ZeK410/Cg6Z
+u5OTFSTvmQ1zY+VhBFD0H6ttNnVsRK96GtxbmsUtky4LqCFai0VF/AqV++Al1UsF
++/BgW4z8ZAPnFP9ifUV68VrTOZwItc1MO+NLhXFIZ9zO8Xix69hPPnyyQZ1SpOC5
+NhyD43CInRpIcxYF9oWYWC2Z+8M5hWEykpMBINLRq8Dr8gldElk4joxje3C425KI
+/ZvzafbptbLXaZ1CbWVpMljp/Q5YSCoLmYagR4y5TPdTO8qDwFDR4May5o0jTS74
+HpCSVuDFttDkoCGQTTLYYTuw95J88BzwpJQ2EooQMrMzj3GZ/6uaFQYM5Kl4oBae
+ocqE6mXkTU8zV0JYmi8aaQ7Vqz/USKK6BcRTgvT5YPfsh6MDgwhKE7cHAsPFDy4g
+HxwPxCF0838TO4ALw09KtvATDcR9AW4+jM+XlNW+0IxnwkKF0TIu3Q/cXPtlBJBj
+x8ESbpT9xqb6V7040u938n+yaemtTEm+JhxPCTvEVy2EKgmjYrx8Qb0lbCja/9mW
+8fVIUMVi6KtWn8+KBG5XE8hjU5ruJtXXxXB/ZlPWGrJyMQol7dp0BFylQRUFeIiC
+sHTxCNegNKUA8M7Za2OTRXKezmsmQmqfupiWtNNVdBH2F/AmNb/QNFf6roJf117u
+xjO/KTKHcw91EeNzXT1QpbmCO+Q7okdo0TRy0b9o9/RS5Mc5fTXAmVSFxp0b31nr
+ZedZUvW6e2lR36lniLCB1OAXiR62ZlnYAzQ9MfnaZkqrUMhYM5NFWCVYpgpaKc3Y
+t1rANYr6W10H+LlYLjGR6v6AJTyyRbLzCt27axMoiPnSjtjJfk6exDTKLG1dtg7A
+G/DgSCD9s5yb3DsL76ijVeFB0Qsy/7+8N4osOHOC3hymTa0RhoKdM1aNXEGRmMex
+tdc/R3iOAtYgHIRWkhkDh4CHDK5EA9zGTfkmJKAcawfRhY1uDrQBmjh8ghZEEdrC
+wZFjOaWIVFEJ+Oqb/LGoNhWVipT6Z23XBDDDnFeXFkDe2t5O2+fZCjuxeVUNkDQq
+uAfeIB7ZszKx/0Ypd2odXvMUzhCVbgxVH32FqvSuey1Ft+Xrd/GA3bOWjqDhRpC3
+wPPNNBbTzjMmqaF9sXRh1UQcl4s8JnTgyJ/NRJAWMsuiraICTDliUb7jf7gpMnjb
+MbnGl+58uPL9ftVzntCam9TzKEReAkfF5itAvMtIR8qxSy8ORhZQD+7AME+NByag
+GTY3tGleqjixuFkqekuW5e4XZ/P4p/WToJb/Lf+nOtotmSXMIvJeQ0oidKnOwFOS
+8Xwwrq0X+oAdIxE6TQWIwA/2l+d/q9oQL3dWBGm875YDGSR5TNQXEYY1e1wX5q4l
+Gn7+cgJxHuwasQfHHp1uPsvfBowDV1811ZzxtdQ2T7sxq81cw/51rpNA4wVGhd4q
+FzIClnZb8n9wt11Ylif3FOkTQktFlPZZPBWDgpgjec5HMruaaTcNMljtc9KYfsC5
+xZK90MCu/kgmQQfeJdDQIHaS5/rVVTTOn4mwNmNQkWGbVx9telI3iDrnAVeEYr37
+Ka2a0CbrNvAGHGtJ553RJ5DG2uX8IOPPI3UZCMJKvQdR8ZwDQ/DEQjWHcIsl6c3t
+MgQ4C9P/5EMPRQfIiWCSgUjzeGVjMJmnqUAD2XaxcQcrRtDtYfr2BPZylVScuMnl
+T+h6jgjMkABswzeNmF3TETuoMupiO7g6JSZhf7okmQwAGAwjx6K9xbH8dXCci+A+
+/3SwDvqYSSTG4y7CMJ+3nX7lNRqsgx6M62LOcTdDpBDA4fjnWRE4ecA1ENvY3o4P
+WvOM68l65eiFBpkcibZusurGL8IADDQ1p3QgUtEfA7WF1McBiQnI+q4bfj9SH/Be
+IeRH9o4nWtxP8FZ4/jiDqPnFitAh76SsrE5H5CQZijr7Q1sMcri5V+7XRuSuMkoI
+PooO7kiKAU8kVCimnpPLnYEFO+sPQb9VH8ivMlQ+sNz7k3sXQaZ6q+oRxIxu1pCk
+Aso1FuU+3tqntRXHaruc9eTpWEJ5txwcwj+vOV53COurS3du2B/jmCxmvnUc1OQP
+FwvMZCrd/nPpCKFm+4W4Y49Rj9f/5wak2Ua+PsNozUoaUXOC1e8dX+QGBExzF8m/
+QtzunVxf6+OzIkE2cDBN1mBQ1IpXelDBuxhU51MMGXn7u82fx+IP15tN9wO2uesr
+eNhHQk30knkQqdqD3dHf1s+kvY84BN0hlOr6BaRrOnyD8v2BgjkZVn9ugEUQp1Zb
+wKHGI1HIe0YuGEzGUUHlbeqnAzu41ptU/oi4Qgf7y/mPlSB0y5gHDIytjUFrvkqd
+uNUTuS+YyasCrNX6AcR0JKSoZPKp+VVjtLSgPZIDUlAmGyUsmZCGHdkbwE4qYmoO
+BBPrBleS9K1n/gaRhqlmcxYTqRuws7GIgOmdK5mUw78v438UnYcmLYKGp4KN/lqG
+r67KyMNvHUzfGJlivAMldpKPaRrUh/q4k+XPExhdVFsHTYfpqXMcqAvPb1ZvXZzK
+itpVkzl91NSVWPudvZi7z7VP4bCwS6D+lj9wMjelBX396NFhoOEwxYqc6CsM+vCX
+NaVN16nV3L/nceOvAbiuRGiaf4phHR/ZcNqJ7KW8JUnVzvhpARcQsA9wnOLz0BBS
+PCYCnU+Y0ApwRGRMVLL4G94L8obeHUaOf3DzuSu4bZPgx1nW8JrKkQCk6k60FNlY
+ttf7N3UOgaMPKzf6jCd6pyFinUU5wHLvod9WQimIx4t0hu6kGFZBGH2yEFVaDdWt
+IbsikvHXl3GQTORbDx1yz9KiJIIHqxBviXJf0NPnC1JY8wjpQ35Ltc7x2MH8tLqI
+yDxZd/U1edF47EUYZzbjesh0/y3CSOC1OnL32OPqLWWXlPHFzWEH2Pn3XzWaaEmV
+LJU2tmjiaU8JdMQhJN6qRPeM6nMiGPjJPfOTInAyhZLnzHWc9DKqzGg6NMflzuC4
+Qtdy0SGotuUQ0oijwmA0p4PsxOe9qyQI3g96FOzA+cb3cZX80L9M7qwXUnFHUjD+
+rubHIjOzS0h9x0lSIR+pxfFBzopPMa9oiIErWk1CZWslRlGDd5Mk81O/PIgUHA/h
+u9QELcXN36g+5wuRO6U/VkMS3aT18LV5ArSHCii+PqXNCyFVdAtI7EFNARlhyf8M
+uzSoda8JeTLs2BgwWy1hQL+aHKiGQcTuCfnzeHFI/AR+g2P181zNJbSbdqJf+TeY
+qpFjT70+vKBZoZjOUgn2jWWxm7AYiUlkRq1yo96xFEHjGHoJdf2nxDvikzHgg/KY
+FIi9EgmUydMwRdAKj5Yjrp/nCAqC+Jmgd6U/7wHuUsa1YgjGvgVmMYKO6vG+YMEZ
+Uz82oYlV5oR3Kg81p5orN3Cxk9p0T9qTxnE/WjUqAA83JxL892IjGcJRrOCCHttg
+eXprJBXGPt+aAVie0gTTi7p4hyg4X9Qr4vUlp4/Mn9RHwjNS48Zj6X1mFfYZ7fUA
+D7cEHtR9MZyE7g5H3LphiG9uZtX/XxggSXZO1HVOIM6FRlefR3Xyikrr4qwCquoD
+UX3yhe4ZGEalapDkUEXyrN3QqOcFA/dDJvwTNsqeqiI7JcowPBmtvqOWZX9DMmCQ
+DyEfxvWt8nduFh6uec4HZ8VL/Vj2stasRM9VBbC0vaJ50XarlEsjFcGg4R9GG9cL
+rbW2iJl08nWJe/0pBjr2rsPBHNZjifVQaJC/aCSkJk9sz0EJ8Qttn4U2lKpWOnSU
+RzkOvSHyJpUTdnQ9kWznh9NaVV1rwUE9zPaFPdZZ5fL42TvT7HAzx5D1LGkh5ZvB
+b5TBys8HEoeqXQuOLwYwrWTZZq4ck6CKNaNr/1HgCWQlhhXzdx8I+4yLPpAYiuI/
+mIft+blzQvUIyFTozxoUD/gfRdvhOx0KVxldso9LQ8c/xgxWFXEDDtAacY/k1Wgo
+2n8uIJzbxCqATgKryqbrlKedrfM9yYjJQZ9rBz32pABRGunUORlbN3c8t+BkoaQI
+eLh89Ny5XrcmgF5EShhx0Y8P3s5cThKwFwgJMcu/eKyFpaZc5gOXYKSp3sXMm47+
+G6JXAs2utmmZP//Jk37REjF19CADNhmZ7XMQtM1RxB19B7UquUE8BIi4cgnXjTMw
+Godiut7EQUfzfcpKtGol6EzEX7de0ABbh1IGs3+UXRIbongAKk8VbSWSdu/Ad99q
+M7vor8qL7ba5rzRrxTzrwZN2FQkET7J1YmUXOxruq+tHSok0NIzQTycJibaV+GpB
+O+NeA1aTCVarW6v8wPuQCBZZn9foNtpWWVyAU51YzPzHHZOkbAC9sx/Dq7DEbk56
+BGg3yCVXU6+ksDGvdMSEEUexqPGH82dtJbJJOgzG/PuGwnwF7Ba2hM/5lUdpuWI3
+b7VI82ejVAmw5Ntds1W+UmiRvQhi06tV4UT+OQQj+lnZyJhonb5mFeRKQR94Y1Oc
+q+b/dCcHamuGsZjfYKTBHKDa5UADHG//jArr7uKb5L4UCu+4eoiiBYrSsuW2WdTG
+uOgZc2VaBYe0/jj5dyCeurpK8YXYc3yZgR7WFizJZnUmQP1EHoj+Ijp2jx25kC6u
+hjpXiXjiK7PjZidgi+2cnZfw+NhGBO9asUOR5hAEyerDRcbmkqQRL59uvO4bKbMd
+fhZDjgg9L7N7SP23lK3GRRG+bwQ8kSNLvybrVvudir6ypMT1QJDkaFGTQz1oRSPi
+Iibx8mK465rvDwRzkmBFEC0q+BV3vk3NSMqnVxc4N7w2A8k3m7zjTbUV4AXr8Dih
+kfjrABdwVcidL1WY68BnHIGJf+5oZwojbm4KyMstnSOArbLgR3LyGajFWecjx2/8
+uesIZWIiQGMr2VAz9LK8OtBRWE5kRw/ZeMwesy+VMfDthEMKGqk03DsgIbIeip6Y
+5apoCAAlCFOU0k3siMjue+Jz2BvFXLSweTaOZPdYW9pZ0ATGGf1LB9OVSQsSc3Dn
+snjuwAiTUjWsQFTRMmXAl5go3KJYKGD/qnhuZRaxh1yqgcq/ZZIAOBCZ1ooXvgGZ
+kUfHJjktAC3u7YIH9vk/Yt41NqPp7KWLNR3298FRuSUHGWmEqa7SFWEJ7LdqjVdT
+WGOsk0TSewlRBIexdkbysfA+uFI5BljG9gaRGNaMkYPezPsFXoHGHcSMcH10wPR7
+425t1nkMkDh570fMQIoTZ3w0+hDVcgdESmtmOU0SW7YfG5AuTMRNQloC8ofMka8h
+P++6Fn/sLuUFfSJhVSZZIk94DDDMi+4xtCchGvkmOC0fvYJI47OpSy/SldxUvJCL
+mVO1GRxBMgsnh5bKb7TDgjH0Cdgo6Z6DNuIkQTxEJ+/dU2YvagCYIwLT61hfGjLF
+eEbwm2Z5L6Vz0LyoU9Z8Pk3lJQYCKwNqL7jJ/vIyuhADafn9RZZy/nv9lVvZTcfz
+aYsTw2SWUMLNePedYQySAjWwxUiyMWgL2VTYD5eWxU6Vm6C7M34KK7RkHW8Od/o9
+86kg7jITO3axkbD6OrVV/yloe2ChyA+Zfq0ucbzHYq8/4I588Qr5zjoqZKktjdWV
+6JZsqwJb0LNfvnE4ixAoOC3GzqyOLz8Z18ZQgsQk7qYFQEn/qO8yG8rFrA20930E
+DZgxu/KDtqbM0aWawGMjBvcQLhCvuvcUz9phJn/k3WpbkHPFawXUO/+dD3n9Wfdw
+SXFCzvESHYDPzNRQMfG9lQXgQ7r7xRXTft8Pt8BaSRbq8QLkOxfMUJ5kL9mk7oVZ
+959yE+M79lmAREoEAsoANdfgZAqNAxMIWFJVROJTHIOTt/Vsi4Y0/OzL+ev1PLlY
+aFezj2FBZWuyjExiVy9ekciif/9y+1iY/rJJ2C8v6n6mRmFN3wvPBFo/zoQsGuH3
+j9ZfxweEWkzcfFfXfBjeFKw4YFUq0yhIWezznfP+EKi5R5t/XbVq1xADZGXU/drm
+5tMNVKmQxNRC5NiEprgkYSDalozrDYg0g9rGCES5P3rHxZlfRnS8KvAQRmDDIVjr
+6yP+J8GRzm45+Me7OqXck4kLYDunV8HEFwd6GX9lsnEcIp/TvaC64dc1EM7I6UmU
+3YyKnsBoBjwb3DVCurnppfs+E5dOVxqXNEgomKUcLBnpMgpx0vEA8aDgDIoakrok
+8VWGro693R51Nz+Pok1TA+uLv7Al+YhS2yMPWRhnN58L9pp5b20Jo/C4MhlXAM6O
+JgMIUsIpb0//5hCMlu2vxJ7uIpt+aIWCzNBYVzBUpI6nA+iic3yRAoixuMkQ1Z2Z
+Z4eb/8y6cGcVGw4jRPLzvBMscBfMCGPUp5+knkjSsEDg4k9cYpsSaxbkRuXJqWsT
+JQ+EEpoAsYCJxYUZKixvEqdXRDgHBF78Kg2SDIjNIKGfRFxJVljyRxaGklK8adK4
+6CSvboQhQGCztPO776E65fDMJHnexBmFJVB3QI4lUkRS+ZOkzXt0kKW+Dv2knZmV
+WL4kSIsTH+yG3QE/77JL3FV4UT1Imhz9+3/1DsNpnuzvEZKwfvV/lTHAi0UXv90h
+83qX5T/6gWvU8/b5Fi2Uc4H1+JLeMZAVJrUYKTt4v7KjoMQBMwVoMhOWDMTjafvV
+VITZxx1Wx8U68M+RqAax/tq/WzIsaI7SVRDAdEDAs0gn57OVo4IdI0YD22ML6DX9
+FreTOaIiHZlLfuBd3bKkxRynZoK9a9hl7TsClbCOksDQwXpgroDk39MGlP+Nhkp8
+Lg2rhAigQmGWW2HS+IN97fKFJkGvdbmG7KBgoI9tuLB/XbxJAT/8g2nhEeUecyWB
+I0YpV9VU1Kf4o78JHo0J5Q6f0zWzZPAIo3k/qBCk/DVaJ9qpmxFNbuyAXiFqLCEy
+HvBuW9/yg/ivfaRZsz0Lw9xmSKzg52enD258fSNUkeUrwb3KeNOQuCOPlUQ5+YtS
+Z4694sywV70zWvA77/47e+DyvEP16cdhbnc0Qy868YN3SVTw5pk93G0VRWNZcAlG
+JkX631P+THAGBMTWsnBX94p99Dm2VY5RSVhw3uERPZX5vkSA7VYs8JS8FyY72b2J
+xV35dgG1hyJPzVi/EZKfpC4wTCP7FZ0zT8NojRVLS4z3/cKn+vjALqKs661sVEdY
+852tgTkIshG21Vi5KePvW8/+pMInkMOoCGmvUYHzeRrDVgddpmwNoGj1lTxIsskC
+Ao47t2z6pkrIRIF9AF0sytuiyWuea5m1web7A/Goq9NhuoVfowIu+9FaH+1phRQS
+/ssNg28HO2sA7HMLOlhYtZYqW4hOItwPjBarIIyPAvS2vcGyVc7VyZo3Se0mqAtn
+XisnHw2IVxFl+HHnz5tR96Alic78qiWFwJfPRwLet/WSk+quxV/Zka7B2nf628LQ
+qIpOkouOtUg1ZHnNh8AqQByr+xzhOJKFLfLF0t9M+VWViDY0RZ6GChGj5NMIpwk/
+XMz6jeUEfaFsCyL/wwRMcd94tyTi8XBGnrRojmgVFN6X4AixyishDBOI0ON6r+3V
+opM/7ZCjq3EzFELYVKjtXcgKD0sBCFFsmHrVUvn79262qPj76CYa4WwXrrVKm27y
+A73sT0jbbhZzBx/hW0j9X8SWNrf+eANBSZ41D1nYR5MMlwPtT/nnRE+/0HDLbVjo
+1sTtLNL5JACq6I3B3A6zpJQkpvoDv2uLOmv3xqOiIfV/cmxjPQbCatG/F443162I
+R5nNUetxiVSdn4J/hNNvATwHQsoiQjY9T54+h+8AP63ZQcyFQBDHvZNzX3j+0e2O
+D0CPvMbNb0WzumybM0Wp7ZWdvVFpW5DQFsh2wRjED0IPUsTG/a4MtbQiRBFKfaz9
+RJ1cBUXq7/nn6msrJJg4zo8ZAedgwbqPpLVpwu61JUE9VsVPRwIYssBZvY3P3LYf
+UBmP9+oxC3EkkmqEcqkrG4RnL7Qr8B8/+sElF0vS2q5v+mPBLRk/vx2AVIrZALX8
+RN4YO+HsMqPpn6WuL/kgvhRrM7xYRftiKPVEAztdgBBeetqanYWOKXPQCuzMkvFk
+iRpzsoFFQjPHL5zNxBjrHLmlhMAOvuqZwHdNEFe2ncOiynSiE9URyd+t+XASTXyP
+GH+x19vWrC70ywljG8X6FHXhNg5u3C1y8SMhfq828HX/I1Z01FXpuJCSUrlFsiZS
+AmbduucGtHav/u1dhdOvOt/lAy9ywDtSWMG1a/QyunYRPF08D5XsExQe3PzRe7C5
+Ar7NXa+xPFH8heLqHxUlAbzWut/In9jemSphQzDCypvHknNB1hi8zhEZoVqtbTvo
+24JEL/eNV/uMiKh9/Xxsj1tFwnhkGx5abwdGbz3+4LeQ+vdAgxT0CiZVKqb0Jl8c
+myhU1mwLdohYkbfZFJSwz0R8PLu3C7A7wnWF/mDpQUldCanykzX2kbB0KFH5SdiH
+b7AJmtL9xT3tGBWXr+a3qMXJSE+kkCcJ3kfpL3ASiSm+t/IYEBhe1xtpSXE6jASd
+y3pfIik9/KBFFM4qehc1cea3xm4cp6b32SZsA+a8Crdp1dQAWQOC5/GR/b1jAPXo
+y/yjmzTgNjSz7NbArBT9rcHryqEyieFuMczQZ+HwWUjr7Uv4dZasHKSnIRY1/6jX
+zRddwpaJ/W/yRzeSKvgYySlUxjhpZG3e8CeAOZyncFoz71xNPv1ONMhacWTQLruJ
+z1QAUh/J21PNRIT2ihPZbzpwiBvT3JWzlyBGUV3B1bc5TgradXLF7Y/D7R+QHAZI
+8B8A/wFhngxn0A6HDjLruoeSLSzUBghBSyfoNiDkzEjJlXwz7W73Pchqf/V47uKK
+rxgiYR9PFYv1Yuutc5+tScgXEMqPx6+V1f3kUAZ0HGwBVPgiS1PUUaYSFL781SGr
+65SuprQnYgFZgbgzSJl68dVih6PKMUiwhbp+grPRp9H0Qs/X2QxaadE6q1EHht0v
+pdYPeKjl612vtvS66p3bd3KqqaHsFxal4pFL/OCEO11VWeurN9Yan4a4bSOXdbqe
+4Du9RLFmdqFf88EEqXwSTx1ehRyFYhGS9NL0uLY/KDv7RIUjGt4D4w78gieppuig
+0dPMKxeLjbUsKueAPEDWIGxOBOI5b1aG3Zswn8/mcypUETEZI8OrU5pJ6h4qP4KH
+CIDJeCkjUUjp7wjBh0N4/dU/IemSMbQwTSWfSK3WbrMt+HXo/iOX5zseqYdG1e5p
+PDb7shJP7sZr8rYNqYlW0Uka4vfSSBWiW0FiqmOUcvxY2MyWB2F3Ux3S+bBNNQ5N
+PGV+SThXtTxyLHosrmNGNrP8k9aXlYGleTTwch9hoalcWfibZ3zxWo++tVB1+i+u
+JCJwtPZDDmJYSfwJeFBormscaUl0X6K5Et3vrxfRa3qwVRHgxhedgi2Ll2qMg6kI
+WznIUukIkLF7eewYRtaqRFPbU1Qbd8ypuypf+BIkYlKXh8bWOAIQWa/4kPx3lVT6
+/1M2eGmz7/wSQEgMAt39iB+HiUs0bigfW4gZPbvLlfdtfM9pTjl8AfyGmy67D9oY
+CAReUxmm4cFhTvrIeVjqXD1yM9Td6LNYqOgmV1zPcWQhulXwXq4qJUQ9J8DgrcB2
+RCGvoH7SnGwunevCXZnOIvnqmlAMW4y1K/mKkICFcJy1PGkejtxhlteTRe2Fn+96
+7Nkc+sU3LKqvp//R1TDbXsiN2yltC3p+hbnYb3XpCpT1OEu3vODK++Nrz80tT+6r
+DFq86GeY2WMWl4/7iffkMMDEGRDkydqdtzQq91i3BUH8NBj6S/T842hORcdk+Dad
+ubxuB6gY/5q997fcmdbFnM+Gk1WzocFD851nagBb3mPgwSgmnlG3zDqm1FgxHmyK
+/0qNQINajY3uxmmMw3af6HgXUXb1Ao1NmmMSTPl4q/wFPtMDaUHo24dE+CkJYyyH
+EMfzCNfz4DeUZ0xH+9n74vin5NVdqUnPsrWj2YKkz3MxbT9ibW+VU3isPzNWUAzN
+WMOTIuRN4jP4KtMKfg1w9gwuz9lf9tGhPaCB3xeFOpxAt7EZXcqqbIUEii5Cq1B3
+Ui9uV76na3TkXL6lm61aT9/BU9ljAcHuEu4AAs1n2pYSRw0q8ESaUkz587CX3Mdi
+hDdTL1v2ygLuK4pYSBvRcZkOrpUJDd79rUFuyz01woqfRYYK/FODq7Vt9dBNqUqr
+YdeIGFptXtRRm4Fsa2/VTTHnUoNedIbTu6PyjAZVnL9UNVXsP8wSeM3m/Xn6Cvg7
+Lr9tKc75YuWx6h1jE+wV1Utt7NonSZgZQx5GAbFw/7NDP6Ug645jploFP8tYgfes
+NbndSGz+vgkSl6RZzJog/4oqTnVG7N4iK0ap8N80hfAzuZF3EehcVVcd3lYB/3lG
+lcG4y4iaBsLx3HCSefYB+iW5orJL4wAgPHFphuOOa96boNPNo2uXQc7Q764AO6j5
+5DYNopr5Sjs3d5inTwLPOlO2vM9VRzEW9zMqiSG7314+e9ezovktBxqgiPut2Eby
+w6/M7w7a3pAqHHjMBqGjCHv5YNVan4yxUCrpS9O+X3HpQtRG1msxB24qMFGItyFq
+4H9UScJ5HNwUooQHa9o5G8ZsNPoNSjmJLYeLoiL+0y/exO68/BW3Z6r2l3zYXa7v
+3d/ReToDIOtgM4v2wZF4JGZM5LPsp0W8JRsA70oWEeueXNjpjVsNjyaU42iQYD0+
+qgOZU2xZQjRctGFPyUSBZewkxZPK7q6DbDtmC8MX/n2U+hHZ+yV+lGh0Yux5Fw9w
+Exglw/F3A5214czhDD4n8t0X3VtV6rhYu0kjKuBXZ6iL/IRktz8w2mG7QygaeHRp
+2zKQFSWlmkyF14MNEUdLX3FZlwGe9qQGF49ZqglgyZ5Q+ERhMruIv5Z1u718m5SJ
+RZTbwmCn8hAxKmnqPEhnnsX8LWF9zfzjSQqf/5f1yHfN3TBwBJC33r/p4amrDx1L
+k4lR9N2AXTiN5pmkEj8/JOAOVMUmtgE2y6QMyF1EWuY29dqej/cIM+GALgwi2yzV
+N7lEZ7TCj7aApqajOedkbzBwFFs3tAN59dHg/AvRTokRhrVnKyOtWhmR101MQpaw
+4nUhYw59U7lCp8zKQ7+q622OJrPZyaGZ8phlipL6R7NEY43Gty5UnpmV+JPXC0jH
+BAieXMo/RBakMDVm5LEQyblD1Ji9ZPYLFo8UXYjVmxcPNlvWWD3XLPapgfSvgWah
+W8EMv4Ngt2mwsu1mJLHXVuYE3XpcCbkNbukEoMSml6mbx8uAz7/39ferVQJOgevs
+N+x952gvEmgy+LTV6PhEwPEMnlk40IdsMuTxHhO5Mv/itxw+N4wGTJeqp0aPy43Q
+G4SmGu+BqdGEFW96JVCB08lMOJdk+BJdi4RxzKOZ7ScJBhT3QBU9BQsJB/PYwYz5
+L3hGQ2T0kQHDBVn+VPgJQpayeEoEeGifM07vBGFs5F2QN6GjJE3eQy6Z5+gtEIpX
+yK9j60gA38XQB6RRwl37yxuIfI7uP0NKhx3NnhESIp9FsUVQmhfniRtcvpgd2F8K
+zBKEmjsiEN3lTFLj6m43/cQN5fP4egt6KwQsjPBLR0b37vzRLFrDLwy8a9y18Xe4
+XgEOsNN2XiPgJj+cWSxXjcgplm8X8zQ2tN4g6lbaPv5JhE6hYFXbrMM5PK6u7k7I
+vZvc4TG4fbYRvmexC54oKrWS5PDqMaogfTbHgvcozTLLhYfNKVC16SRLXapag1IF
+17AYvlxvqRLR03sbx/L02cE4I51s8vdJ2vYUmT4L1u0sMClPK1OpWNYhhvhI36Hk
+PWeYY+VqWllTd1d+KHTIxM3QpC1cdKOj6R01CnU9PyIV4J98ANDcguMzRC7fDor7
+C8nQYZDzKLPprYo/5JkfJpioYE6kASntSzNkdk12E2Lqlmlhh2AnADG2Z7v5DS6a
+ONsrwiqUjxznPfiHi4s0PHGokRPj1+9hx5xFpW+isTiH8qzcx6PpYOkhKXqU4hJ8
+4My8AknA/P0cwtRf9FKF+eIuLVKMwsIm2PJFHrZVgvhj4gxDSb4vCZmSSQQXrGcI
+VQLfyCuPFipyE2FFp/ADRcyNpBah39y8GX7rU4QBNUBEtQ7zakXZwTN44VSyEkkZ
+BBducRbHO30W+Uvd4TPUAQIoTXrycRjNHIB70csE5MfJYSMfZRyDkhLHyNvAOUdQ
+dEs5zDljIwwfkUIw7KqjDS3iZ/o7cxGXcp83ytYkruJjdAc02cDHekrIkMgkkyCA
+DP2o1MzkOlBSUIAGutbXGhWhu8bLPF5+SMYKf5We+7O0OexK46DqURilK9//xNg/
+A9dV2DYopYLb843Ye2VsNz0892P7Koi8GBSauTlLMaXHqQvJhR/xJ7SLS2LdvstA
+bI+UQTh9+V3rgAIKW7lSwVQvYAfMhFk27vK3CkSyWOuyd046UoxniMaS73NVi+EU
+OWfGIv0yAqbzj9QYXFFYwT+5V7uuUkFBtwgV1LxtlPeg/dWVKHnZJbpodvfKdOnu
+Hx0VxnXlIGxU4P6CyJCsHPwbWsS3ew833WnjCglZhpzMDKvfXogpotgCVpudHkPf
+hGcH60UBW/pHGf9Cl2jBuRfhX2Kt3UUppjCaa9bJj20x2xHgelUMSAgwGqvZ00pm
+pFRJ/a3uAKQRlOsYzinuMoPHRg+RklUdy2vX5L+lOrjisos1OtQ9eX0hJSbafcbq
+2RxZ8C/+xXY37vvUl0eFpFkw6VC7OVQl8lNZ7XajoKe8V2IFqNbwaWTSl4U/5Rhy
+hs+ST4gegW6Bk56l/4FBJm9ev8cWsh0mOVTZd482PF7papKwu4VIVzLF6IYX9Qv9
+bsEkEUq3dhezsBDB2g5D0W4BJTgRzhWgOc9XUWcT4WqVHWMVNfmW3THL2aVSq+y/
+53ON44jRNY8Z7oKXickV6Ayenff3OF5ukgQqwrsKNOu1yI+LOYoCUHrz/qBU6wT4
+/aCaRzJXFwUyEpPkorBdGoDrZKhIi2MDcz60K9YjKAhVGUXZa7MMpK4W3IyHJvOY
+YDvjo6vBW2ED5nU7xCNfpre/Lpj1e2Sx0rBn1ywOl/Kh8fQMijF6uEV81NC9wUKi
+yhvFstQqSC2ZEG9husc6pU9P/X8MWhG63YoTe6EvRyU01bbNGQkFj4Drws9+1wOT
+HnrHcnWByw+g77Rhqg8izo98UMAOagipJkXFl7HydXobnJRY6VMMQgP0yKjOTp5L
+Ak5QeMs3N2EeaXCGQ/cXkgQCJ8R5jxv4LACinDmvWSrKBKNA3raFhTxljjUQ6TYL
+rSyBCWqGYEbm3uUgCqnEUEh0cAYGDtUWH3bjp64FEXDBm1hBfDURCUOockMAbRD7
+c6Dhxhd1AMxZvlHZRXqwVzqsTp8elWLNhaFqaoWFoYpNfu+j4GwcE2S9rEZIa94+
+nYO1RHZvx2MCTcrZNq3CmHTSNIHgwjKBphNHjvOD9k6vEVwrCTMFEQokLOx6YDRU
+enshb46V2Owbtdi+ZJCkyOrSlntgFCZsVI2XM/bXwPKJXzSHC0tjG7gQIL1Gyzc7
+jccUQGS51ld+1EJ5EzNhOWa+uJTg0XwkUh9xHMOH/sWl5b4CCI+jz7k5++QVFtDG
+LwFyFVsqthj1ux6yqxpZ0n341SGaDE1lzebSK0JqHBoWEfbKLp0Tafr6fKbugYU7
+5ijloYH7epqg1Rvz44ejAIRWyPHGGW3ruTkWTKBiJWbYvTQ9sM8t+A51IfYWigTO
+R6iOZGTHE4fAn5uG8Q8N7lD6x3+prOGtvkWtvC/hzmEPV5fNXIOa/3h63OxmHGS3
+TiL5lZVyLEc7IMwDRJotBR3bxLy1e2vqVPmbCCcBuBfPaY4Z8ClS2DqELmPMkvKl
+cXdpWNkth5d0GKP/0IBMYZ8Y9AvEsT5jjDxQ9+hP0GEVH/6jajUu80lORdiMKYua
+kj8uGQSRW5rf9FEZ+taAcgvqdd+pbh1y0DyFOqxUzuuJzaaboDBykZ9+gks6Rkuu
+aZ+mB8EsGV+EaG7o67QmX7dyDiuI2i1cEeg2LmfLo26D9IaZ7ZvI6WHcIPIlIDbi
+iyqP59Ip0WWtyZxWeuiuPdn7jB74g8T7xu6GsW6WXB3JMyE/9A+9VO415riiurzr
+vS58W1x+PX7FutogxxM2lVjrNfiiiKCYsUjdTslHEQaV4MxN5cktMEoDOdkwf5KS
+G5MM2HEsar652oynajBiF1SOFtWm7Uh9L/VUU5s1qAl1AK0C8xtouPQ9zgi3brL+
+I8LrWCRPCPCOso/QbVG+BcXOJ6JUCvi1diCVC64u4vGqHFqPUkj1KNrbCmPpB/Iw
+DC3lUhIUTtsxsEIzW9DI0RQ0hnHT1ZfYmyUEdhzvz96VJ7SZ0hCwCfn+WEtU6jGK
+YjAhIasDAE8iKUjLP/ygNVVv8GMYZ8RJl37nx1Db9W8pAckuQ5olCcRDxJcoUscC
+H9SALUBLlXeJhwAIv1P5limQAwCHnfSvUnjF8qTGhLpNu+kQ26KFG3PN1WqGIPnl
+K+MRPhpnOSMAaDNdv8n9byCzml85d/JVkLW2k+HtglWPXrZq/bn9/ySxOK5y+KRy
+CBIKVIJtBPr1iDk9npTCySzA/WhcTBhQxeBLiQc2OCi0hI6c7Nmew0SnOMHbE1iX
+ZH8oAVXh0yI0L5rTNRp+n0xmFEHYaMQx5fapLCr/J81yQGDvNRKlvp+jQT7sFJvY
+2NQlPzCQbyT1xaspQ3zJuLUE78haxeLUc6RGLg1bmIbsUXDDRjRnIDX/55OGSjAL
+2EjJ6Znm7tssBBXkquG9gVqmjbjC3KYS5WV9JSDeEOEJySyf4PGtOkspWMYZoxJ9
+KNFaNSSyfVR70yYzsGRs+6PeGnc+HOmWxdppJmQV9/9b6fnOu2Y4K/TJvoz+64fE
+L84OI09tbRCnU6QCiws2otnnl+adBpYxqHMN/iYpQWJ2wKpgRx4fqFjq7tnlwmUG
+D6eqrS8BGvIU9vKoUURbdihlIurov7/99daFl/c1k9VK7hmum+rBNihtpDyZojC/
+uEX6NoMi2sLELrgPrDfC+XyWYe8aVGUweEK0sjNuv0hOXr9MUdvgSPS9nfV4U174
+olTxLzM7CCwWbrYuv0GLEyXvRblKYzUELwgV9lZPy7DjRb9RNBc6TaM5DJe7cLYw
+E16hhybVW067TJsH6014GqV2fc50XpiWMDEBXYGEenO4rJ59UR1NhxMoce2jDvVN
+LaFaX6QZtRn4/Cr1Ds9apBuxKrz1wzhO2YhXFencPvD88lNOL78l7V+yBWAz244b
+zuQ+shBnoA7eehjqUBQ2/emglm4jHUbk+7KGd4Rx6jy8jcCMEd7mcTyKhy6bRxxV
+KSiwB0ewC4kSSDPxyEr5lpErmvNgjHoOyiUnxH8lQeM3pedUHh25qwf43WYGtHwW
+F1MicAKQm/vFW/KxBASIZlVr1lZ0mCqdDI2mYCuIFczvIwwb5EqlLDpyJ1ABRnmS
+XDjHfGGplMWUrd/P55ShUUJ0rnHRVfOZE5Xf7dHC16OooOTzvVzg1CpXxSzl6aQd
+x0t9eHwonChdLjUhDCr3xGnLS5OaKcCT7mbBkZZeXP9nwqyyRQiG8vM731ODURNf
+z5E9qmxsslyeI4IquboZt4CzXTx+D5FPEOu8gnGgOLZPUWUSCyjwhMRImOCvGq71
+w99z72xpVeYl8MkvytY+6uSNqvuGf3t1EnVgcBNuSxXNH9/bb6Le1Dj72jYRLMBC
+lwDGxDltyaCTJRSm1fN4Ts8/F7C6J8dnwR/4WU8kRFUBy/GinCJE71NxDbI6gJ4I
+4OpKbYkIhr/4xsWB/lVusW4hOfDeFAh4ogYg7ZhQzjJfMOeg3jrBl4hnyrR7P021
+PKBflgSH7ZsoLYP802g/Td8um7nDYjKmc83KehiwpZkP6SRQ62yY72zPmKnWoHW1
+jh2nO6htyGUHFQN0Qr+kEhG2rHY/YdBmUGqpdoKc8W1oidu0MMblUhd8BfRUXcQs
+udyhJBAgFla1241VMBeRJINAxx9aCsGZRYpC9CEkaRfGx0/zNQEvhMt6GOPTNJNJ
+GhZBvg+5+NJgnHSc8d09fNgU1HVip8iBIvc8+rloJiR/FZG9AJv9+V1B/zvJBXu8
+UqCAqe3oi7yh38PjWPgtbsByKx305XN6capv6nxsi0wIWsUMHCgU/HWHGjr/zjay
+4BV/00aQ/pVxRSv4EKSIfDF1YCrG54ITznh2dHN25ZLKpXzVQbOLr5tZEJol4qOo
+nFxzvL/OXP4H9q5qAvg3kV+XOm/0iYxyyeks82NbWbzEBFr+ekTQp4s0KukB/37A
+rpPbga0wIjFRLwztTNlwHX9jyx388muovDtvOwIrwDUZNzmcqEk4R7n+NrYgNM3o
+zHhOtl9XSmzkZSwB59mPJfCbvSuwbqvRi9hIEv5W9L2+mmNkUqLojE38KockprVt
+6nVmjQxoLNOKg1B9lMytL+u7C+i38K3I9gCbk86lIyKQ9xYKUwl2L1+jw6+n6DMJ
+yJzHn+fMT3eJ83mQ61S6yC5RcBcuWZTjckmEP1yuedg26kuEwlK58CsUAxmlY3gk
+hAQ+7P1QCNP3/MnGt24oz0ySgubL3ZlD5Wo1kUeTXfFLjK20OoCfV5zMsfRMs0U6
+2SBoOB9orMjC0co9BnAmH9kd6WOH+vbHHDXYUDWVDTdPJ+iODFyOWZdofeGhxK7D
+kWbLgQy9+RU0OAD54YjH7FUFC75AwMvCO/6ygqyYlfGbCv/2MjqpcPORrMmAaQZ8
+aPmSbWqu+yTElWuPt9dMec9jWeh534QmGMAc7qWsTQkosjNm6GUAxJrmEwUAu/CO
+OhY2oJYMh79oEw6uK6SN6VMm9yDsDdTOsrc5uVDo+qz/uuAkQE9YwosY5WTnpB+y
+zRsEfoVrhoHWGi9H5xFc0MuXArCBCeYqgY+hsFiMK0u4GNZg/h4VSpnNWWiXRKiX
+vJooysL++gsfOq6iZY2kuDcoNf8J2QdUCS4WeyI+359osEeTkfPUFVhp8xW93HS/
+Kd9d8b8iDSMEJoSRTpimwgtOe5sIugnocUAJFgrl9RS62Bss3Maudc2/pbs7WzfM
+POEqoHyC5un8E1P7omxqBZub0CwDnFxMKBfMi2H+UlE4YBGjVb88zOyTMYbJIMEA
+6Cokj+KRDQoSZl7gDa2YtIvO0fiqgL+MsElfQkE5niJJA0k097L7RK0xdEhYbljo
+UE5hNaneNSCe1P8QvhA+0kI/8kb6ATh6Hzb8PN/hlBYpJhGCg1yXzQpvvQWghl9z
+GuZhhndsV8150ZKsl4vExXPUqHFO2DvNRXA3rMobnIx6pOZv2vK6s9aG2ZT3s6R2
+kDW2muHqI7JmFkidp9wtE55neKy7k7kL7nhQ8nAJQ1VHkdSvq+e9MkXnW/v8btYq
+thf+C3w3rx50RWFQT4gdOGpfK8B90Zdm2uPmULEY+nayg57wetWSEoGLp/v1DNQP
+SKGDlFMyoemcshRgS41FOraoLE07/Q/rF4tV1Puj7KjaAb09+3BZKRz694Jw0ufj
+IbcicrQHZDFLI5eAIqM9rL4oyoba+LUDsrH9jJsAgFYgil1gH6DEuUioHLxRQbYa
+cguzG8l92OR+O82gaNPHUVzUxKxNLp7lSB7x5tcGXdDbxHsUHxhym2vdcOM0zXCa
+yoRZUPyEnzigNR4n2UldHBxwvqPAdTzmOszphbDhv9b97OT84Zmz5LAHodylZ06+
+iFQXGfYw9WpbekMTa8etaHZULQUYiNoGRAk3Ohzt5DoukO7ivYp95bWu8irx/fdU
+0BNuK2H95IX85JjBZewniSdGFcfu3IYW7hRPuMHfV7GRuCiRBbAZ6nTxaGvxh+1n
+HF87s89n2uofRKKArBjYRlab6o5YTNBsyq3x0tDVim5IkHGIzIghz2cU43RfCeNW
+5J04S68YrmSXe1UvFypH3FU1Ku73gY7zHmnYme3nQzqRF/9t6vUtOJ6eAb6meT2o
+jlQkJ7zhzdfRNV/QH/Y6IGWG8Sw4IIB0MQtl/0sk8Nb8UAJXQekQKc2FY8dwJg8h
+TYuye4bwxQkg0wcArSRLgay7yPsk4mveZcp4ix0b9CsUm7u0r8nR7pqb7LNyhJ5l
+ht2KB5xfU4ftnP2PZolz3DCl8xXAiJusCJVlruro/Yw1AqFtV5HrE2kWVKeQDnqc
+2+OPQ3J2Bu/TJi9h9ySswl92LTc9IfUwbRMLZbfi4zsaFTRx1Uz4ypc/EhyyRGC8
+yxEFdhy50Vcd8aqgvZmQabGVbjDhXWOXynFlBNAqmPAvW5umvOnb0kiARlkWBWlC
+EH7SFwsFs8GrpPIRIiePcHKqx8U94BMHFQ/sMELckAlz1BtujT2BMThwBQ7fWPxE
+2QkiUba19oGWpimlz/+4VHtM/TtDKfimFiQi+lgzyz1eUrBqnkBiC1V/ROuouXuF
+5fcvBleLrnfXUKXKycEuBRJ3O9MNiVVxn1Fgc3ae2GmTo4rMul+Q/EJKpKD4ioP8
++3Gk7c+YPIBB/SMCsMBUMcVsyPX0MA77LKW/bT/RkRCYLWV1yOqjXj3m+vsn6Z8A
+DeFKBCmlBv0eKuFiKxC4fWNcXzn5Cn2/zFrppJo0ZaO+dxL8oDLdYGkdaBPn6NMt
+8rUG89sYg5bazxMo+DqD/23SG+pXKfFY2QvsXsoUtZREiCiubDcenoE+RdHga8ym
+DDJmjuQFA+5EkkdP1KilDzZl3pDCNuCgiubanLenHedxaV9VvXXhvDUYs0Uae+Vp
+Hv0d/hkzM063auol6+pBeTMOh/aWaaOW6RiYrMS/zEknVpbAPB2ypKh4/CjrPtux
+gLY/ZVI0NDJGbMCbLvZrDzrjUAFiJNv9F0RzsH3RL6gWeItSrBuivh77hBjEuvTi
+L56eQbf+l9341LxZjAGFvxs7Q4ZQNpwtevlJzoOmQxc5quMiG2gbAsGNHJSycgdm
+MyDdFV5eVxjBmvtjaYIyiOeRwPjv1+FkkV+03+fZUBxhKAX2NejFDGWUtA+P9tBS
+4SvY7Rz/MW9SeZQAOeYUiW6CiF4pP6em80LgaYNqZanggDnj5NOI8INt1scMg9Ei
+jZ7XEhNRcWcOoDlNw9JDTZq7JAAFrPJ/NF+ZIT/M6cTLRg5l1Sjp8o6nobfC3vTF
+PbIyBXvvhDLm8ZhhlFbtVlSaSAXbCQ2y3g1nMVhHCgHu0PvIAVC66n7n4trGRc+g
+IL7OHWcxm5vOk62gwgwpbUR+RGG6MXEVyBDmWnf6+qHmq2nQjl7pmcNJ5Ki28lVn
+9PZX9yPplf+XHrK1ZY3zO6cb/yNpJvWmBMbtagh/iTWTm3TQbaAkw8Yy/pL+zDGu
+dUOPMEL/gKusz64MqyZVg/RD7vpAa0N85DIrWHnk5pZnzjKkm6x+X76TMumlcr1F
+i8/SjXZczRjUjev2g4JYgsUfNaS6MdhO8NhMm7MpWcfKGUKT2a4KiszePcZlRKM+
+bqhspmLQnp6c7Usnukgsl5qGJ1XAkJFjGGTx0l/AczqTWuN0DYCmfAr5ClhxB1B3
+b6h8oQN9tiGU+PiYxV0f6zAtZqzjWOQVXvjWp3wdbzo9RbtkMbOwkbzfmmfoffwP
+B6RGgDzNEf3ciid22QZC8cBCD/ZrGg/irt9XdVVN0R+35naI3K5AXrBLftTNQDuz
+GpBBoNfc6dTyIjE3dtNjRO9WtCzVV5AkQeLKOyFX9nxmKf3gB53uowQOKc59D9IL
+akqd6t1ryYPDRCq1krwxJjE31t1VaRPYifPqBI20QqdbkLgg1bVWYGaxiH4SoOe2
+xsOvG/9a9YE4bXvP8zHdEtj+TxSw/Fle2kwzpY/CHqzKfnSgdGLSMTCUO0R4Jsns
+fkGFuwuWP12pAwsNn7wnI4A4INpozFOaou/REO6mAp53ROt3577/UHfW/kvX9yFE
+Nq8/FIl4zjHwsJjXZaB7rjaAKjT0wsG413Y6xtR9bL5NeKdbmLlfdlu9ahPcvB0e
+KXNtjhKZyXmelOih8wyxBd9VIFIZhCfLquHUBBjxTPPoG8atBEAh6KgeIFa1WGVK
+tkBuPDLMHYJrWq76grYmo8/xCJ4IcOMxg3bVF0pTvWoH3n66WLKq+vfN0wYgl4Ac
+zLAmAjZWHpnyCQWHfJJvad3JSniZ5S8ymSOfQbR9vvsohKb+hcXUMGb2TNi3w2xT
+U186MIWBi6bjOdrUZMHYTTM5Klzk/pvNbv3zgZrRAKkRrdml5/QVZZLVqTKgv1BF
+Unvp8Wy8iQj/TybfISUEHRxSvpiqYNOayCD/oyGqxvzMHyVNVOI3anLNolArciM7
+TUuKUVIOZVG62Ry/HRALwD6gVw0CqWZs1rjCGSVTEGcmYsY7FPtDlY8IXl1OyvCO
+mwKuEIwLOTh4oY85lLGN9KP+rNz1jDeLavs8ApmE0bHaSeXvJbci4LEb8SW3suja
+orF1Ag6FllfY6nhlz7yIr7TZrO4glnIzO2aJFNQzYcAHO2Zi7VNnMjxlH0loxpfY
+wNX9/7pMSkPiDC31QD0JY1H5iXo/aynXh2LcQtV4++imy7klgYgU5Dq73TSdRacq
+emXGmXSqC4UDfI5jyLQmF3x+VOvQmjmNf8QbnIlRsOrZvY6iVE6VB+rdDSJXO825
+cqjXy7sd14JoOe8VWANLnsGjabUB8LyotGFgzXDqZ2uO+uWjGJsi2guheyZkKlGA
+hQdoG2YEuFcfC5lFXDvwWmcNgmywMtcNUbptRJ0JSF8mqzJgVXWcifEtN8bcP2jY
+esUrqwnB64V8XPm9ZL28b/Rz6jawHMceqTj8MT9ghwYOecGnqCM+JK2qSJkJfK20
+48qW1lyXLd8p/Ayak/fR3LqhcSX7a9A3wrg4Rpa+tpwg5VJKULwSUINOHPOmCprL
+J3yweb3WIV7eDhpx4KXHcWCExnU7Af8GvSCLDy5U0xJGOoi3LSIJYixf8rT0qwYK
+BuwYtcFpZ5tzOSlYv7c7JbsRRjd72rysOH000Jajwf4xRTBHwHzONUtb9D8i5RKz
+1B3i2avz9oGG8avMBcYp+IUAMGVFkjmVwaUGaeVWfuD7EzWKwpCXubJAbwh4+JjT
+oJVOrbliCJCEZXN6jEq59SO8aC8klz5E1kzy+T80xolUsurmcKL6eWSOHxXDFjSA
+sqzaHvZhtHw0bVo1oxIgyVdCsX8QOI39mpvrDCahMYPKLpf6D59q9rzx2jHJ5mJZ
+zjvxAoVUX7KOIh90qEGTbfqjq8ykTrQbdd1RJ2ZMKMM06eOigt36Qut2UplRwjvN
+2JT0el8YcoN/XidaEmJQ6KFaIoT8CoRuzLnkA19Rroiz5/+wZbLdjWDYlC1/TKQo
+ksnmcsOM/h/cfCEKrr0UNRhEj07giyjuYsLm02QMaB7QYaj1RWYmNOt1kjCXaehD
+GjOiMAcw4f+YOchuOv8TA78LUV+KQgT2oJM4VYbEjWMmvWPj7oUhlJ8xuH9RvDEf
+YPGbGS2FOdcKaw02pCAkB+rHoC0idfkNk0aVBD2yOzZCIquV85oRyQigjJK+JA6R
+bw8nJVAWvgkLhzP3BeHb+sXm5Ys7OzzYI8FwpUZZW1yxUdWVsCCemcd541W2yWrB
+Hs3eRuPOBQ7cLRaJbCM7cTJzYrvVi+7dIYffsUd12VVQF+1qKYw7u0w6AvnWuFAy
+s8RO+o1otGJyRbWjnRZ9Bt9nBP/7riUvCvEoOT0TM7/KUrDFGG3WxmaikibnHoc9
+dVPVHikoBr3LDHyC0tr6WhjTJ1ilZJfLfU9WMUvfHKNCTdECb7ruEuHQHoHSea4V
+HTuNGwTYbMyqWx2cB9FH+f76cPKqHoxrDxnfURAKrRIBPvNXgwqJhSKr8RVCRMKs
+KKU58F2zOcGIrdmPy8WxU5IFZ5oyS9fbzUJjuWSRyNQUf1KIhn4llwgAVp5IbIJ9
+XUXlqJkAwTufzFDnwYbP6/MKCsDlbHYMWs21jljaYlkBElFZvTQ0oKgXrMxB5sTJ
+YZIRURz2enehaGbXMtbUGFHJrZ60YGKA+uajJf0sHmDs4QZbpR9rHwhvnARbzfwF
+M1t61ihfp4vy7pAnpCEJae8PQN51o8srY+6R1njuMbRzUQbYIVOGLF0aIB2LMiWi
+kfoXM9lef6Lmd3f0WAdy8l6zn9C22TK3+ZeJMecsq4HHEY1igT+ndAr+2Tqs5MLg
+BX+GFfC+aiRkyRWwijGFD7AhxVGzbbU4oQA2Hcla/zUH8H5i053odiXTDlWqleYk
+UzUoaxerwUo5nLFCCd+FxsFf3VyjC57XlC9pAr4XkiAMEXxigqcpGY7ZbYcLvxH0
+n7IfrteJLxjM+z4GFHrjyy8ERZAcirOHEMI8Usxsd1Ri6RzK3Wv/TJkwb2EpRDCb
+UoTBKSzQMhXJ/bsFWbeUiaN99DffK6XNzIZ/GW32gy7FX9I9s+JLQJXlb9Cflwem
+RUe2lnMNNJFR5KrgBVXVym140cSW1ZH5nlk0Z0kRMVodsYs5JNmurgDFkk/Fp22m
+VTPhdIdBbT7VsgqAKZVIrsgPxc58SxgqT299TNZJb8U5JysEe793wEI7hiGMTKRP
+eazn1txzlTxY5MMnqZSKJxjA9pUaug98nlrhnsGXiKmo7y4bHZGl2If7UjMKZm5s
+lwsfjQ1TxcMo9Que+aXwi5oX/4lYXmRjE3geqnSM72dMZQhJykOlVECmLFa60ltk
+7qoNtNP6Xf3W/EoOPI6ZEZ41t4RKuEQ5yAeWgsGgNZgEzcjDVx/1oip0BEK3As4m
+9b80hdr01EtdA3Ofr1e/n8CLQqXj/Qo2FgkhLYrGjQCBtma9ZZatdO080l5biYaN
+iuPpcochvvldm90XfumclbkpBaZA3QD69Ozg1LSNDucuExqElx5LrkamTlmeiDl0
+0k9eWxz9dqp+kFtIb6UJ3D3chQLglKemNA19WpnNGUsmS1p89j01PI9Sz21pAYqO
+fzi7Ah9eUtHXW7h1rmfhrdBj3YWgbK57Q0D/L9BqZDhJNMyAttwj0olKYBqDPoCo
+jsSRyVMUctpUf9UtqiFw4Z+iTOxbiOzDcSe4LuM9W5eE357QCxznly4jGu1VcC6P
+nBxkxy8QO5U+m2uklmJl1lerH48OtSC9+zN5lrX9nTshImQEy1nvrM3l9i5jpEtP
+FBt+JdHXMts3OWbDmG/GwMiMTBPqSQeJhgMBG8ScARKxg5Ig9a+okvwYshBwvCP3
+P1rJ75ufWj+zZHAf1/ApXKBlI7Qf2ucNSGSWOJoXbYFWuwIy7Uru6o8EASRT+KFm
+BBZuiMQ1HGgAX++Nd+cvEFVzR2a6UAsp6HW97A2EJPIl1X5XF2pCiyCdmYCx/tIf
+DykXKgYEFzku1V9nAGO5LnSOblRcBxjL8nkIlPnniLS1NlhCNcWXv6SxzJCbu7KT
+43QaH9tsTOJPIIycPAHT7tIgNMejz4HI9U6nZy2tLGeozLaEpSfKL2Au65l0nIjg
+0YJdp9GMpk6umoXJ6Thyb9qc3K3AGeXD8Q4m/g5EUGaoxUNIYnMnnbjxWC8eJ0QW
+xMWvyz5XkOsdHx1SFCtSVgm+vtbB/DsbiT8hsDVGGOnsDlNRvydhfJhKQ5VTDJBa
+DfC3inaBjjzN4QX6URPzyJDlwg9fwO88Ypo4vgPOGtAbpgEQ/Lomnc1G7Yz8SO31
+6RV2Iog22u2eSAlq1cNZWdQ74FQPGig41DMLhTteH8gkPb+ysIChbKVmw8tcrROO
+sAiTQzgU6qa4Utm0k+3dzee2moUx+ZOc+EXhOFO3aMZF3IAREE7lN5W3wVM87NOe
+2IvK24R7/0dFMDAv3x/Ije1Ef2aBxiGmzzAYfqP2sLSq50YDWyCMZt0EzlIs2x4I
+M61JgAf1RPuzOvoRVbAjOdjEDWLAZESzrvNOtBV3FNkTPfGe9smPoWxcrUjGwter
+v8akCrglnMb94sBb+X1Bkd4fbac3rjRp6OcCY9dLx3ZChxga7Z81pO7bB67JkH5z
+bw8VnzMVAT6/ciQzTYrcTWTQIrewJqb3ivY/JRcNaURrmTFKKTKkaMfnAmE88UOq
+JRxRu6ITnCqM/f2HK28j95XWZCf2iSbk6RMJbsaO7WQKzY2mj5ZzEjqcJZEHD8ym
+rB8Pn1qrvA/6QXcNSll5CdDPAet9XK8xoRj6thyw+qRYZ1d5yqNrjhv594E7sK+v
+YeoQ+RY0FvBp4nTFyk+OG0V26Ptqj4dZvB5qKyHxjbq8grsjE7A423XRUB1sxtjM
+AMlbRPCLypdjOMautq6hCrodhUFStOthXbcjeucQr74vsRSjAlmxyug+kky+56/u
+sxXeHJe+SlkNrpNXgFbg/zg7x+JqbHgV1eV0k4tbg3x7yFj9wzY2HgnwOD0ozgqV
+qGrvFfXGCJoErp8umWYxowGoyyz7JDkI55APrlKTVRa9XKj6N3QZ21kpwHSrf+gS
+6jin6aU1pPnx6YPyMmRg2hWNAmq0fK8SUVUVXj/4lODha+gjNUkqc+7om2IWvR8n
+3myqCPIYdUvfPa81t51yFZ9Ds83R7dcswy6DfTtSazFUREW4DIFNL7z0wjvjVf9+
+T7V6yWy0LmrTfnb/Z2J75Viw6/IxbaFWIqsNlkjDx88RBzz/pm0hWax4ibkUywVq
+ee64uXqq1Le0xWjyQ/OB0Dl7EDts6t3heU/55ZGCm159KE+GU5WyCsIshNnLhjdH
+9rVL9OzqixxyC+Eea7E3dmgZrbf/HUYQy25byqX9ntre1TfRuiE6cbtIuyEb1IXp
+pQ/s41kLoWfz4K7pBStIFSHvzkBSkGdynL/GO7RfC++OL33JUhpkhxbSIVa4vbYf
+3PtkOukOraFY7mq4GFCU9ayV5XzvS0eEQC28ZZ3CXIKguRSEJtJoGTXDGDR8A3fl
+PThjOFfhmla1l2aczdFibQvsBDOZ9zpllgrXfjXTOr5y/w+yj1tfyT/lKaGjX6Y0
+KpUWLKr6tqajrLjKga9yTHAWhJz2FSDIY0lKuw3C6/MmEavVKGZuxs8H6TUGEB/P
+Zjz8NPRe+mddNJ78rBMN7iDbYqSPThajMifo/Fe+pUwbW0ElG7bEcsyGAAfXqNaI
+xxCgf4+H433XkDI1jsPSMZGLFFiproNwjj4ih1xKxnT5tbmrXA2VVqgAyTh8PPAX
+jt190deVvHgAI1rdVy2cTOkq9p3rwcgYPnu0gYJ4oTK2aujmsR4BwTweyGPUODFj
+HuGR022/UU9sdmsL0cXtxZdfB/YqulpPHtGHulvj0OVtOFTScPG1ZVpqvQvS/BMZ
+mmxUtiNkGP3mEyX9TKSofY+eFKSW+JQXwPTVlfiEfSkgjLKzmGTObFs+6nMuzP0E
+lGUREkUa5xqh0MVM0BB3nmKWlqqH3Cxya3LIYL3pQ08S+K+FVRM1is6GVPuyvoyP
+9q5ukQ+jgs+YCW/E7Unet7t8aRIAzptJy5QG/AlRCjg5u47jMQJd92RDPV8Pxqmn
+11ilE0OiSTQEIsk+NrSNukHTIUQCKl/QA0rR9r1Ka141ZwMQ2jf+DwJgLTH5xF2S
+E1s77JFV/fhz3fF+ZF7TlFHr9tqoqU4sD/z5DYPAWEmLf5Q8YUxCax0HgVlTfZzP
+6MOBzzxph6ykwCvuSZsYqNYe2vVP9IlCYLE8Ue/sWkyni6p1mCLj0WnA5sh93jnn
+YgRyrGZOqSXWO6Z2SSfKCHwvAopiP2QZ9enWjriu5T1KZeONCEhwmf2yvL4NNUKH
+8fIHVO6n4jJ0No7aa8w+8xh1/3xovF/DD+PxYpKTQCJiSo4D51MSJbeCwgPbQYGB
+dZ2SGA9eudC0sbRTB7HVE7QS119K02kPlipRhyNb+EyKXeoRaL4kb9ej60bo9+kq
+1sMWFekpy/FG08wX25r0VVCsVjnTzXStIMZBmp8MBusIbSOfniKtVM4WeyB4Jqvy
+PCCn/urYB8PE9lykfYXryU69dK17LeV+l9OIexm1oi7qfMxP7ttlqcy6R/lEUH38
+War3TIlKFoN3gUW6Dgy+5BEsZhW50bhxT7p3TVFdfgTuU7AKTceK61WFvPXWqJeB
+F0ZhKZ0quHaBXNI5GJVLNlAzXjahxrcrcaWIVdixMCLKD2IqpwabBLReIWCVZO3g
+uz6N/CJb9N5p6vPuuJBrNaB7jN9gpU0E8WsBB7T3VVYEVMMa75/vvRTFHRc9KVR+
+Uu7viXrrwOYPF+aZDs9p8F7RIV0k0lw7e5v02nFl/o9MyczwDdjIfFcvpU2omcYI
+LRuFBcwWcY3nQpLAtEVgo5uAHRG2ENYc6x87sa3+/p0kHSc1wV/3ft7ZDsu2Eo3I
+WObo9kanIh/0iyhHEnJcAszQaITwQQbHLi46GTdy3DoZB8FpR8DY1xlX2BrdgmFZ
+cAFOytxryapHnF3lJiTSs1flFBXTYbPNb+vhmqLz/GivctbakrKfAbboAMWROSS7
+YMD4Jz1HynQ6XCt0AEvu2ddotExN6e1MQlE9ORpeQvD1I4o6wgNviYjSSxiYUZsE
+0hiXDiPZrkR2pnb3YvVOYiK/pI6h4rMD07CfvrYjgsvbWZw2yfOmwktX2kVd88jY
+25g9J8lxbgiV0MWuxTm3HgMe99KMeAIrGPCYEprwZ00uRhjrhOEHxpc8Zs72x6ts
+RULXB1+dyHzI85jQFCAlEPp8d1HfdGZz+lgqJreaq2+Uy7/iCObcIwVOTkqCOeZP
+dcoWRBNv9qOD2M7sBfoH7fpEWw/iqa+RNAzVYqpSbS5Fn+MiszH8Us7KCEto3AFq
+HUHW0CoA2aCsa9wWJ/K3TKCEfDqRlUxXWCBzSL+ka8dlYQxuhhMlk1D+UAl2nAPi
+AHuMfZPQJl3VBrIRJhNwWnJ7cydwuMdNfhv+uIyibc6WI2U0/2UBFlvOSH+fVIMp
+Ac1A//afhsugDf8thl2dI7gMYlAGGVT9hJNTTUDLZQcOOF0qFRHPd2Kl1l1TPugL
+oSnv1CmGnhdf3ZjyX0wqIvPw1j8WkdUX4lemyPW4l8vCfYOLVy4qs+VeRynu1ivt
+1wq4hg/0+ytB6tqmb21yZpMucuehLekn6YzBZxbeW7Pga20ClFy/l2S1n/082kla
+RUXuzIvKllkLPcbGjoZTSMfK1/Z4pyryQyqEh6i1J/B/MUk2k5+LOyXK9mGMlLQb
+zOWihHw04+9GX1ovhXW+A7yJfGCBpuVa42+bWgxLg54z8FSdm8OPh4dqlWvcJQom
+LxbAxx/2aQgYggJXCC8eyeQ86+RC2wXm7GjC7mRMKVVFUXI6RLCwIz0VVEA8BiMC
+oTUmuHbTVmXhX7CXkqDObbCeL/haHX8f1kW8ysIJ0ZjT7ugUIrL6ewi0xWMM/Qoq
+rOusD/PM5d7KOvHL3BknfroN5SjIj1OzfSr91fawBJ1jDe2WnUSJdtY03uvrBoHu
+vAC37ojGKRSXib5twucmiK/8+T+bj1yc3rznLvKzD7h+fFjaNVFEKVRZl7+mvAtZ
+sysUTB09HLyvdmOCc27Zh5IgCXat9WU6CVcJla9kmqxEtWRd/4sBvGd7rB0tzGgI
+hLFLxVsH5gpoBweFG5yZ5QTnA/BeMynvO8IQE/7iIKczns9T2DkU6fqwQmYs+EHo
+M2PWwuXO+Y2TyxI4FrLDL10M04VZn+USLt8ZcLH04SiXUphRAwK60+0R/Yeda/BW
+1M0Ta7O62umjJ62/P5wyBwxRTRWOu77FIkWl+6Eqb2XNUTnTr6fwYqXz3wYYTVu4
+Mt7t59Ft+l6agOJrw77uzDq2ABIiEdPyIUWnUCIc5sjp50cmK47F5WGC08bisHDs
+Du1PO1M02NZ3fuuziYp7iiCGeE4tocmuwV5ETwzHeSz8GUrTAnPDQiC4uhCyI9gZ
+UbZaujNfkLE0omaiPatQRy/2BLAavJs22IifK8gS3F9e6rd4zf1whu4sZUKCTA28
+oOtVYGQm0N1UsdLkp3dssSWEDBSvewjIvxcSxBNDjqlcOivLhCWEAESZ68t8Zc6b
+Tnm1zd/vwDvSdWCXn1RXaZ8G8RySNrIJzQlziEsJaCWFd9+keSY0DTPx2aZKF4VC
+zwGUqnT4Vqxcz1+D7mIAd0pbMRwdJj6n8JN5+Rsy8hOAIYhpwOCwcyHQhdpvU3aB
+DqUM2V0Ly+o6NVuLqGBuzMnACRxCcbWaeeAVEAs+kp5IBXAwkAdYWZE4EYt0L/zx
+g2F2Ud8UZxNTwAjwOjFI07hI8wyS/5f84TASTIoyUYYUoM0a5eTPF5sglW4sJgJH
+j8lEEFQuyT+XE6ikuN/ZsVZp27Eb4RlJvYfqj/iecC4faRnCXQsyrxBcW03LQtQv
+//CraBFVku19yEpSAbAMZ+/NfG1RN7QALMDenrWOjnqVykZEsP5NYfy6BnvLnufr
+ChIyQtxGk9WTNtTXLmKuD5a8oVGO4egP+03InxulpBfP0MxzWYT3sNj5xXdzeY7O
+0OvCCLkoirTx9NYoIf+f5I4Fq/dHqwT91V26wdnciLzwQVJvLKCHyiMnmOZbQHHh
+wi9qbYYsfz54g2L5/SJTmVtVDQqqHV0LqeDmk3PcpamO5RC7oFN1zThCgOWwsxYn
+4SG+EjkOl9B7CWw4xlIZZQlPbY+xrqIAumku3FXmQvM9l9Cxjt3NffUjFOTAVHfE
+q7hGvITcgga8/0GrVGJKZONUleCb0mIXh/VPaP1e/TU0v4ObfWJ2VcdoYltOAsWT
+kyIhoxciOKneDXs56Z8oPBXhAMWHVu6L7NJm3zY1J2ooqeN/H8r1diro5Cn1qSe2
+iK5hd3GhpMw/ohtnLW7Vz8M7vUURkZdabeIW80Ss8BwilxpmBJc4ugRyyf+tLSjN
+J49FRvRP8iQs+ysWho9hepgJj7rCqGceQysVXW314M9WTYCUdz59JiiOq/sEFMjt
+o/Ki474nbdls9Aho4A5GnNzAmgiVQ3q5R8B6oPNUBbiqBC4ckfwW7ogVl/lEbzsY
+iPhAn9MHLyg8BsTIEPvVZKR6pX6YcGQ6HZwCV0m0cqweYnWgKNGFMsJRzZjcvw07
+JEJcxtWL77FU6XEsUjTDWSZ4AKA2jR8lM6mob8Fpzlkmc/S2rh2s7cnmEko39AP5
+k2w8c/OlujRBoTYs1RsyIsEDjORXqlx6vhFcy3UqKiR0aGrAdvXjnhiiwKzE1+Ot
+MgWOvTo4EO42mKIBnk2ZYyBu2PHaBga3H32r7EzcYwtDlJf5oPPXrCW0OvxUf1dH
+tYa5I92YSlAW0a08VQrxvAEQbBizfCkjvuHVO/ORDwn/q040B0ogAr0LfKfM5oTZ
+347c8OAtU6bFqt0PrjEbH0aHFRLlZ+73DiqrlEP6vYuXu6gZZZEYd8KzdjP5B5+n
+G7xPl1QOAW6epiLjwopIbLvPqTxZjBVKuLrcZVJavASxSlCHH2Xp9gFkqq/iSlMV
+mIkEBHl7FSjFwosMWzhKwPp3yUvmHiupIBfk2j678lV9fCFHMLC9py3xL8kpVI4O
+8rQ6kw7NxeeVSKhnXQz5mjttXPgxgpjvAYZZn4lsaK3gZiOEaI0ITM1akSktI02C
+9XSDbiPYN2oQ5NUnCDN0EomNCP0FllF/G/t1hn59hsBD0HfGQYv/pSXSadSbgxjr
+z+U3cDqu36+CauIr47Qp8JZ0wPaxkYzTVT+VT1eCBerUWIryxAwWkurzNOwiuPvo
+DWXuxk/ARHtDEd54taDOMdlXpfrohpSfurVf/6ZCYXaMscOoV/QCme7YQSPPIVKg
++18dK+6jxH4I+ZhitPyq0DQUiHTer+xS+bGpcZpn87w2Gilo099VYgt/tGGqhBH+
+SqnwqXgbrPQbnqnb
+=p9gn
-----END PGP MESSAGE-----
diff --git a/privdata/relocate b/privdata/relocate
new file mode 100644
index 00000000..271692d8
--- /dev/null
+++ b/privdata/relocate
@@ -0,0 +1 @@
+.joeyconfig
diff --git a/propellor.cabal b/propellor.cabal
index a04089b5..3b12344f 100644
--- a/propellor.cabal
+++ b/propellor.cabal
@@ -1,6 +1,6 @@
Name: propellor
-Version: 4.0.1
-Cabal-Version: >= 1.8
+Version: 4.0.3
+Cabal-Version: >= 1.20
License: BSD2
Maintainer: Joey Hess <id@joeyh.name>
Author: Joey Hess
@@ -36,6 +36,7 @@ Description:
It is configured using haskell.
Executable propellor
+ Default-Language: Haskell98
Main-Is: wrapper.hs
GHC-Options: -threaded -Wall -fno-warn-tabs -O0
if impl(ghc >= 8.0)
@@ -46,13 +47,14 @@ Executable propellor
-- propellor needs to support the ghc shipped in Debian stable,
-- and also only depends on packages in Debian stable.
base >= 4.5, base < 5,
- MissingH, directory, filepath, IfElse, process, bytestring, hslogger,
+ directory, filepath, IfElse, process, bytestring, hslogger, split,
unix, unix-compat, ansi-terminal, containers (>= 0.5), network, async,
- time, mtl, transformers, exceptions (>= 0.6), stm, text
+ time, mtl, transformers, exceptions (>= 0.6), stm, text, hashable
Other-Modules:
Propellor.DotDir
Executable propellor-config
+ Default-Language: Haskell98
Main-Is: config.hs
GHC-Options: -threaded -Wall -fno-warn-tabs -O0
if impl(ghc >= 8.0)
@@ -61,11 +63,12 @@ Executable propellor-config
Hs-Source-Dirs: src
Build-Depends:
base >= 4.5, base < 5,
- MissingH, directory, filepath, IfElse, process, bytestring, hslogger,
+ directory, filepath, IfElse, process, bytestring, hslogger, split,
unix, unix-compat, ansi-terminal, containers (>= 0.5), network, async,
- time, mtl, transformers, exceptions (>= 0.6), stm, text
+ time, mtl, transformers, exceptions (>= 0.6), stm, text, hashable
Library
+ Default-Language: Haskell98
GHC-Options: -Wall -fno-warn-tabs -O0
if impl(ghc >= 8.0)
GHC-Options: -fno-warn-redundant-constraints
@@ -73,9 +76,9 @@ Library
Hs-Source-Dirs: src
Build-Depends:
base >= 4.5, base < 5,
- MissingH, directory, filepath, IfElse, process, bytestring, hslogger,
+ directory, filepath, IfElse, process, bytestring, hslogger, split,
unix, unix-compat, ansi-terminal, containers (>= 0.5), network, async,
- time, mtl, transformers, exceptions (>= 0.6), stm, text
+ time, mtl, transformers, exceptions (>= 0.6), stm, text, hashable
Exposed-Modules:
Propellor
@@ -87,6 +90,7 @@ Library
Propellor.Property.Apt
Propellor.Property.Apt.PPA
Propellor.Property.Attic
+ Propellor.Property.Bootstrap
Propellor.Property.Borg
Propellor.Property.Ccache
Propellor.Property.Cmd
@@ -135,6 +139,7 @@ Library
Propellor.Property.PropellorRepo
Propellor.Property.Prosody
Propellor.Property.Reboot
+ Propellor.Property.Restic
Propellor.Property.Rsync
Propellor.Property.Sbuild
Propellor.Property.Scheduled
@@ -220,10 +225,13 @@ Library
Utility.Process.NonConcurrent
Utility.SafeCommand
Utility.Scheduled
+ Utility.Scheduled
+ Utility.Split
Utility.SystemDirectory
Utility.Table
Utility.ThreadScheduler
Utility.Tmp
+ Utility.Tuple
Utility.UserInfo
System.Console.Concurrent
System.Console.Concurrent.Internal
diff --git a/src/Propellor/Bootstrap.hs b/src/Propellor/Bootstrap.hs
index 9d2d603d..a3b7f315 100644
--- a/src/Propellor/Bootstrap.hs
+++ b/src/Propellor/Bootstrap.hs
@@ -83,7 +83,7 @@ depsCommand msys = "( " ++ intercalate " ; " (concat [osinstall, cabalinstall])
, "ghc"
, "cabal-install"
, "libghc-async-dev"
- , "libghc-missingh-dev"
+ , "libghc-split-dev"
, "libghc-hslogger-dev"
, "libghc-unix-compat-dev"
, "libghc-ansi-terminal-dev"
@@ -94,13 +94,14 @@ depsCommand msys = "( " ++ intercalate " ; " (concat [osinstall, cabalinstall])
, "libghc-exceptions-dev"
, "libghc-stm-dev"
, "libghc-text-dev"
+ , "libghc-hashable-dev"
]
fbsddeps =
[ "gnupg"
, "ghc"
, "hs-cabal-install"
, "hs-async"
- , "hs-MissingH"
+ , "hs-split"
, "hs-hslogger"
, "hs-unix-compat"
, "hs-ansi-terminal"
@@ -111,13 +112,14 @@ depsCommand msys = "( " ++ intercalate " ; " (concat [osinstall, cabalinstall])
, "hs-exceptions"
, "hs-stm"
, "hs-text"
+ , "hs-hashable"
]
archlinuxdeps =
[ "gnupg"
, "ghc"
, "cabal-install"
, "haskell-async"
- , "haskell-missingh"
+ , "haskell-split"
, "haskell-hslogger"
, "haskell-unix-compat"
, "haskell-ansi-terminal"
@@ -129,6 +131,7 @@ depsCommand msys = "( " ++ intercalate " ; " (concat [osinstall, cabalinstall])
, "haskell-exceptions"
, "haskell-stm"
, "haskell-text"
+ , "hashell-hashable"
]
installGitCommand :: Maybe System -> ShellCommand
@@ -144,7 +147,7 @@ installGitCommand msys = case msys of
-- assume a debian derived system when not specified
Nothing -> use apt
where
- use cmds = "if ! git --version >/dev/null; then " ++ intercalate " && " cmds ++ "; fi"
+ use cmds = "if ! git --version >/dev/null 2>&1; then " ++ intercalate " && " cmds ++ "; fi"
apt =
[ "apt-get update"
, "DEBIAN_FRONTEND=noninteractive apt-get -qq --no-install-recommends --no-upgrade -y install git"
diff --git a/src/Propellor/Gpg.hs b/src/Propellor/Gpg.hs
index 6ac153cc..43c4eddf 100644
--- a/src/Propellor/Gpg.hs
+++ b/src/Propellor/Gpg.hs
@@ -2,7 +2,6 @@ module Propellor.Gpg where
import System.IO
import Data.Maybe
-import Data.List.Utils
import Control.Monad
import Control.Applicative
import Prelude
@@ -18,6 +17,7 @@ import Utility.Misc
import Utility.Tmp
import Utility.Env
import Utility.Directory
+import Utility.Split
type KeyId = String
diff --git a/src/Propellor/Property.hs b/src/Propellor/Property.hs
index 94c82c9f..8b2a4e3d 100644
--- a/src/Propellor/Property.hs
+++ b/src/Propellor/Property.hs
@@ -50,8 +50,8 @@ import Data.Monoid
import Control.Monad.IfElse
import "mtl" Control.Monad.RWS.Strict
import System.Posix.Files
-import qualified Data.Hash.MD5 as MD5
import Data.List
+import Data.Hashable
import Control.Applicative
import Prelude
@@ -64,8 +64,8 @@ import Propellor.Info
import Propellor.EnsureProperty
import Utility.Exception
import Utility.Monad
-import Utility.Misc
import Utility.Directory
+import Utility.Misc
-- | Makes a perhaps non-idempotent Property be idempotent by using a flag
-- file to indicate whether it has run before.
@@ -228,12 +228,12 @@ changesFile p f = checkResult getstat comparestat p
-- Changes to mtime etc that do not change file content are treated as
-- NoChange.
changesFileContent :: Checkable p i => p i -> FilePath -> Property i
-changesFileContent p f = checkResult getmd5 comparemd5 p
+changesFileContent p f = checkResult gethash comparehash p
where
- getmd5 = catchMaybeIO $ MD5.md5 . MD5.Str <$> readFileStrict f
- comparemd5 oldmd5 = do
- newmd5 <- getmd5
- return $ if oldmd5 == newmd5 then NoChange else MadeChange
+ gethash = catchMaybeIO $ hash <$> readFileStrict f
+ comparehash oldhash = do
+ newhash <- gethash
+ return $ if oldhash == newhash then NoChange else MadeChange
-- | Determines if the first file is newer than the second file.
--
diff --git a/src/Propellor/Property/Apt/PPA.hs b/src/Propellor/Property/Apt/PPA.hs
index 346125ff..a8f7db15 100644
--- a/src/Propellor/Property/Apt/PPA.hs
+++ b/src/Propellor/Property/Apt/PPA.hs
@@ -6,10 +6,11 @@ module Propellor.Property.Apt.PPA where
import Data.List
import Control.Applicative
import Prelude
-import Data.String.Utils
import Data.String (IsString(..))
+
import Propellor.Base
import qualified Propellor.Property.Apt as Apt
+import Utility.Split
-- | Ensure software-properties-common is installed.
installed :: Property DebianLike
diff --git a/src/Propellor/Property/Bootstrap.hs b/src/Propellor/Property/Bootstrap.hs
new file mode 100644
index 00000000..5678a865
--- /dev/null
+++ b/src/Propellor/Property/Bootstrap.hs
@@ -0,0 +1,111 @@
+module Propellor.Property.Bootstrap (RepoSource(..), bootstrappedFrom, clonedFrom) where
+
+import Propellor.Base
+import Propellor.Bootstrap
+import Propellor.Property.Chroot
+
+import Data.List
+import qualified Data.ByteString as B
+
+-- | Where a propellor repository should be bootstrapped from.
+data RepoSource
+ = GitRepoUrl String
+ | GitRepoOutsideChroot
+ -- ^ When used in a chroot, this copies the git repository from
+ -- outside the chroot, including its configuration.
+
+-- | Bootstraps a propellor installation into
+-- /usr/local/propellor/
+--
+-- Normally, propellor is already bootstrapped when it runs, so this
+-- property is not useful. However, this can be useful inside a
+-- chroot used to build a disk image, to make the disk image
+-- have propellor installed.
+--
+-- The git repository is cloned (or pulled to update if it already exists).
+--
+-- All build dependencies are installed, using distribution packages
+-- or falling back to using cabal.
+bootstrappedFrom :: RepoSource -> Property Linux
+bootstrappedFrom reposource = go `requires` clonedFrom reposource
+ where
+ go :: Property Linux
+ go = property "Propellor bootstrapped" $ do
+ system <- getOS
+ assumeChange $ exposeTrueLocaldir $ const $
+ runShellCommand $ buildShellCommand
+ [ "cd " ++ localdir
+ , bootstrapPropellorCommand system
+ ]
+
+-- | Clones the propellor repeository into /usr/local/propellor/
+--
+-- If the propellor repo has already been cloned, pulls to get it
+-- up-to-date.
+clonedFrom :: RepoSource -> Property Linux
+clonedFrom reposource = case reposource of
+ GitRepoOutsideChroot -> go `onChange` copygitconfig
+ _ -> go
+ where
+ go :: Property Linux
+ go = property ("Propellor repo cloned from " ++ sourcedesc) $
+ ifM needclone (makeclone, updateclone)
+
+ makeclone = do
+ let tmpclone = localdir ++ ".tmpclone"
+ system <- getOS
+ assumeChange $ exposeTrueLocaldir $ \sysdir -> do
+ let originloc = case reposource of
+ GitRepoUrl s -> s
+ GitRepoOutsideChroot -> sysdir
+ runShellCommand $ buildShellCommand
+ [ installGitCommand system
+ , "rm -rf " ++ tmpclone
+ , "git clone " ++ shellEscape originloc ++ " " ++ tmpclone
+ , "mkdir -p " ++ localdir
+ -- This is done rather than deleting
+ -- the old localdir, because if it is bound
+ -- mounted from outside the chroot, deleting
+ -- it after unmounting in unshare will remove
+ -- the bind mount outside the unshare.
+ , "(cd " ++ tmpclone ++ " && tar c .) | (cd " ++ localdir ++ " && tar x)"
+ , "rm -rf " ++ tmpclone
+ ]
+
+ updateclone = assumeChange $ exposeTrueLocaldir $ const $
+ runShellCommand $ buildShellCommand
+ [ "cd " ++ localdir
+ , "git pull"
+ ]
+
+ -- Copy the git config of the repo outside the chroot into the
+ -- chroot. This way it has the same remote urls, and other git
+ -- configuration.
+ copygitconfig :: Property Linux
+ copygitconfig = property ("Propellor repo git config copied from outside the chroot") $ do
+ let gitconfig = localdir <> ".git" <> "config"
+ cfg <- liftIO $ B.readFile gitconfig
+ exposeTrueLocaldir $ const $
+ liftIO $ B.writeFile gitconfig cfg
+ return MadeChange
+
+ needclone = (inChroot <&&> truelocaldirisempty)
+ <||> (liftIO (not <$> doesDirectoryExist localdir))
+
+ truelocaldirisempty = exposeTrueLocaldir $ const $
+ runShellCommand ("test ! -d " ++ localdir ++ "/.git")
+
+ sourcedesc = case reposource of
+ GitRepoUrl s -> s
+ GitRepoOutsideChroot -> localdir ++ " outside the chroot"
+
+assumeChange :: Propellor Bool -> Propellor Result
+assumeChange a = do
+ ok <- a
+ return (cmdResult ok <> MadeChange)
+
+buildShellCommand :: [String] -> String
+buildShellCommand = intercalate "&&" . map (\c -> "(" ++ c ++ ")")
+
+runShellCommand :: String -> Propellor Bool
+runShellCommand s = liftIO $ boolSystem "sh" [ Param "-c", Param s]
diff --git a/src/Propellor/Property/Chroot.hs b/src/Propellor/Property/Chroot.hs
index 7738d97e..ad2ae705 100644
--- a/src/Propellor/Property/Chroot.hs
+++ b/src/Propellor/Property/Chroot.hs
@@ -11,6 +11,7 @@ module Propellor.Property.Chroot (
ChrootTarball(..),
noServices,
inChroot,
+ exposeTrueLocaldir,
-- * Internal use
provisioned',
propagateChrootInfo,
@@ -32,9 +33,9 @@ import qualified Propellor.Property.File as File
import qualified Propellor.Shim as Shim
import Propellor.Property.Mount
import Utility.FileMode
+import Utility.Split
import qualified Data.Map as M
-import Data.List.Utils
import System.Posix.Directory
import System.Console.Concurrent
@@ -295,6 +296,38 @@ setInChroot h = h { hostInfo = hostInfo h `addInfo` InfoVal (InChroot True) }
newtype InChroot = InChroot Bool
deriving (Typeable, Show)
+-- | Runs an action with the true localdir exposed,
+-- not the one bind-mounted into a chroot. The action is passed the
+-- path containing the contents of the localdir outside the chroot.
+--
+-- In a chroot, this is accomplished by temporily bind mounting the localdir
+-- to a temp directory, to preserve access to the original bind mount. Then
+-- we unmount the localdir to expose the true localdir. Finally, to cleanup,
+-- the temp directory is bind mounted back to the localdir.
+exposeTrueLocaldir :: (FilePath -> Propellor a) -> Propellor a
+exposeTrueLocaldir a = ifM inChroot
+ ( withTmpDirIn (takeDirectory localdir) "propellor.tmp" $ \tmpdir ->
+ bracket_
+ (movebindmount localdir tmpdir)
+ (movebindmount tmpdir localdir)
+ (a tmpdir)
+ , a localdir
+ )
+ where
+ movebindmount from to = liftIO $ do
+ run "mount" [Param "--bind", File from, File to]
+ -- Have to lazy unmount, because the propellor process
+ -- is running in the localdir that it's unmounting..
+ run "umount" [Param "-l", File from]
+ -- We were in the old localdir; move to the new one after
+ -- flipping the bind mounts. Otherwise, commands that try
+ -- to access the cwd will fail because it got umounted out
+ -- from under.
+ changeWorkingDirectory "/"
+ changeWorkingDirectory localdir
+ run cmd ps = unlessM (boolSystem cmd ps) $
+ error $ "exposeTrueLocaldir failed to run " ++ show (cmd, ps)
+
-- | Generates a Chroot that has all the properties of a Host.
--
-- Note that it's possible to create loops using this, where a host
diff --git a/src/Propellor/Property/Cmd.hs b/src/Propellor/Property/Cmd.hs
index 6b84acb5..f2de1a27 100644
--- a/src/Propellor/Property/Cmd.hs
+++ b/src/Propellor/Property/Cmd.hs
@@ -33,6 +33,7 @@ module Propellor.Property.Cmd (
Script,
scriptProperty,
userScriptProperty,
+ cmdResult,
-- * Lower-level interface for running commands
CommandParam(..),
boolSystem,
diff --git a/src/Propellor/Property/Docker.hs b/src/Propellor/Property/Docker.hs
index 1080418b..d53bab71 100644
--- a/src/Propellor/Property/Docker.hs
+++ b/src/Propellor/Property/Docker.hs
@@ -59,13 +59,13 @@ import qualified Propellor.Property.Pacman as Pacman
import qualified Propellor.Shim as Shim
import Utility.Path
import Utility.ThreadScheduler
+import Utility.Split
import Control.Concurrent.Async hiding (link)
import System.Posix.Directory
import System.Posix.Process
import Prelude hiding (init)
import Data.List hiding (init)
-import Data.List.Utils
import qualified Data.Map as M
import System.Console.Concurrent
diff --git a/src/Propellor/Property/Fstab.hs b/src/Propellor/Property/Fstab.hs
index 60f11d8e..29b85426 100644
--- a/src/Propellor/Property/Fstab.hs
+++ b/src/Propellor/Property/Fstab.hs
@@ -24,19 +24,32 @@ import Utility.Table
-- Note that if anything else is already mounted at the `MountPoint`, it
-- will be left as-is by this property.
mounted :: FsType -> Source -> MountPoint -> MountOpts -> Property Linux
-mounted fs src mnt opts = tightenTargets $
- "/etc/fstab" `File.containsLine` l
- `describe` (mnt ++ " mounted by fstab")
+mounted fs src mnt opts = tightenTargets $
+ listed fs src mnt opts
`onChange` mountnow
where
- l = intercalate "\t" [src, mnt, fs, formatMountOpts opts, dump, passno]
- dump = "0"
- passno = "2"
-- This use of mountPoints, which is linux-only, is why this
-- property currently only supports linux.
mountnow = check (notElem mnt <$> mountPoints) $
cmdProperty "mount" [mnt]
+-- | Ensures that </etc/fstab> contains a line mounting the specified
+-- `Source` on the specified `MountPoint`. Does not ensure that it's
+-- currently `mounted`.
+listed :: FsType -> Source -> MountPoint -> MountOpts -> Property UnixLike
+listed fs src mnt opts = "/etc/fstab" `File.containsLine` l
+ `describe` (mnt ++ " mounted by fstab")
+ where
+ l = intercalate "\t" [src, mnt, fs, formatMountOpts opts, dump, passno]
+ dump = "0"
+ passno = "2"
+
+-- | Ensures that </etc/fstab> contains a line enabling the specified
+-- `Source` to be used as swap space, and that it's enabled.
+swap :: Source -> Property Linux
+swap src = listed "swap" src "none" mempty
+ `onChange` swapOn src
+
newtype SwapPartition = SwapPartition FilePath
-- | Replaces </etc/fstab> with a file that should cause the currently
@@ -77,8 +90,8 @@ genFstab mnts swaps mnttransform = do
, pure "0"
, pure (if mnt == "/" then "1" else "2")
]
- getswapcfg (SwapPartition swap) = sequence
- [ fromMaybe swap <$> getM (\a -> a swap)
+ getswapcfg (SwapPartition s) = sequence
+ [ fromMaybe s <$> getM (\a -> a s)
[ uuidprefix getSourceUUID
, sourceprefix getSourceLabel
]
diff --git a/src/Propellor/Property/Hostname.hs b/src/Propellor/Property/Hostname.hs
index e1342d91..1eb9d690 100644
--- a/src/Propellor/Property/Hostname.hs
+++ b/src/Propellor/Property/Hostname.hs
@@ -3,9 +3,9 @@ module Propellor.Property.Hostname where
import Propellor.Base
import qualified Propellor.Property.File as File
import Propellor.Property.Chroot (inChroot)
+import Utility.Split
import Data.List
-import Data.List.Utils
-- | Ensures that the hostname is set using best practices, to whatever
-- name the `Host` has.
diff --git a/src/Propellor/Property/Mount.hs b/src/Propellor/Property/Mount.hs
index 026509a9..5dcc5fe1 100644
--- a/src/Propellor/Property/Mount.hs
+++ b/src/Propellor/Property/Mount.hs
@@ -40,6 +40,9 @@ formatMountOpts (MountOpts []) = "defaults"
formatMountOpts (MountOpts l) = intercalate "," l
-- | Mounts a device, without listing it in </etc/fstab>.
+--
+-- Note that this property will fail if the device is already mounted
+-- at the MountPoint.
mounted :: FsType -> Source -> MountPoint -> MountOpts -> Property UnixLike
mounted fs src mnt opts = property (mnt ++ " mounted") $
toResult <$> liftIO (mount fs src mnt opts)
@@ -52,6 +55,17 @@ bindMount src dest = tightenTargets $
`assume` MadeChange
`describe` ("bind mounted " ++ src ++ " to " ++ dest)
+-- | Enables swapping to a device, which must be formatted already as a swap
+-- partition.
+swapOn :: Source -> RevertableProperty Linux Linux
+swapOn mnt = tightenTargets doswapon <!> tightenTargets doswapoff
+ where
+ swaps = lines <$> readProcess "swapon" ["--show=NAME"]
+ doswapon = check (notElem mnt <$> swaps) $
+ cmdProperty "swapon" [mnt]
+ doswapoff = check (elem mnt <$> swaps) $
+ cmdProperty "swapoff" [mnt]
+
mount :: FsType -> Source -> MountPoint -> MountOpts -> IO Bool
mount fs src mnt opts = boolSystem "mount" $
[ Param "-t", Param fs
diff --git a/src/Propellor/Property/Restic.hs b/src/Propellor/Property/Restic.hs
new file mode 100644
index 00000000..64cd4091
--- /dev/null
+++ b/src/Propellor/Property/Restic.hs
@@ -0,0 +1,202 @@
+-- | Maintainer: Félix Sipma <felix+propellor@gueux.org>
+--
+-- Support for the restic backup tool <https://github.com/restic/restic>
+
+module Propellor.Property.Restic
+ ( ResticRepo (..)
+ , installed
+ , repoExists
+ , init
+ , restored
+ , backup
+ , KeepPolicy (..)
+ ) where
+
+import Propellor.Base hiding (init)
+import Prelude hiding (init)
+import qualified Propellor.Property.Apt as Apt
+import qualified Propellor.Property.Cron as Cron
+import qualified Propellor.Property.File as File
+import Data.List (intercalate)
+
+type Url = String
+
+type ResticParam = String
+
+data ResticRepo
+ = Direct FilePath
+ | SFTP User HostName FilePath
+ | REST Url
+
+instance ConfigurableValue ResticRepo where
+ val (Direct fp) = fp
+ val (SFTP u h fp) = "sftp:" ++ val u ++ "@" ++ val h ++ ":" ++ fp
+ val (REST url) = "rest:" ++ url
+
+installed :: Property DebianLike
+installed = withOS desc $ \w o -> case o of
+ (Just (System (Debian _ (Stable "jessie")) _)) -> ensureProperty w $
+ Apt.installedBackport ["restic"]
+ _ -> ensureProperty w $
+ Apt.installed ["restic"]
+ where
+ desc = "installed restic"
+
+repoExists :: ResticRepo -> IO Bool
+repoExists repo = boolSystem "restic"
+ [ Param "-r"
+ , File (val repo)
+ , Param "--password-file"
+ , File (getPasswordFile repo)
+ , Param "snapshots"
+ ]
+
+passwordFileDir :: FilePath
+passwordFileDir = "/etc/restic-keys"
+
+getPasswordFile :: ResticRepo -> FilePath
+getPasswordFile repo = passwordFileDir </> File.configFileName (val repo)
+
+passwordFileConfigured :: ResticRepo -> Property (HasInfo + UnixLike)
+passwordFileConfigured repo = propertyList "restic password file" $ props
+ & File.dirExists passwordFileDir
+ & File.mode passwordFileDir 0O2700
+ & getPasswordFile repo `File.hasPrivContent` hostContext
+
+-- | Inits a new restic repository
+init :: ResticRepo -> Property (HasInfo + DebianLike)
+init repo = check (not <$> repoExists repo) (cmdProperty "restic" initargs)
+ `requires` installed
+ `requires` passwordFileConfigured repo
+ where
+ initargs =
+ [ "-r"
+ , val repo
+ , "--password-file"
+ , getPasswordFile repo
+ , "init"
+ ]
+
+-- | Restores a directory from a restic backup.
+--
+-- Only does anything if the directory does not exist, or exists,
+-- but is completely empty.
+--
+-- The restore is performed atomically; restoring to a temp directory
+-- and then moving it to the directory.
+restored :: FilePath -> ResticRepo -> Property (HasInfo + DebianLike)
+restored dir repo = go
+ `requires` init repo
+ where
+ go :: Property DebianLike
+ go = property (dir ++ " restored by restic") $ ifM (liftIO needsRestore)
+ ( do
+ warningMessage $ dir ++ " is empty/missing; restoring from backup ..."
+ liftIO restore
+ , noChange
+ )
+
+ needsRestore = null <$> catchDefaultIO [] (dirContents dir)
+
+ restore = withTmpDirIn (takeDirectory dir) "restic-restore" $ \tmpdir -> do
+ ok <- boolSystem "restic"
+ [ Param "-r"
+ , File (val repo)
+ , Param "--password-file"
+ , File (getPasswordFile repo)
+ , Param "restore"
+ , Param "latest"
+ , Param "--target"
+ , File tmpdir
+ ]
+ let restoreddir = tmpdir ++ "/" ++ dir
+ ifM (pure ok <&&> doesDirectoryExist restoreddir)
+ ( do
+ void $ tryIO $ removeDirectory dir
+ renameDirectory restoreddir dir
+ return MadeChange
+ , return FailedChange
+ )
+
+-- | Installs a cron job that causes a given directory to be backed
+-- up, by running restic with some parameters.
+--
+-- If the directory does not exist, or exists but is completely empty,
+-- this Property will immediately restore it from an existing backup.
+--
+-- So, this property can be used to deploy a directory of content
+-- to a host, while also ensuring any changes made to it get backed up.
+-- For example:
+--
+-- > & Restic.backup "/srv/git"
+-- > (Restic.SFTP (User root) (HostName myserver) /mnt/backup/git.restic")
+-- > Cron.Daily
+-- > ["--exclude=/srv/git/tobeignored"]
+-- > [Restic.KeepDays 7, Restic.KeepWeeks 4, Restic.KeepMonths 6, Restic.KeepYears 1]
+--
+-- Since restic uses a fair amount of system resources, only one restic
+-- backup job will be run at a time. Other jobs will wait their turns to
+-- run.
+backup :: FilePath -> ResticRepo -> Cron.Times -> [ResticParam] -> [KeepPolicy] -> Property (HasInfo + DebianLike)
+backup dir repo crontimes extraargs kp = backup' dir repo crontimes extraargs kp
+ `requires` restored dir repo
+
+-- | Does a backup, but does not automatically restore.
+backup' :: FilePath -> ResticRepo -> Cron.Times -> [ResticParam] -> [KeepPolicy] -> Property (HasInfo + DebianLike)
+backup' dir repo crontimes extraargs kp = cronjob
+ `describe` desc
+ `requires` init repo
+ where
+ desc = val repo ++ " restic backup"
+ cronjob = Cron.niceJob ("restic_backup" ++ dir) crontimes (User "root") "/" $
+ "flock " ++ shellEscape lockfile ++ " sh -c " ++ shellEscape backupcmd
+ lockfile = "/var/lock/propellor-restic.lock"
+ backupcmd = intercalate " && " $
+ createCommand
+ : if null kp then [] else [pruneCommand]
+ createCommand = unwords $
+ [ "restic"
+ , "-r"
+ , shellEscape (val repo)
+ , "--password-file"
+ , shellEscape (getPasswordFile repo)
+ ]
+ ++ map shellEscape extraargs ++
+ [ "backup"
+ , shellEscape dir
+ ]
+ pruneCommand = unwords $
+ [ "restic"
+ , "-r"
+ , shellEscape (val repo)
+ , "--password-file"
+ , shellEscape (getPasswordFile repo)
+ , "forget"
+ , "--prune"
+ ]
+ ++
+ map keepParam kp
+
+-- | Constructs a ResticParam that specifies which old backup generations to
+-- keep. By default, all generations are kept. However, when this parameter is
+-- passed to the `backup` property, they will run restic prune to clean out
+-- generations not specified here.
+keepParam :: KeepPolicy -> ResticParam
+keepParam (KeepLast n) = "--keep-last=" ++ val n
+keepParam (KeepHours n) = "--keep-hourly=" ++ val n
+keepParam (KeepDays n) = "--keep-daily=" ++ val n
+keepParam (KeepWeeks n) = "--keep-weekly=" ++ val n
+keepParam (KeepMonths n) = "--keep-monthly=" ++ val n
+keepParam (KeepYears n) = "--keep-yearly=" ++ val n
+
+-- | Policy for backup generations to keep. For example, KeepDays 30 will
+-- keep the latest backup for each day when a backup was made, and keep the
+-- last 30 such backups. When multiple KeepPolicies are combined together,
+-- backups meeting any policy are kept. See restic's man page for details.
+data KeepPolicy
+ = KeepLast Int
+ | KeepHours Int
+ | KeepDays Int
+ | KeepWeeks Int
+ | KeepMonths Int
+ | KeepYears Int
diff --git a/src/Propellor/Property/Sbuild.hs b/src/Propellor/Property/Sbuild.hs
index 00109381..460d0b16 100644
--- a/src/Propellor/Property/Sbuild.hs
+++ b/src/Propellor/Property/Sbuild.hs
@@ -98,10 +98,10 @@ import qualified Propellor.Property.File as File
import qualified Propellor.Property.Schroot as Schroot
import qualified Propellor.Property.Reboot as Reboot
import qualified Propellor.Property.User as User
-
import Utility.FileMode
+import Utility.Split
+
import Data.List
-import Data.List.Utils
type Suite = String
diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs
index 28246dfe..9b4a3378 100644
--- a/src/Propellor/Property/SiteSpecific/JoeySites.hs
+++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs
@@ -22,10 +22,10 @@ import qualified Propellor.Property.Systemd as Systemd
import qualified Propellor.Property.Fail2Ban as Fail2Ban
import qualified Propellor.Property.LetsEncrypt as LetsEncrypt
import Utility.FileMode
+import Utility.Split
import Data.List
import System.Posix.Files
-import Data.String.Utils
scrollBox :: Property (HasInfo + DebianLike)
scrollBox = propertyList "scroll server" $ props
@@ -573,8 +573,8 @@ kiteMailServer = propertyList "kitenet.net mail server" $ props
, "# Enable postgrey."
, "smtpd_recipient_restrictions = permit_tls_clientcerts,permit_sasl_authenticated,,permit_mynetworks,reject_unauth_destination,check_policy_service inet:127.0.0.1:10023"
- , "# Enable spamass-milter, amavis-milter, opendkim"
- , "smtpd_milters = unix:/spamass/spamass.sock unix:amavis/amavis.sock inet:localhost:8891"
+ , "# Enable spamass-milter, amavis-milter (opendkim is not enabled because it causes mails forwarded from eg gmail to be rejected)"
+ , "smtpd_milters = unix:/spamass/spamass.sock unix:amavis/amavis.sock"
, "# opendkim is used for outgoing mail"
, "non_smtpd_milters = inet:localhost:8891"
, "milter_connect_macros = j {daemon_name} v {if_name} _"
diff --git a/src/Propellor/Property/Systemd.hs b/src/Propellor/Property/Systemd.hs
index 7c40bd16..d1a94aa8 100644
--- a/src/Propellor/Property/Systemd.hs
+++ b/src/Propellor/Property/Systemd.hs
@@ -55,9 +55,9 @@ import qualified Propellor.Property.Apt as Apt
import qualified Propellor.Property.File as File
import Propellor.Property.Systemd.Core
import Utility.FileMode
+import Utility.Split
import Data.List
-import Data.List.Utils
import qualified Data.Map as M
type ServiceName = String
diff --git a/src/Propellor/Property/ZFS/Process.hs b/src/Propellor/Property/ZFS/Process.hs
index 372bac6d..42b23df2 100644
--- a/src/Propellor/Property/ZFS/Process.hs
+++ b/src/Propellor/Property/ZFS/Process.hs
@@ -5,7 +5,8 @@
module Propellor.Property.ZFS.Process where
import Propellor.Base
-import Data.String.Utils (split)
+import Utility.Split
+
import Data.List
-- | Gets the properties of a ZFS volume.
diff --git a/src/Propellor/Spin.hs b/src/Propellor/Spin.hs
index 447f8e9f..3b3729f9 100644
--- a/src/Propellor/Spin.hs
+++ b/src/Propellor/Spin.hs
@@ -87,7 +87,7 @@ spin' mprivdata relay target hst = do
-- And now we can run it.
unlessM (boolSystemNonConcurrent "ssh" (map Param $ cacheparams ++ ["-t", sshtarget, shellWrap runcmd])) $
- error "remote propellor failed"
+ giveup "remote propellor failed"
where
hn = fromMaybe target relay
sys = case fromInfo (hostInfo hst) of
diff --git a/src/Propellor/Ssh.hs b/src/Propellor/Ssh.hs
index a7a9452e..a8f50ed0 100644
--- a/src/Propellor/Ssh.hs
+++ b/src/Propellor/Ssh.hs
@@ -6,7 +6,7 @@ import Utility.FileSystemEncoding
import System.PosixCompat
import Data.Time.Clock.POSIX
-import qualified Data.Hash.MD5 as MD5
+import Data.Hashable
-- Parameters can be passed to both ssh and scp, to enable a ssh connection
-- caching socket.
@@ -50,24 +50,22 @@ sshCachingParams hn = do
-- 100 bytes. Try to never construct a filename longer than that.
--
-- When space allows, include the full hostname in the socket filename.
--- Otherwise, include at least a partial md5sum of it,
--- to avoid using the same socket file for multiple hosts.
+-- Otherwise, a checksum of the hostname is included in the name, to
+-- avoid using the same socket file for multiple hosts.
socketFile :: FilePath -> HostName -> FilePath
socketFile home hn = selectSocketFile
- [ sshdir </> hn ++ ".sock"
+ [ sshdir </> hn ++ ".sock"
, sshdir </> hn
- , sshdir </> take 10 hn ++ "-" ++ md5
- , sshdir </> md5
- , home </> ".propellor-" ++ md5
+ , sshdir </> take 10 hn ++ "-" ++ checksum
+ , sshdir </> checksum
]
- (".propellor-" ++ md5)
+ (home </> ".propellor-" ++ checksum)
where
sshdir = home </> ".ssh" </> "propellor"
- md5 = take 9 $ MD5.md5s $ MD5.Str hn
+ checksum = take 9 $ show $ abs $ hash hn
selectSocketFile :: [FilePath] -> FilePath -> FilePath
selectSocketFile [] d = d
-selectSocketFile [f] _ = f
selectSocketFile (f:fs) d
| valid_unix_socket_path f = f
| otherwise = selectSocketFile fs d
diff --git a/src/Propellor/Types/Dns.hs b/src/Propellor/Types/Dns.hs
index 8d62e63b..87756d81 100644
--- a/src/Propellor/Types/Dns.hs
+++ b/src/Propellor/Types/Dns.hs
@@ -6,12 +6,12 @@ import Propellor.Types.OS (HostName)
import Propellor.Types.Empty
import Propellor.Types.Info
import Propellor.Types.ConfigurableValue
+import Utility.Split
import Data.Word
import qualified Data.Map as M
import qualified Data.Set as S
import Data.List
-import Data.String.Utils (split, replace)
import Data.Monoid
import Prelude
@@ -102,14 +102,14 @@ data Record
type ReverseIP = String
reverseIP :: IPAddr -> ReverseIP
-reverseIP (IPv4 addr) = intercalate "." (reverse $ split "." addr) ++ ".in-addr.arpa"
+reverseIP (IPv4 addr) = intercalate "." (reverse $ splitc '.' addr) ++ ".in-addr.arpa"
reverseIP addr@(IPv6 _) = reverse (intersperse '.' $ replace ":" "" $ val $ canonicalIP addr) ++ ".ip6.arpa"
-- | Converts an IP address (particularly IPv6) to canonical, fully
-- expanded form.
canonicalIP :: IPAddr -> IPAddr
canonicalIP (IPv4 addr) = IPv4 addr
-canonicalIP (IPv6 addr) = IPv6 $ intercalate ":" $ map canonicalGroup $ split ":" $ replaceImplicitGroups addr
+canonicalIP (IPv6 addr) = IPv6 $ intercalate ":" $ map canonicalGroup $ splitc ':' $ replaceImplicitGroups addr
where
canonicalGroup g
| l <= 4 = replicate (4 - l) '0' ++ g
@@ -117,7 +117,7 @@ canonicalIP (IPv6 addr) = IPv6 $ intercalate ":" $ map canonicalGroup $ split ":
where
l = length g
emptyGroups n = iterate (++ ":") "" !! n
- numberOfImplicitGroups a = 8 - length (split ":" $ replace "::" "" a)
+ numberOfImplicitGroups a = 8 - length (splitc ':' $ replace "::" "" a)
replaceImplicitGroups a = concat $ aux $ split "::" a
where
aux [] = []
diff --git a/src/Propellor/Types/ZFS.hs b/src/Propellor/Types/ZFS.hs
index 22b848fa..c68f6ba5 100644
--- a/src/Propellor/Types/ZFS.hs
+++ b/src/Propellor/Types/ZFS.hs
@@ -7,10 +7,10 @@
module Propellor.Types.ZFS where
import Propellor.Types.ConfigurableValue
+import Utility.Split
import Data.String
import qualified Data.Set as Set
-import qualified Data.String.Utils as SU
import Data.List
-- | A single ZFS filesystem.
@@ -46,7 +46,7 @@ instance Show ZDataset where
show = val
instance IsString ZDataset where
- fromString s = ZDataset $ SU.split "/" s
+ fromString s = ZDataset $ splitc '/' s
instance IsString ZPool where
fromString p = ZPool p
diff --git a/src/Utility/DataUnits.hs b/src/Utility/DataUnits.hs
index 6e40932e..a6c9ffcf 100644
--- a/src/Utility/DataUnits.hs
+++ b/src/Utility/DataUnits.hs
@@ -45,6 +45,7 @@ module Utility.DataUnits (
ByteSize,
roughSize,
+ roughSize',
compareSizes,
readSize
) where
@@ -109,7 +110,10 @@ oldSchoolUnits = zipWith (curry mingle) storageUnits memoryUnits
{- approximate display of a particular number of bytes -}
roughSize :: [Unit] -> Bool -> ByteSize -> String
-roughSize units short i
+roughSize units short i = roughSize' units short 2 i
+
+roughSize' :: [Unit] -> Bool -> Int -> ByteSize -> String
+roughSize' units short precision i
| i < 0 = '-' : findUnit units' (negate i)
| otherwise = findUnit units' i
where
@@ -123,7 +127,7 @@ roughSize units short i
showUnit x (Unit size abbrev name) = s ++ " " ++ unit
where
v = (fromInteger x :: Double) / fromInteger size
- s = showImprecise 2 v
+ s = showImprecise precision v
unit
| short = abbrev
| s == "1" = name
diff --git a/src/Utility/FileMode.hs b/src/Utility/FileMode.hs
index bb3780c6..d9a26944 100644
--- a/src/Utility/FileMode.hs
+++ b/src/Utility/FileMode.hs
@@ -1,6 +1,6 @@
{- File mode utilities.
-
- - Copyright 2010-2012 Joey Hess <id@joeyh.name>
+ - Copyright 2010-2017 Joey Hess <id@joeyh.name>
-
- License: BSD-2-clause
-}
@@ -130,6 +130,21 @@ withUmask umask a = bracket setup cleanup go
withUmask _ a = a
#endif
+getUmask :: IO FileMode
+#ifndef mingw32_HOST_OS
+getUmask = bracket setup cleanup return
+ where
+ setup = setFileCreationMask nullFileMode
+ cleanup = setFileCreationMask
+#else
+getUmask = return nullFileMode
+#endif
+
+defaultFileMode :: IO FileMode
+defaultFileMode = do
+ umask <- getUmask
+ return $ intersectFileModes (complement umask) stdFileMode
+
combineModes :: [FileMode] -> FileMode
combineModes [] = 0
combineModes [m] = m
@@ -162,7 +177,10 @@ writeFileProtected file content = writeFileProtected' file
(\h -> hPutStr h content)
writeFileProtected' :: FilePath -> (Handle -> IO ()) -> IO ()
-writeFileProtected' file writer = withUmask 0o0077 $
+writeFileProtected' file writer = protectedOutput $
withFile file WriteMode $ \h -> do
void $ tryIO $ modifyFileMode file $ removeModes otherGroupModes
writer h
+
+protectedOutput :: IO a -> IO a
+protectedOutput = withUmask 0o0077
diff --git a/src/Utility/FileSystemEncoding.hs b/src/Utility/FileSystemEncoding.hs
index be43ace9..444dc4a9 100644
--- a/src/Utility/FileSystemEncoding.hs
+++ b/src/Utility/FileSystemEncoding.hs
@@ -10,8 +10,8 @@
module Utility.FileSystemEncoding (
useFileSystemEncoding,
+ fileEncoding,
withFilePath,
- md5FilePath,
decodeBS,
encodeBS,
decodeW8,
@@ -19,6 +19,10 @@ module Utility.FileSystemEncoding (
encodeW8NUL,
decodeW8NUL,
truncateFilePath,
+ s2w8,
+ w82s,
+ c2w8,
+ w82c,
) where
import qualified GHC.Foreign as GHC
@@ -26,17 +30,15 @@ import qualified GHC.IO.Encoding as Encoding
import Foreign.C
import System.IO
import System.IO.Unsafe
-import qualified Data.Hash.MD5 as MD5
import Data.Word
-import Data.Bits.Utils
import Data.List
-import Data.List.Utils
import qualified Data.ByteString.Lazy as L
#ifdef mingw32_HOST_OS
import qualified Data.ByteString.Lazy.UTF8 as L8
#endif
import Utility.Exception
+import Utility.Split
{- Makes all subsequent Handles that are opened, as well as stdio Handles,
- use the filesystem encoding, instead of the encoding of the current
@@ -63,6 +65,13 @@ useFileSystemEncoding = do
hSetEncoding stderr e
Encoding.setLocaleEncoding e
+fileEncoding :: Handle -> IO ()
+#ifndef mingw32_HOST_OS
+fileEncoding h = hSetEncoding h =<< Encoding.getFileSystemEncoding
+#else
+fileEncoding h = hSetEncoding h Encoding.utf8
+#endif
+
{- Marshal a Haskell FilePath into a NUL terminated C string using temporary
- storage. The FilePath is encoded using the filesystem encoding,
- reversing the decoding that should have been done when the FilePath
@@ -93,10 +102,6 @@ _encodeFilePath fp = unsafePerformIO $ do
GHC.withCString enc fp (GHC.peekCString Encoding.char8)
`catchNonAsync` (\_ -> return fp)
-{- Encodes a FilePath into a Md5.Str, applying the filesystem encoding. -}
-md5FilePath :: FilePath -> MD5.Str
-md5FilePath = MD5.Str . _encodeFilePath
-
{- Decodes a ByteString into a FilePath, applying the filesystem encoding. -}
decodeBS :: L.ByteString -> FilePath
#ifndef mingw32_HOST_OS
@@ -137,14 +142,26 @@ decodeW8 = s2w8 . _encodeFilePath
{- Like encodeW8 and decodeW8, but NULs are passed through unchanged. -}
encodeW8NUL :: [Word8] -> FilePath
-encodeW8NUL = intercalate nul . map encodeW8 . split (s2w8 nul)
+encodeW8NUL = intercalate [nul] . map encodeW8 . splitc (c2w8 nul)
where
- nul = ['\NUL']
+ nul = '\NUL'
decodeW8NUL :: FilePath -> [Word8]
-decodeW8NUL = intercalate (s2w8 nul) . map decodeW8 . split nul
+decodeW8NUL = intercalate [c2w8 nul] . map decodeW8 . splitc nul
where
- nul = ['\NUL']
+ nul = '\NUL'
+
+c2w8 :: Char -> Word8
+c2w8 = fromIntegral . fromEnum
+
+w82c :: Word8 -> Char
+w82c = toEnum . fromIntegral
+
+s2w8 :: String -> [Word8]
+s2w8 = map c2w8
+
+w82s :: [Word8] -> String
+w82s = map w82c
{- Truncates a FilePath to the given number of bytes (or less),
- as represented on disk.
diff --git a/src/Utility/LinuxMkLibs.hs b/src/Utility/LinuxMkLibs.hs
index 122f3964..15f82fd1 100644
--- a/src/Utility/LinuxMkLibs.hs
+++ b/src/Utility/LinuxMkLibs.hs
@@ -12,10 +12,10 @@ import Utility.Directory
import Utility.Process
import Utility.Monad
import Utility.Path
+import Utility.Split
import Data.Maybe
import System.FilePath
-import Data.List.Utils
import System.Posix.Files
import Data.Char
import Control.Monad.IfElse
diff --git a/src/Utility/PartialPrelude.hs b/src/Utility/PartialPrelude.hs
index 55795563..47e98318 100644
--- a/src/Utility/PartialPrelude.hs
+++ b/src/Utility/PartialPrelude.hs
@@ -2,7 +2,7 @@
- bugs.
-
- This exports functions that conflict with the prelude, which avoids
- - them being accidentially used.
+ - them being accidentally used.
-}
{-# OPTIONS_GHC -fno-warn-tabs #-}
diff --git a/src/Utility/Path.hs b/src/Utility/Path.hs
index 3ee5ff39..0779d167 100644
--- a/src/Utility/Path.hs
+++ b/src/Utility/Path.hs
@@ -10,7 +10,6 @@
module Utility.Path where
-import Data.String.Utils
import System.FilePath
import Data.List
import Data.Maybe
@@ -25,10 +24,10 @@ import System.Posix.Files
import Utility.Exception
#endif
-import qualified "MissingH" System.Path as MissingH
import Utility.Monad
import Utility.UserInfo
import Utility.Directory
+import Utility.Split
{- Simplifies a path, removing any "." component, collapsing "dir/..",
- and removing the trailing path separator.
@@ -68,18 +67,6 @@ simplifyPath path = dropTrailingPathSeparator $
absPathFrom :: FilePath -> FilePath -> FilePath
absPathFrom dir path = simplifyPath (combine dir path)
-{- On Windows, this converts the paths to unix-style, in order to run
- - MissingH's absNormPath on them. -}
-absNormPathUnix :: FilePath -> FilePath -> Maybe FilePath
-#ifndef mingw32_HOST_OS
-absNormPathUnix dir path = MissingH.absNormPath dir path
-#else
-absNormPathUnix dir path = todos <$> MissingH.absNormPath (fromdos dir) (fromdos path)
- where
- fromdos = replace "\\" "/"
- todos = replace "/" "\\"
-#endif
-
{- takeDirectory "foo/bar/" is "foo/bar". This instead yields "foo" -}
parentDir :: FilePath -> FilePath
parentDir = takeDirectory . dropTrailingPathSeparator
@@ -89,12 +76,13 @@ parentDir = takeDirectory . dropTrailingPathSeparator
upFrom :: FilePath -> Maybe FilePath
upFrom dir
| length dirs < 2 = Nothing
- | otherwise = Just $ joinDrive drive (intercalate s $ init dirs)
+ | otherwise = Just $ joinDrive drive $ intercalate s $ init dirs
where
- -- on Unix, the drive will be "/" when the dir is absolute, otherwise ""
+ -- on Unix, the drive will be "/" when the dir is absolute,
+ -- otherwise ""
(drive, path) = splitDrive dir
- dirs = filter (not . null) $ split s path
s = [pathSeparator]
+ dirs = filter (not . null) $ split s path
prop_upFrom_basics :: FilePath -> Bool
prop_upFrom_basics dir
@@ -149,11 +137,11 @@ relPathDirToFile from to = relPathDirToFileAbs <$> absPath from <*> absPath to
relPathDirToFileAbs :: FilePath -> FilePath -> FilePath
relPathDirToFileAbs from to
| takeDrive from /= takeDrive to = to
- | otherwise = intercalate s $ dotdots ++ uncommon
+ | otherwise = joinPath $ dotdots ++ uncommon
where
- s = [pathSeparator]
- pfrom = split s from
- pto = split s to
+ pfrom = sp from
+ pto = sp to
+ sp = map dropTrailingPathSeparator . splitPath
common = map fst $ takeWhile same $ zip pfrom pto
same (c,d) = c == d
uncommon = drop numcommon pto
@@ -227,6 +215,8 @@ inPath command = isJust <$> searchPath command
-
- The command may be fully qualified already, in which case it will
- be returned if it exists.
+ -
+ - Note that this will find commands in PATH that are not executable.
-}
searchPath :: String -> IO (Maybe FilePath)
searchPath command
diff --git a/src/Utility/Process.hs b/src/Utility/Process.hs
index ed02f49e..6d981cb5 100644
--- a/src/Utility/Process.hs
+++ b/src/Utility/Process.hs
@@ -174,22 +174,21 @@ createBackgroundProcess p a = a =<< createProcess p
-- returns a transcript combining its stdout and stderr, and
-- whether it succeeded or failed.
processTranscript :: String -> [String] -> (Maybe String) -> IO (String, Bool)
-processTranscript = processTranscript' id
+processTranscript cmd opts = processTranscript' (proc cmd opts)
-processTranscript' :: (CreateProcess -> CreateProcess) -> String -> [String] -> Maybe String -> IO (String, Bool)
-processTranscript' modproc cmd opts input = do
+processTranscript' :: CreateProcess -> Maybe String -> IO (String, Bool)
+processTranscript' cp input = do
#ifndef mingw32_HOST_OS
{- This implementation interleves stdout and stderr in exactly the order
- the process writes them. -}
(readf, writef) <- System.Posix.IO.createPipe
readh <- System.Posix.IO.fdToHandle readf
writeh <- System.Posix.IO.fdToHandle writef
- p@(_, _, _, pid) <- createProcess $ modproc $
- (proc cmd opts)
- { std_in = if isJust input then CreatePipe else Inherit
- , std_out = UseHandle writeh
- , std_err = UseHandle writeh
- }
+ p@(_, _, _, pid) <- createProcess $ cp
+ { std_in = if isJust input then CreatePipe else Inherit
+ , std_out = UseHandle writeh
+ , std_err = UseHandle writeh
+ }
hClose writeh
get <- mkreader readh
@@ -200,12 +199,11 @@ processTranscript' modproc cmd opts input = do
return (transcript, ok)
#else
{- This implementation for Windows puts stderr after stdout. -}
- p@(_, _, _, pid) <- createProcess $ modproc $
- (proc cmd opts)
- { std_in = if isJust input then CreatePipe else Inherit
- , std_out = CreatePipe
- , std_err = CreatePipe
- }
+ p@(_, _, _, pid) <- createProcess $ cp
+ { std_in = if isJust input then CreatePipe else Inherit
+ , std_out = CreatePipe
+ , std_err = CreatePipe
+ }
getout <- mkreader (stdoutHandle p)
geterr <- mkreader (stderrHandle p)
diff --git a/src/Utility/SafeCommand.hs b/src/Utility/SafeCommand.hs
index 5ce17a84..eb34d3de 100644
--- a/src/Utility/SafeCommand.hs
+++ b/src/Utility/SafeCommand.hs
@@ -11,7 +11,7 @@ module Utility.SafeCommand where
import System.Exit
import Utility.Process
-import Data.String.Utils
+import Utility.Split
import System.FilePath
import Data.Char
import Data.List
@@ -86,7 +86,7 @@ shellEscape :: String -> String
shellEscape f = "'" ++ escaped ++ "'"
where
-- replace ' with '"'"'
- escaped = intercalate "'\"'\"'" $ split "'" f
+ escaped = intercalate "'\"'\"'" $ splitc '\'' f
-- | Unescapes a set of shellEscaped words or filenames.
shellUnEscape :: String -> [String]
diff --git a/src/Utility/Scheduled.hs b/src/Utility/Scheduled.hs
index d23aaf03..b68ff901 100644
--- a/src/Utility/Scheduled.hs
+++ b/src/Utility/Scheduled.hs
@@ -29,6 +29,7 @@ module Utility.Scheduled (
import Utility.Data
import Utility.PartialPrelude
import Utility.Misc
+import Utility.Tuple
import Data.List
import Data.Time.Clock
@@ -37,7 +38,6 @@ import Data.Time.Calendar
import Data.Time.Calendar.WeekDate
import Data.Time.Calendar.OrdinalDate
import Data.Time.Format ()
-import Data.Tuple.Utils
import Data.Char
import Control.Applicative
import Prelude
diff --git a/src/Utility/Split.hs b/src/Utility/Split.hs
new file mode 100644
index 00000000..decfe7d3
--- /dev/null
+++ b/src/Utility/Split.hs
@@ -0,0 +1,30 @@
+{- split utility functions
+ -
+ - Copyright 2017 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+{-# OPTIONS_GHC -fno-warn-tabs #-}
+
+module Utility.Split where
+
+import Data.List (intercalate)
+import Data.List.Split (splitOn)
+
+-- | same as Data.List.Utils.split
+--
+-- intercalate x . splitOn x === id
+split :: Eq a => [a] -> [a] -> [[a]]
+split = splitOn
+
+-- | Split on a single character. This is over twice as fast as using
+-- split on a list of length 1, while producing identical results. -}
+splitc :: Eq c => c -> [c] -> [[c]]
+splitc c s = case break (== c) s of
+ (i, _c:rest) -> i : splitc c rest
+ (i, []) -> i : []
+
+-- | same as Data.List.Utils.replace
+replace :: Eq a => [a] -> [a] -> [a] -> [a]
+replace old new = intercalate new . split old
diff --git a/src/Utility/Tuple.hs b/src/Utility/Tuple.hs
new file mode 100644
index 00000000..25c6e8f3
--- /dev/null
+++ b/src/Utility/Tuple.hs
@@ -0,0 +1,17 @@
+{- tuple utility functions
+ -
+ - Copyright 2017 Joey Hess <id@joeyh.name>
+ -
+ - License: BSD-2-clause
+ -}
+
+module Utility.Tuple where
+
+fst3 :: (a,b,c) -> a
+fst3 (a,_,_) = a
+
+snd3 :: (a,b,c) -> b
+snd3 (_,b,_) = b
+
+thd3 :: (a,b,c) -> c
+thd3 (_,_,c) = c