From 07bc9628297227f3104e95584f2001460dec1e1d Mon Sep 17 00:00:00 2001 From: eabdullin Date: Wed, 20 Nov 2024 13:21:06 +0000 Subject: [PATCH] import RHEL 10 Beta libguestfs-1.52.2-4.el10 --- .gitignore | 4 +- .libguestfs.metadata | 2 - ...nt-partition-GPT-functions-using-sfd.patch | 657 +++ ...x-parsing-in-part_get_gpt_attributes.patch | 134 + ...upported-remote-drive-protocols-RHBZ.patch | 64 +- ...of-libguestfs-winsupport-features-ex.patch | 18 +- ...findfs_partuuid-and-findfs_partlabel.patch | 90 + ...ve-PARTUUID-and-PARTLABEL-in-etc-fst.patch | 45 + ...on-t-set-impossible-noop-disk-schedu.patch | 109 + ...ME-replacement.in => README-replacement.in | 15 +- ...8-Remove-libguestfs-live-RHBZ-798980.patch | 56 - ...Remove-9p-APIs-from-RHEL-RHBZ-921710.patch | 330 -- ...-Remove-User-Mode-Linux-RHBZ-1144197.patch | 72 - ...Avoid-warnings-about-unknown-pragmas.patch | 37 - ...vcreate-yes-to-avoid-interactive-pro.patch | 94 - ...reliable-detection-of-Linux-split-us.patch | 113 - ...backing-format-for-qemu-img-create-b.patch | 49 - ...-Fix-long-standing-possible-deadlock.patch | 44 - ...nspection-of-recent-RPM-guests-using.patch | 1064 ---- .../0012-inspection-Return-RPM-epoch.patch | 36 - ...guests-Fix-phony-RPM-database-fix-vi.patch | 4664 ----------------- ...ES-Fix-list-of-files-for-translation.patch | 34 - ...s-find-db-tool.m4-Remove-unused-file.patch | 64 - ...guests-Fix-phony-RPM-database-fix-vi.patch | 474 -- ...lace-our-virtio-net-pci-device-in-sl.patch | 65 - ...ORK_ADDRESS-and-NETWORK_PREFIX-as-ma.patch | 70 - ...dd-virtio-net-via-the-standard-inter.patch | 91 - SOURCES/0020-appliance-Use-cpu-max.patch | 86 - ...u-mode-maximum-for-cpu-max-on-libvir.patch | 48 - ...level-page-tables-when-using-cpu-max.patch | 92 - ...stfs-security-document-CVE-2022-2211.patch | 103 - SOURCES/libguestfs-1.44.0.tar.gz.sig | 17 - SOURCES/copy-patches.sh => copy-patches.sh | 5 +- SOURCES/guestfish.sh => guestfish.sh | 0 libguestfs-1.52.2.tar.gz.sig | 17 + SPECS/libguestfs.spec => libguestfs.spec | 3811 +++++++++----- sources | 2 + SOURCES/yum.conf.in => yum.conf.in | 0 38 files changed, 3570 insertions(+), 9106 deletions(-) delete mode 100644 .libguestfs.metadata create mode 100644 0001-daemon-Reimplement-partition-GPT-functions-using-sfd.patch create mode 100644 0002-daemon-Fix-parsing-in-part_get_gpt_attributes.patch rename SOURCES/0003-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch => 0003-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch (92%) rename SOURCES/0005-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch => 0004-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch (84%) create mode 100644 0005-New-APIs-findfs_partuuid-and-findfs_partlabel.patch create mode 100644 0006-inspection-Resolve-PARTUUID-and-PARTLABEL-in-etc-fst.patch create mode 100644 0007-appliance-init-Don-t-set-impossible-noop-disk-schedu.patch rename SOURCES/README-replacement.in => README-replacement.in (63%) delete mode 100644 SOURCES/0001-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch delete mode 100644 SOURCES/0002-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch delete mode 100644 SOURCES/0004-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch delete mode 100644 SOURCES/0006-build-Avoid-warnings-about-unknown-pragmas.patch delete mode 100644 SOURCES/0007-daemon-lvm-Use-lvcreate-yes-to-avoid-interactive-pro.patch delete mode 100644 SOURCES/0008-inspection-More-reliable-detection-of-Linux-split-us.patch delete mode 100644 SOURCES/0009-lib-Autodetect-backing-format-for-qemu-img-create-b.patch delete mode 100644 SOURCES/0010-daemon-chroot-Fix-long-standing-possible-deadlock.patch delete mode 100644 SOURCES/0011-inspection-Fix-inspection-of-recent-RPM-guests-using.patch delete mode 100644 SOURCES/0012-inspection-Return-RPM-epoch.patch delete mode 100644 SOURCES/0013-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch delete mode 100644 SOURCES/0014-po-POTFILES-Fix-list-of-files-for-translation.patch delete mode 100644 SOURCES/0015-m4-guestfs-find-db-tool.m4-Remove-unused-file.patch delete mode 100644 SOURCES/0016-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch delete mode 100644 SOURCES/0017-launch-libvirt-place-our-virtio-net-pci-device-in-sl.patch delete mode 100644 SOURCES/0018-lib-extract-NETWORK_ADDRESS-and-NETWORK_PREFIX-as-ma.patch delete mode 100644 SOURCES/0019-launch-libvirt-add-virtio-net-via-the-standard-inter.patch delete mode 100644 SOURCES/0020-appliance-Use-cpu-max.patch delete mode 100644 SOURCES/0021-appliance-Use-cpu-mode-maximum-for-cpu-max-on-libvir.patch delete mode 100644 SOURCES/0022-lib-Disable-5-level-page-tables-when-using-cpu-max.patch delete mode 100644 SOURCES/0023-docs-guestfs-security-document-CVE-2022-2211.patch delete mode 100644 SOURCES/libguestfs-1.44.0.tar.gz.sig rename SOURCES/copy-patches.sh => copy-patches.sh (92%) rename SOURCES/guestfish.sh => guestfish.sh (100%) create mode 100644 libguestfs-1.52.2.tar.gz.sig rename SPECS/libguestfs.spec => libguestfs.spec (52%) create mode 100644 sources rename SOURCES/yum.conf.in => yum.conf.in (100%) diff --git a/.gitignore b/.gitignore index 3a9a398..ef9532d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -SOURCES/libguestfs-1.44.0.tar.gz -SOURCES/libguestfs.keyring +libguestfs-1.52.2.tar.gz +libguestfs.keyring diff --git a/.libguestfs.metadata b/.libguestfs.metadata deleted file mode 100644 index a285f57..0000000 --- a/.libguestfs.metadata +++ /dev/null @@ -1,2 +0,0 @@ -99d241dc4a5ba0dc6111954ed7a872e0b0bb6944 SOURCES/libguestfs-1.44.0.tar.gz -1bbc40f501a7fef9eef2a39b701a71aee2fea7c4 SOURCES/libguestfs.keyring diff --git a/0001-daemon-Reimplement-partition-GPT-functions-using-sfd.patch b/0001-daemon-Reimplement-partition-GPT-functions-using-sfd.patch new file mode 100644 index 0000000..e7d54af --- /dev/null +++ b/0001-daemon-Reimplement-partition-GPT-functions-using-sfd.patch @@ -0,0 +1,657 @@ +From 1638cd9e58161147bd2f440b6e28bf7365fc5688 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 10 May 2024 13:27:22 +0100 +Subject: [PATCH] daemon: Reimplement partition GPT functions using sfdisk + +sfdisk can now do everything with GPT that sgdisk was needed for +before. In particular we are able to reimplement the following +functions using sfdisk: + +- part_set_disk_guid (replace with sfdisk --disk-id) +- part_get_disk_guid +- part_set_disk_guid_random +- part_set_gpt_attributes (sfdisk --part-attrs) +- part_get_gpt_attributes +- part_set_gpt_guid (sfdisk --part-uuid) +- part_get_gpt_guid +- part_set_gpt_type (sfdisk --part-type) +- part_get_gpt_type + +This allows us to drop the requirement for gdisk in many cases. + +There is only one API remaining which requires gdisk, part_expand_gpt, +which we do not use in our tools. In a prior commit I already moved +this solitary function to a new source file (daemon/gdisk.c). + +Fixes: https://issues.redhat.com/browse/RHEL-35998 +(cherry picked from commit c6c266a85d76dc2db90460202415790c585ac625) +--- + .gitignore | 1 + + daemon/Makefile.am | 3 + + daemon/inspect_fs_windows.ml | 2 +- + daemon/listfs.ml | 2 +- + daemon/parted.c | 144 ----------------------------- + daemon/parted.ml | 92 +------------------ + daemon/sfdisk.ml | 172 +++++++++++++++++++++++++++++++++++ + generator/actions_core.ml | 24 ++--- + 8 files changed, 189 insertions(+), 251 deletions(-) + create mode 100644 daemon/sfdisk.ml + +diff --git a/.gitignore b/.gitignore +index 00e59fb37..2fc52e843 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -108,6 +108,7 @@ Makefile.in + /daemon/parted.mli + /daemon/realpath.mli + /daemon/rpm.mli ++/daemon/sfdisk.mli + /daemon/stamp-guestfsd.pod + /daemon/statvfs.mli + /daemon/structs-cleanups.c +diff --git a/daemon/Makefile.am b/daemon/Makefile.am +index 04370b7cd..bc74b6ef7 100644 +--- a/daemon/Makefile.am ++++ b/daemon/Makefile.am +@@ -59,6 +59,7 @@ generator_built = \ + parted.mli \ + realpath.mli \ + rpm.mli \ ++ sfdisk.mli \ + statvfs.mli \ + structs.ml \ + structs.mli +@@ -306,6 +307,7 @@ SOURCES_MLI = \ + parted.mli \ + realpath.mli \ + rpm.mli \ ++ sfdisk.mli \ + statvfs.mli \ + structs.mli \ + sysroot.mli \ +@@ -337,6 +339,7 @@ SOURCES_ML = \ + md.ml \ + mount.ml \ + mount_utils.ml \ ++ sfdisk.ml \ + parted.ml \ + listfs.ml \ + realpath.ml \ +diff --git a/daemon/inspect_fs_windows.ml b/daemon/inspect_fs_windows.ml +index 5d29c3a46..6537481e1 100644 +--- a/daemon/inspect_fs_windows.ml ++++ b/daemon/inspect_fs_windows.ml +@@ -419,7 +419,7 @@ and map_registry_disk_blob_gpt partitions blob = + let typ = Parted.part_get_parttype device in + if typ <> "gpt" then false + else ( +- let guid = Parted.part_get_gpt_guid device partnum in ++ let guid = Sfdisk.part_get_gpt_guid device partnum in + String.lowercase_ascii guid = blob_guid + ) + ) partitions in +diff --git a/daemon/listfs.ml b/daemon/listfs.ml +index 4cc3c437a..93c1e7145 100644 +--- a/daemon/listfs.ml ++++ b/daemon/listfs.ml +@@ -114,7 +114,7 @@ and is_partition_can_hold_filesystem partition = + else if is_mbr then + true + else ( +- let gpt_type = Parted.part_get_gpt_type device partnum in ++ let gpt_type = Sfdisk.part_get_gpt_type device partnum in + match gpt_type with + (* Windows Logical Disk Manager metadata partition. *) + | "5808C8AA-7E8F-42E0-85D2-E1E90434CFB3" +diff --git a/daemon/parted.c b/daemon/parted.c +index 9af5556c9..0f19baae5 100644 +--- a/daemon/parted.c ++++ b/daemon/parted.c +@@ -456,58 +456,6 @@ do_part_set_mbr_id (const char *device, int partnum, int idbyte) + return 0; + } + +-int +-do_part_set_gpt_type (const char *device, int partnum, const char *guid) +-{ +- if (partnum <= 0) { +- reply_with_error ("partition number must be >= 1"); +- return -1; +- } +- +- CLEANUP_FREE char *typecode = NULL; +- if (asprintf (&typecode, "%i:%s", partnum, guid) == -1) { +- reply_with_perror ("asprintf"); +- return -1; +- } +- +- CLEANUP_FREE char *err = NULL; +- int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, +- "sgdisk", device, "-t", typecode, NULL); +- +- if (r == -1) { +- reply_with_error ("%s %s -t %s: %s", "sgdisk", device, typecode, err); +- return -1; +- } +- +- return 0; +-} +- +-int +-do_part_set_gpt_guid (const char *device, int partnum, const char *guid) +-{ +- if (partnum <= 0) { +- reply_with_error ("partition number must be >= 1"); +- return -1; +- } +- +- CLEANUP_FREE char *typecode = NULL; +- if (asprintf (&typecode, "%i:%s", partnum, guid) == -1) { +- reply_with_perror ("asprintf"); +- return -1; +- } +- +- CLEANUP_FREE char *err = NULL; +- int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, +- "sgdisk", device, "-u", typecode, NULL); +- +- if (r == -1) { +- reply_with_error ("%s %s -u %s: %s", "sgdisk", device, typecode, err); +- return -1; +- } +- +- return 0; +-} +- + char * + do_part_get_name (const char *device, int partnum) + { +@@ -564,95 +512,3 @@ do_part_get_name (const char *device, int partnum) + return NULL; + } + } +- +-static char * +-extract_uuid (const char *value) +-{ +- /* The value contains only valid GUID characters */ +- const size_t value_len = strspn (value, "-0123456789ABCDEF"); +- +- char *ret = malloc (value_len + 1); +- if (ret == NULL) { +- reply_with_perror ("malloc"); +- return NULL; +- } +- +- memcpy (ret, value, value_len); +- ret[value_len] = '\0'; +- return ret; +-} +- +-char * +-do_part_get_disk_guid (const char *device) +-{ +- const char *pattern = "Disk identifier (GUID):"; +- size_t i; +- +- CLEANUP_FREE char *err = NULL; +- int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, +- "sgdisk", device, "-p", NULL); +- if (r == -1) { +- reply_with_error ("%s %s -p: %s", "sgdisk", device, err); +- return NULL; +- } +- +- CLEANUP_FREE_STRING_LIST char **lines = split_lines (err); +- if (lines == NULL) { +- reply_with_error ("'%s %s -p' returned no output", +- "sgdisk", device); +- return NULL; +- } +- +- for (i = 0; lines[i] != NULL; ++i) { +- if (STRPREFIX (lines[i], pattern)) { +- char *value = lines[i] + strlen (pattern); +- +- /* Skip any leading whitespace */ +- value += strspn (value, " \t"); +- +- /* Extract the actual information from the field. */ +- char *ret = extract_uuid (value); +- if (ret == NULL) { +- /* The extraction function already sends the error. */ +- return NULL; +- } +- +- return ret; +- } +- } +- +- /* If we got here it means we didn't find the field */ +- reply_with_error ("sgdisk output did not contain disk GUID. " +- "See LIBGUESTFS_DEBUG output for more details"); +- return NULL; +-} +- +-int +-do_part_set_disk_guid (const char *device, const char *guid) +-{ +- CLEANUP_FREE char *err = NULL; +- int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, +- "sgdisk", device, "-U", guid, NULL); +- +- if (r == -1) { +- reply_with_error ("%s %s -U %s: %s", "sgdisk", device, guid, err); +- return -1; +- } +- +- return 0; +-} +- +-int +-do_part_set_disk_guid_random (const char *device) +-{ +- CLEANUP_FREE char *err = NULL; +- int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR, +- "sgdisk", device, "-U", "R", NULL); +- +- if (r == -1) { +- reply_with_error ("%s %s -U R: %s", "sgdisk", device, err); +- return -1; +- } +- +- return 0; +-} +diff --git a/daemon/parted.ml b/daemon/parted.ml +index c9e55890b..f8f142bc5 100644 +--- a/daemon/parted.ml ++++ b/daemon/parted.ml +@@ -25,18 +25,6 @@ open Utils + + include Structs + +-let part_get_mbr_id device partnum = +- if partnum <= 0 then +- failwith "partition number must be >= 1"; +- +- udev_settle (); +- let out = +- command "sfdisk" ["--part-type"; device; string_of_int partnum] in +- udev_settle (); +- +- (* It's printed in hex, possibly with a leading space. *) +- sscanf out " %x" identity +- + (* This is almost equivalent to print_partition_table in the C code. The + * difference is that here we enforce the "BYT;" header internally. + *) +@@ -110,7 +98,7 @@ let part_get_parttype device = + + let part_get_mbr_part_type device partnum = + let parttype = part_get_parttype device in +- let mbr_id = part_get_mbr_id device partnum in ++ let mbr_id = Sfdisk.part_get_mbr_id device partnum in + + (* 0x05 - extended partition. + * 0x0f - extended partition using BIOS INT 13h extensions. +@@ -120,81 +108,3 @@ let part_get_mbr_part_type device partnum = + | "msdos", (1|2|3|4), _ -> "primary" + | "msdos", _, _ -> "logical" + | _, _, _ -> "primary" +- +-let part_set_gpt_attributes device partnum attributes = +- if partnum <= 0 then failwith "partition number must be >= 1"; +- +- udev_settle (); +- +- let arg = sprintf "%d:=:%LX" partnum attributes in +- let r, _, err = +- commandr ~fold_stdout_on_stderr:true +- "sgdisk" [ device; "-A"; arg ] in +- if r <> 0 then +- failwithf "sgdisk: %s" err; +- +- udev_settle () +- +-let extract_guid value = +- (* The value contains only valid GUID characters. *) +- String.sub value 0 (String.span value "-0123456789ABCDEF") +- +-let extract_hex value = +- (* The value contains only valid numeric characters. *) +- let str = String.sub value 0 (String.span value "0123456789ABCDEF") in +- Int64.of_string ("0x" ^ str) +- +-let sgdisk_info_extract_field device partnum field extractor = +- if partnum <= 0 then failwith "partition number must be >= 1"; +- +- udev_settle (); +- +- let r, _, err = +- commandr ~fold_stdout_on_stderr:true +- "sgdisk" [ device; "-i"; string_of_int partnum ] in +- if r <> 0 then +- failwithf "getting %S: sgdisk: %s" field err; +- +- udev_settle (); +- +- let err = String.trim err in +- let lines = String.nsplit "\n" err in +- +- (* Parse the output of sgdisk -i: +- * Partition GUID code: 21686148-6449-6E6F-744E-656564454649 (BIOS boot partition) +- * Partition unique GUID: 19AEC5FE-D63A-4A15-9D37-6FCBFB873DC0 +- * First sector: 2048 (at 1024.0 KiB) +- * Last sector: 411647 (at 201.0 MiB) +- * Partition size: 409600 sectors (200.0 MiB) +- * Attribute flags: 0000000000000000 +- * Partition name: 'EFI System Partition' +- *) +- let field_len = String.length field in +- let rec loop = function +- | [] -> +- failwithf "%s: sgdisk output did not contain '%s'" device field +- | line :: _ when String.is_prefix line field && +- String.length line >= field_len + 2 && +- line.[field_len] = ':' -> +- let value = +- String.sub line (field_len+1) (String.length line - field_len - 1) in +- +- (* Skip any whitespace after the colon. *) +- let value = String.triml value in +- +- (* Extract the value. *) +- extractor value +- +- | _ :: lines -> loop lines +- in +- loop lines +- +-let rec part_get_gpt_type device partnum = +- sgdisk_info_extract_field device partnum "Partition GUID code" +- extract_guid +-and part_get_gpt_guid device partnum = +- sgdisk_info_extract_field device partnum "Partition unique GUID" +- extract_guid +-and part_get_gpt_attributes device partnum = +- sgdisk_info_extract_field device partnum "Attribute flags" +- extract_hex +diff --git a/daemon/sfdisk.ml b/daemon/sfdisk.ml +new file mode 100644 +index 000000000..2aea399aa +--- /dev/null ++++ b/daemon/sfdisk.ml +@@ -0,0 +1,172 @@ ++(* guestfs-inspection ++ * Copyright (C) 2009-2023 Red Hat Inc. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License along ++ * with this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ *) ++ ++open Scanf ++open Printf ++ ++open Std_utils ++ ++open Utils ++ ++include Structs ++ ++let part_get_mbr_id device partnum = ++ if partnum <= 0 then ++ failwith "partition number must be >= 1"; ++ ++ udev_settle (); ++ let out = ++ command "sfdisk" ["--part-type"; device; string_of_int partnum] in ++ udev_settle (); ++ ++ (* It's printed in hex, possibly with a leading space. *) ++ sscanf out " %x" identity ++ ++let part_get_gpt_type device partnum = ++ if partnum <= 0 then ++ failwith "partition number must be >= 1"; ++ ++ udev_settle (); ++ let out = ++ command "sfdisk" ["--part-type"; device; string_of_int partnum] in ++ udev_settle (); ++ ++ String.trimr out ++ ++let part_set_gpt_type device partnum typ = ++ if partnum <= 0 then ++ failwith "partition number must be >= 1"; ++ ++ udev_settle (); ++ let cmd = ++ sprintf "sfdisk --part-type %s %d %s" ++ (quote device) partnum (quote typ) in ++ if verbose () then eprintf "%s\n%!" cmd; ++ if Sys.command cmd <> 0 then failwith "sfdisk --part-type failed"; ++ udev_settle () ++ ++let part_get_gpt_guid device partnum = ++ if partnum <= 0 then ++ failwith "partition number must be >= 1"; ++ ++ udev_settle (); ++ let out = ++ command "sfdisk" ["--part-uuid"; device; string_of_int partnum] in ++ udev_settle (); ++ ++ String.trimr out ++ ++let part_set_gpt_guid device partnum guid = ++ if partnum <= 0 then ++ failwith "partition number must be >= 1"; ++ ++ udev_settle (); ++ let cmd = ++ sprintf "sfdisk --part-uuid %s %d %s" ++ (quote device) partnum (quote guid) in ++ if verbose () then eprintf "%s\n%!" cmd; ++ if Sys.command cmd <> 0 then failwith "sfdisk --part-uuid failed"; ++ udev_settle () ++ ++let part_get_disk_guid device = ++ udev_settle (); ++ let out = ++ command "sfdisk" ["--disk-id"; device] in ++ udev_settle (); ++ ++ String.trimr out ++ ++let part_set_disk_guid device guid = ++ udev_settle (); ++ let cmd = ++ sprintf "sfdisk --disk-id %s %s" ++ (quote device) (quote guid) in ++ if verbose () then eprintf "%s\n%!" cmd; ++ if Sys.command cmd <> 0 then failwith "sfdisk --disk-id failed"; ++ udev_settle () ++ ++let part_set_disk_guid_random device = ++ let random_uuid = Utils.get_random_uuid () in ++ let random_uuid = String.trimr random_uuid in ++ part_set_disk_guid device random_uuid ++ ++let part_get_gpt_attributes device partnum = ++ if partnum <= 0 then ++ failwith "partition number must be >= 1"; ++ ++ udev_settle (); ++ let out = ++ command "sfdisk" ["--part-attrs"; device; string_of_int partnum] in ++ udev_settle (); ++ ++ (* The output is a whitespace-separated list of: ++ * "RequiredPartition" (equivalent to bit 0) ++ * "NoBlockIOProtocol" (equivalent to bit 1) ++ * "LegacyBIOSBootable" (equivalent to bit 2) ++ * "48", "49", ..., "63" ++ *) ++ let out = String.trimr out in ++ let attrs = String.nsplit " " out in ++ List.fold_left ( ++ fun bits attr -> ++ let bit = ++ match attr with ++ | "" -> -1 ++ | "RequiredPartition" -> 0 ++ | "NoBlockIOProtocol" -> 1 ++ | "LegacyBIOSBootable" -> 2 ++ | n -> int_of_string n in ++ if bit >= 0 then ++ Int64.logor bits (Int64.shift_left 1_L bit) ++ else ++ bits ++ ) 0_L attrs ++ ++let part_set_gpt_attributes device partnum attrs = ++ if partnum <= 0 then ++ failwith "partition number must be >= 1"; ++ ++ (* The input to sfdisk --part-attrs is a comma-separated list of ++ * attribute names or bit positions. Note you have to use the ++ * names, you can't use "0", "1" or "2". ++ *) ++ let s = ref [] in ++ let rec loop i = ++ let b = Int64.logand attrs (Int64.shift_left 1_L i) <> Int64.zero in ++ (match i with ++ | 0 -> if b then List.push_front "RequiredPartition" s ++ | 1 -> if b then List.push_front "NoBlockIOProtocol" s ++ | 2 -> if b then List.push_front "LegacyBIOSBootable" s ++ | i when i >= 3 && i <= 47 -> ++ if b then ++ failwith "bits 3..47 are reserved and cannot be set" ++ | i when i >= 48 && i <= 63 -> ++ if b then List.push_front (string_of_int i) s ++ | _ -> assert false ++ ); ++ if i < 63 then loop (i+1) ++ in ++ loop 0; ++ ++ udev_settle (); ++ let cmd = ++ sprintf "sfdisk --part-attrs %s %d %s" ++ (quote device) partnum (quote (String.concat "," !s)) in ++ if verbose () then eprintf "%s\n%!" cmd; ++ if Sys.command cmd <> 0 then failwith "sfdisk --part-attrs failed"; ++ udev_settle () +diff --git a/generator/actions_core.ml b/generator/actions_core.ml +index 68627078f..46ef1422f 100644 +--- a/generator/actions_core.ml ++++ b/generator/actions_core.ml +@@ -5302,7 +5302,7 @@ See also C." }; + { defaults with + name = "part_get_mbr_id"; added = (1, 3, 2); + style = RInt "idbyte", [String (Device, "device"); Int "partnum"], []; +- impl = OCaml "Parted.part_get_mbr_id"; ++ impl = OCaml "Sfdisk.part_get_mbr_id"; + fish_output = Some FishOutputHexadecimal; + tests = [ + InitEmpty, Always, TestResult ( +@@ -8128,7 +8128,7 @@ group with GUID C." }; + { defaults with + name = "part_set_gpt_type"; added = (1, 21, 1); + style = RErr, [String (Device, "device"); Int "partnum"; String (GUID, "guid")], []; +- optional = Some "gdisk"; ++ impl = OCaml "Sfdisk.part_set_gpt_type"; + tests = [ + InitGPT, Always, TestLastFail ( + [["part_set_gpt_type"; "/dev/sda"; "1"; "f"]]), []; +@@ -8150,8 +8150,7 @@ for a useful list of type GUIDs." }; + { defaults with + name = "part_get_gpt_type"; added = (1, 21, 1); + style = RString (RPlainString, "guid"), [String (Device, "device"); Int "partnum"], []; +- impl = OCaml "Parted.part_get_gpt_type"; +- optional = Some "gdisk"; ++ impl = OCaml "Sfdisk.part_get_gpt_type"; + tests = [ + InitGPT, Always, TestResultString ( + [["part_set_gpt_type"; "/dev/sda"; "1"; +@@ -8166,8 +8165,7 @@ Return the type GUID of numbered GPT partition C." }; + { defaults with + name = "part_set_gpt_attributes"; added = (1, 21, 1); + style = RErr, [String (Device, "device"); Int "partnum"; Int64 "attributes"], []; +- impl = OCaml "Parted.part_set_gpt_attributes"; +- optional = Some "gdisk"; ++ impl = OCaml "Sfdisk.part_set_gpt_attributes"; + tests = [ + InitGPT, Always, TestResult ( + [["part_set_gpt_attributes"; "/dev/sda"; "1"; +@@ -8186,8 +8184,7 @@ for a useful list of partition attributes." }; + { defaults with + name = "part_get_gpt_attributes"; added = (1, 21, 1); + style = RInt64 "attributes", [String (Device, "device"); Int "partnum"], []; +- impl = OCaml "Parted.part_get_gpt_attributes"; +- optional = Some "gdisk"; ++ impl = OCaml "Sfdisk.part_get_gpt_attributes"; + tests = [ + InitGPT, Always, TestResult ( + [["part_set_gpt_attributes"; "/dev/sda"; "1"; +@@ -8987,7 +8984,7 @@ Recover bad superblocks from good copies." }; + { defaults with + name = "part_set_gpt_guid"; added = (1, 29, 25); + style = RErr, [String (Device, "device"); Int "partnum"; String (GUID, "guid")], []; +- optional = Some "gdisk"; ++ impl = OCaml "Sfdisk.part_set_gpt_guid"; + tests = [ + InitGPT, Always, TestLastFail ( + [["part_set_gpt_guid"; "/dev/sda"; "1"; "f"]]), []; +@@ -9006,8 +9003,7 @@ valid GUID." }; + { defaults with + name = "part_get_gpt_guid"; added = (1, 29, 25); + style = RString (RPlainString, "guid"), [String (Device, "device"); Int "partnum"], []; +- impl = OCaml "Parted.part_get_gpt_guid"; +- optional = Some "gdisk"; ++ impl = OCaml "Sfdisk.part_get_gpt_guid"; + tests = [ + InitGPT, Always, TestResultString ( + [["part_set_gpt_guid"; "/dev/sda"; "1"; +@@ -9206,7 +9202,7 @@ This is the internal call which implements C." }; + { defaults with + name = "part_set_disk_guid"; added = (1, 33, 2); + style = RErr, [String (Device, "device"); String (GUID, "guid")], []; +- optional = Some "gdisk"; ++ impl = OCaml "Sfdisk.part_set_disk_guid"; + tests = [ + InitGPT, Always, TestLastFail ( + [["part_set_disk_guid"; "/dev/sda"; "f"]]), []; +@@ -9225,7 +9221,7 @@ or if C is not a valid GUID." }; + { defaults with + name = "part_get_disk_guid"; added = (1, 33, 2); + style = RString (RPlainString, "guid"), [String (Device, "device")], []; +- optional = Some "gdisk"; ++ impl = OCaml "Sfdisk.part_get_disk_guid"; + tests = [ + InitGPT, Always, TestResultString ( + [["part_set_disk_guid"; "/dev/sda"; +@@ -9241,7 +9237,7 @@ Behaviour is undefined for other partition types." }; + { defaults with + name = "part_set_disk_guid_random"; added = (1, 33, 2); + style = RErr, [String (Device, "device")], []; +- optional = Some "gdisk"; ++ impl = OCaml "Sfdisk.part_set_disk_guid_random"; + tests = [ + InitGPT, Always, TestRun ( + [["part_set_disk_guid_random"; "/dev/sda"]]), []; +-- +2.43.0 + diff --git a/0002-daemon-Fix-parsing-in-part_get_gpt_attributes.patch b/0002-daemon-Fix-parsing-in-part_get_gpt_attributes.patch new file mode 100644 index 0000000..8a2600a --- /dev/null +++ b/0002-daemon-Fix-parsing-in-part_get_gpt_attributes.patch @@ -0,0 +1,134 @@ +From 8539b763639cbe80e4b248455c0c28bd8ced9cbe Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 28 Jun 2024 09:42:20 +0100 +Subject: [PATCH] daemon: Fix parsing in part_get_gpt_attributes + +The actual output of sfdisk --part-attrs is bizarre and doesn't match +the documentation. After looking at the source from util-linux, fix +the parsing to match what sfdisk produces. + +Reported-by: Yongkui Guo +Fixes: commit c6c266a85d76dc2db90460202415790c585ac625 +Fixes: https://issues.redhat.com/browse/RHEL-35998 +(cherry picked from commit 24c1f7b03aab6343e6c826250269e98a6060d762) +--- + daemon/sfdisk.ml | 80 +++++++++++++++++++++++++++++++-------- + generator/actions_core.ml | 4 +- + 2 files changed, 66 insertions(+), 18 deletions(-) + +diff --git a/daemon/sfdisk.ml b/daemon/sfdisk.ml +index 2aea399aa..8c8ed2305 100644 +--- a/daemon/sfdisk.ml ++++ b/daemon/sfdisk.ml +@@ -114,28 +114,76 @@ let part_get_gpt_attributes device partnum = + command "sfdisk" ["--part-attrs"; device; string_of_int partnum] in + udev_settle (); + ++ let out = String.trimr out in ++ + (* The output is a whitespace-separated list of: ++ * + * "RequiredPartition" (equivalent to bit 0) + * "NoBlockIOProtocol" (equivalent to bit 1) + * "LegacyBIOSBootable" (equivalent to bit 2) +- * "48", "49", ..., "63" ++ * "GUID:" followed by a comma-separated list of bit numbers ++ * ++ * eg: "LegacyBIOSBootable RequiredPartition GUID:48,49" ++ * ++ * So this is a massive PITA to parse. + *) +- let out = String.trimr out in +- let attrs = String.nsplit " " out in +- List.fold_left ( +- fun bits attr -> ++ let rec loop out acc = ++ let len = String.length out in ++ eprintf "part_get_gpt_attributes: %S [%s]\n%!" ++ out (String.concat "," (List.map string_of_int acc)); ++ if len = 0 then ( ++ acc ++ ) ++ else if Char.isspace out.[0] then ( ++ let out = String.triml out in ++ loop out acc ++ ) ++ else if out.[0] = ',' then ( ++ let out = String.sub out 1 (len-1) in ++ loop out acc ++ ) ++ else if String.is_prefix out "RequiredPartition" then ( ++ let acc = 0 :: acc in ++ let out = String.sub out 17 (len-17) in ++ loop out acc ++ ) ++ else if String.is_prefix out "NoBlockIOProtocol" then ( ++ let acc = 1 :: acc in ++ let out = String.sub out 17 (len-17) in ++ loop out acc ++ ) ++ else if String.is_prefix out "LegacyBIOSBootable" then ( ++ let acc = 2 :: acc in ++ let out = String.sub out 18 (len-18) in ++ loop out acc ++ ) ++ else if String.is_prefix out "GUID:" then ( ++ let out = String.sub out 5 (len-5) in ++ loop out acc ++ ) ++ else if Char.isdigit out.[0] then ( ++ let n = String.span out "0123456789" in ++ let num, out = String.break n out in + let bit = +- match attr with +- | "" -> -1 +- | "RequiredPartition" -> 0 +- | "NoBlockIOProtocol" -> 1 +- | "LegacyBIOSBootable" -> 2 +- | n -> int_of_string n in +- if bit >= 0 then +- Int64.logor bits (Int64.shift_left 1_L bit) +- else +- bits +- ) 0_L attrs ++ try int_of_string num ++ with Failure _ -> ++ failwithf "part_get_gpt_attributes: cannot parse number %S" num in ++ let acc = bit :: acc in ++ loop out acc ++ ) ++ else ( ++ failwithf "part_get_gpt_attributes: cannot parse %S" out ++ ) ++ in ++ let attrs = loop out [] in ++ ++ let bits = ++ List.fold_left ( ++ fun bits bit -> Int64.logor bits (Int64.shift_left 1_L bit) ++ ) 0_L attrs in ++ eprintf "part_get_gpt_attributes: [%s] -> %Ld\n%!" ++ (String.concat "," (List.map string_of_int attrs)) bits; ++ bits + + let part_set_gpt_attributes device partnum attrs = + if partnum <= 0 then +diff --git a/generator/actions_core.ml b/generator/actions_core.ml +index 46ef1422f..ef9096772 100644 +--- a/generator/actions_core.ml ++++ b/generator/actions_core.ml +@@ -8188,9 +8188,9 @@ for a useful list of partition attributes." }; + tests = [ + InitGPT, Always, TestResult ( + [["part_set_gpt_attributes"; "/dev/sda"; "1"; +- "0"]; ++ (* bits 0, 2, 48 and 49 set *) "844424930131973"]; + ["part_get_gpt_attributes"; "/dev/sda"; "1"]], +- "ret == 0"), []; ++ "ret == 844424930131973"), []; + ]; + shortdesc = "get the attribute flags of a GPT partition"; + longdesc = "\ +-- +2.43.0 + diff --git a/SOURCES/0003-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch b/0003-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch similarity index 92% rename from SOURCES/0003-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch rename to 0003-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch index 91159d2..89340f4 100644 --- a/SOURCES/0003-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch +++ b/0003-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch @@ -1,7 +1,7 @@ -From 4dd2f3f56a39411a255ad0a8f38081d46620dbd8 Mon Sep 17 00:00:00 2001 +From 75cdb13260f79a34a8b65059feb098f32738c8a4 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 29 Jul 2013 14:47:56 +0100 -Subject: [PATCH] RHEL 8: Disable unsupported remote drive protocols +Subject: [PATCH] RHEL: Disable unsupported remote drive protocols (RHBZ#962113). This disables support for unsupported remote drive protocols: @@ -18,7 +18,9 @@ This disables support for unsupported remote drive protocols: Note 'nbd' is not disabled, and of course 'file' works. -We hope to gradually add some of these back over the lifetime of RHEL 8. +We hope to gradually add some of these back over the lifetime of RHEL. + +(cherry picked from commit 66b9338e3d786db28fbd853d397741c3ceb19352) --- docs/guestfs-testing.pod | 20 ----- fish/guestfish.pod | 66 ++-------------- @@ -31,7 +33,7 @@ We hope to gradually add some of these back over the lifetime of RHEL 8. 8 files changed, 16 insertions(+), 348 deletions(-) diff --git a/docs/guestfs-testing.pod b/docs/guestfs-testing.pod -index f558964bf..8f264ed17 100644 +index f5c09df6e..ee4b26d6b 100644 --- a/docs/guestfs-testing.pod +++ b/docs/guestfs-testing.pod @@ -109,26 +109,6 @@ image. To exit, type C. @@ -62,7 +64,7 @@ index f558964bf..8f264ed17 100644 Run L on guests or disk images: diff --git a/fish/guestfish.pod b/fish/guestfish.pod -index 9f086f110..bb4167b06 100644 +index 492aa7163..33fc8b2c8 100644 --- a/fish/guestfish.pod +++ b/fish/guestfish.pod @@ -131,9 +131,9 @@ To list what is available do: @@ -77,7 +79,7 @@ index 9f086f110..bb4167b06 100644 =head2 Remote control -@@ -1134,12 +1134,12 @@ L>. +@@ -1129,12 +1129,12 @@ L>. On the command line, you can use the I<-a> option to add network block devices using a URI-style format, for example: @@ -92,7 +94,7 @@ index 9f086f110..bb4167b06 100644 The possible I<-a URI> formats are described below. -@@ -1149,40 +1149,6 @@ The possible I<-a URI> formats are described below. +@@ -1144,40 +1144,6 @@ The possible I<-a URI> formats are described below. Add the local disk image (or device) called F. @@ -133,7 +135,7 @@ index 9f086f110..bb4167b06 100644 =head2 B<-a nbd://example.com[:port]> =head2 B<-a nbd://example.com[:port]/exportname> -@@ -1217,35 +1183,13 @@ The equivalent API command would be: +@@ -1212,35 +1178,13 @@ The equivalent API command would be: > add pool/disk protocol:rbd server:tcp:example.com:port @@ -220,10 +222,10 @@ index 21d424984..ddabeb639 100755 rm test-add-uri.out rm test-add-uri.img diff --git a/generator/actions_core.ml b/generator/actions_core.ml -index 37476c93e..9f0402510 100644 +index ef9096772..4a4a8e4c9 100644 --- a/generator/actions_core.ml +++ b/generator/actions_core.ml -@@ -297,29 +297,6 @@ F is interpreted as a local file or device. +@@ -350,29 +350,6 @@ F is interpreted as a local file or device. This is the default if the optional protocol parameter is omitted. @@ -253,7 +255,7 @@ index 37476c93e..9f0402510 100644 =item C Connect to the Network Block Device server. -@@ -336,22 +313,6 @@ The C parameter may be supplied. See below. +@@ -389,22 +366,6 @@ The C parameter may be supplied. See below. See also: L. @@ -276,7 +278,7 @@ index 37476c93e..9f0402510 100644 =back =item C -@@ -362,13 +323,8 @@ is a list of server(s). +@@ -415,13 +376,8 @@ is a list of server(s). Protocol Number of servers required -------- -------------------------- file List must be empty or param not used at all @@ -290,7 +292,7 @@ index 37476c93e..9f0402510 100644 Each list element is a string specifying a server. The string must be in one of the following formats: -@@ -384,10 +340,10 @@ for the protocol is used (see F). +@@ -437,10 +393,10 @@ for the protocol is used (see F). =item C @@ -305,10 +307,10 @@ index 37476c93e..9f0402510 100644 example if using the libvirt backend and if the libvirt backend is configured to start the qemu appliance as a special user such as C. If in doubt, diff --git a/lib/drives.c b/lib/drives.c -index 46af66db4..c81ded5d7 100644 +index c5a208468..efb289254 100644 --- a/lib/drives.c +++ b/lib/drives.c -@@ -168,6 +168,7 @@ create_drive_non_file (guestfs_h *g, +@@ -166,6 +166,7 @@ create_drive_non_file (guestfs_h *g, return drv; } @@ -316,7 +318,7 @@ index 46af66db4..c81ded5d7 100644 static struct drive * create_drive_curl (guestfs_h *g, const struct drive_create_data *data) -@@ -226,6 +227,7 @@ create_drive_gluster (guestfs_h *g, +@@ -224,6 +225,7 @@ create_drive_gluster (guestfs_h *g, return create_drive_non_file (g, data); } @@ -324,7 +326,7 @@ index 46af66db4..c81ded5d7 100644 static int nbd_port (void) -@@ -294,6 +296,7 @@ create_drive_rbd (guestfs_h *g, +@@ -292,6 +294,7 @@ create_drive_rbd (guestfs_h *g, return create_drive_non_file (g, data); } @@ -332,7 +334,7 @@ index 46af66db4..c81ded5d7 100644 static struct drive * create_drive_sheepdog (guestfs_h *g, const struct drive_create_data *data) -@@ -394,6 +397,7 @@ create_drive_iscsi (guestfs_h *g, +@@ -392,6 +395,7 @@ create_drive_iscsi (guestfs_h *g, return create_drive_non_file (g, data); } @@ -340,7 +342,7 @@ index 46af66db4..c81ded5d7 100644 /** * Create the special F drive. -@@ -856,6 +860,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename, +@@ -842,6 +846,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename, drv = create_drive_file (g, &data); } } @@ -348,7 +350,7 @@ index 46af66db4..c81ded5d7 100644 else if (STREQ (protocol, "ftp")) { data.protocol = drive_protocol_ftp; drv = create_drive_curl (g, &data); -@@ -880,6 +885,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename, +@@ -866,6 +871,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename, data.protocol = drive_protocol_iscsi; drv = create_drive_iscsi (g, &data); } @@ -356,7 +358,7 @@ index 46af66db4..c81ded5d7 100644 else if (STREQ (protocol, "nbd")) { data.protocol = drive_protocol_nbd; drv = create_drive_nbd (g, &data); -@@ -888,6 +894,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename, +@@ -874,6 +880,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename, data.protocol = drive_protocol_rbd; drv = create_drive_rbd (g, &data); } @@ -364,7 +366,7 @@ index 46af66db4..c81ded5d7 100644 else if (STREQ (protocol, "sheepdog")) { data.protocol = drive_protocol_sheepdog; drv = create_drive_sheepdog (g, &data); -@@ -900,6 +907,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename, +@@ -886,6 +893,7 @@ guestfs_impl_add_drive_opts (guestfs_h *g, const char *filename, data.protocol = drive_protocol_tftp; drv = create_drive_curl (g, &data); } @@ -373,12 +375,12 @@ index 46af66db4..c81ded5d7 100644 error (g, _("unknown protocol ‘%s’"), protocol); drv = NULL; /*FALLTHROUGH*/ diff --git a/lib/guestfs.pod b/lib/guestfs.pod -index bce9eb79f..2bb13b875 100644 +index e46dd81f9..dff32cc9e 100644 --- a/lib/guestfs.pod +++ b/lib/guestfs.pod -@@ -715,70 +715,6 @@ servers. The server string is documented in - L. The C and C parameters are - also optional, and if not given, then no authentication will be used. +@@ -723,70 +723,6 @@ a qcow2 backing file specification, libvirt does not construct an + ephemeral secret object from those, for Ceph authentication. Refer to + L. -=head3 FTP, HTTP AND TFTP - @@ -447,7 +449,7 @@ index bce9eb79f..2bb13b875 100644 =head3 NETWORK BLOCK DEVICE Libguestfs can access Network Block Device (NBD) disks remotely. -@@ -841,42 +777,6 @@ L +@@ -849,42 +785,6 @@ L =back @@ -491,10 +493,10 @@ index bce9eb79f..2bb13b875 100644 Libguestfs has APIs for inspecting an unknown disk image to find out diff --git a/tests/disks/test-qemu-drive-libvirt.sh b/tests/disks/test-qemu-drive-libvirt.sh -index 3c5aa592e..f73827bd6 100755 +index d86a1ecd0..cf7d2a0c9 100755 --- a/tests/disks/test-qemu-drive-libvirt.sh +++ b/tests/disks/test-qemu-drive-libvirt.sh -@@ -64,34 +64,6 @@ check_output +@@ -65,34 +65,6 @@ check_output grep -sq -- '-drive file=rbd:abc-def/ghi-jkl:auth_supported=none,' "$DEBUG_QEMU_FILE" || fail ceph2 rm "$DEBUG_QEMU_FILE" @@ -530,7 +532,7 @@ index 3c5aa592e..f73827bd6 100755 $guestfish -d pool1 run ||: diff --git a/tests/disks/test-qemu-drive.sh b/tests/disks/test-qemu-drive.sh -index 19dd60a2f..583e031bd 100755 +index 12937fb30..b3e4f9903 100755 --- a/tests/disks/test-qemu-drive.sh +++ b/tests/disks/test-qemu-drive.sh @@ -62,45 +62,6 @@ check_output @@ -605,5 +607,5 @@ index 19dd60a2f..583e031bd 100755 -grep -sq -- '-drive file=ssh://rich@example.com/disk.img,' "$DEBUG_QEMU_FILE" || fail -rm "$DEBUG_QEMU_FILE" -- -2.31.1 +2.43.0 diff --git a/SOURCES/0005-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch b/0004-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch similarity index 84% rename from SOURCES/0005-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch rename to 0004-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch index ecdd554..a1b8fe6 100644 --- a/SOURCES/0005-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch +++ b/0004-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch @@ -1,11 +1,13 @@ -From cb2ac63562447e2780bd7103ed060fd6013b9054 Mon Sep 17 00:00:00 2001 +From 25ff96e2c465766960cbc5ca3918026442dfcc32 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 7 Jul 2015 09:28:03 -0400 -Subject: [PATCH] RHEL 8: Reject use of libguestfs-winsupport features except - for virt-* tools (RHBZ#1240276). +Subject: [PATCH] RHEL: Reject use of libguestfs-winsupport features except for + virt-* tools (RHBZ#1240276). Fix the tests: it doesn't let us use guestfish for arbitrary Windows edits. + +(cherry picked from commit b875668bfa9f596aba2e84999c7c9921f8dcb55e) --- generator/c.ml | 16 ++++++++++++++++ test-data/phony-guests/make-windows-img.sh | 1 + @@ -13,7 +15,7 @@ edits. 3 files changed, 19 insertions(+) diff --git a/generator/c.ml b/generator/c.ml -index 86d3b26f8..a625361a9 100644 +index 447059b8a..0391dd3dd 100644 --- a/generator/c.ml +++ b/generator/c.ml @@ -1846,6 +1846,22 @@ and generate_client_actions actions () = @@ -40,7 +42,7 @@ index 86d3b26f8..a625361a9 100644 * as a progress bar hint. *) diff --git a/test-data/phony-guests/make-windows-img.sh b/test-data/phony-guests/make-windows-img.sh -index 30908a918..73cf5144e 100755 +index 16debd129..1c13ddac3 100755 --- a/test-data/phony-guests/make-windows-img.sh +++ b/test-data/phony-guests/make-windows-img.sh @@ -37,6 +37,7 @@ fi @@ -52,10 +54,10 @@ index 30908a918..73cf5144e 100755 run diff --git a/tests/charsets/test-charset-fidelity.c b/tests/charsets/test-charset-fidelity.c -index 39ccc2068..2b2e2d8a9 100644 +index 105291dc3..5ca4f3b6d 100644 --- a/tests/charsets/test-charset-fidelity.c +++ b/tests/charsets/test-charset-fidelity.c -@@ -94,6 +94,8 @@ main (int argc, char *argv[]) +@@ -96,6 +96,8 @@ main (int argc, char *argv[]) if (g == NULL) error (EXIT_FAILURE, 0, "failed to create handle"); @@ -65,5 +67,5 @@ index 39ccc2068..2b2e2d8a9 100644 exit (EXIT_FAILURE); -- -2.31.1 +2.43.0 diff --git a/0005-New-APIs-findfs_partuuid-and-findfs_partlabel.patch b/0005-New-APIs-findfs_partuuid-and-findfs_partlabel.patch new file mode 100644 index 0000000..ba499e2 --- /dev/null +++ b/0005-New-APIs-findfs_partuuid-and-findfs_partlabel.patch @@ -0,0 +1,90 @@ +From 8aa0958faabcf6d1755a8dcda3bcbb3bc63f6c1f Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 8 Jul 2024 14:37:22 +0100 +Subject: [PATCH] New APIs: findfs_partuuid and findfs_partlabel + +These search for partitions by UUID or label (name). They only work +for GPT. + +(cherry picked from commit 1816651f3c138600ad2e5ba0d6437b4753333818) +(cherry picked from commit 04a45af93d21880e54a386386313100a04b91ca7) +--- + daemon/findfs.ml | 4 ++++ + generator/actions_core.ml | 24 ++++++++++++++++++++++++ + generator/proc_nr.ml | 2 ++ + lib/MAX_PROC_NR | 2 +- + 4 files changed, 31 insertions(+), 1 deletion(-) + +diff --git a/daemon/findfs.ml b/daemon/findfs.ml +index cf2ba4a84..a94e0ce7b 100644 +--- a/daemon/findfs.ml ++++ b/daemon/findfs.ml +@@ -27,6 +27,10 @@ let rec findfs_uuid uuid = + findfs "UUID" uuid + and findfs_label label = + findfs "LABEL" label ++and findfs_partuuid uuid = ++ findfs "PARTUUID" uuid ++and findfs_partlabel label = ++ findfs "PARTLABEL" label + + and findfs tag str = + (* Kill the cache file, forcing blkid to reread values from the +diff --git a/generator/actions_core.ml b/generator/actions_core.ml +index 4a4a8e4c9..15cdd09ff 100644 +--- a/generator/actions_core.ml ++++ b/generator/actions_core.ml +@@ -5688,6 +5688,30 @@ filesystem can be found. + + To find the label of a filesystem, use C." }; + ++ { defaults with ++ name = "findfs_partuuid"; added = (1, 5, 3); ++ style = RString (RDevice, "device"), [String (PlainString, "uuid")], []; ++ impl = OCaml "Findfs.findfs_partuuid"; ++ shortdesc = "find a partition by UUID"; ++ longdesc = "\ ++This command searches the partitions and returns the one ++which has the given partition UUID. An error is returned if no such ++partition can be found. ++ ++To find the UUID of a partition, use C (C)." }; ++ ++ { defaults with ++ name = "findfs_partlabel"; added = (1, 5, 3); ++ style = RString (RDevice, "device"), [String (PlainString, "label")], []; ++ impl = OCaml "Findfs.findfs_partlabel"; ++ shortdesc = "find a partition by label"; ++ longdesc = "\ ++This command searches the partitions and returns the one ++which has the given label. An error is returned if no such ++partition can be found. ++ ++To find the label of a partition, use C (C)." }; ++ + { defaults with + name = "is_chardev"; added = (1, 5, 10); + style = RBool "flag", [String (Pathname, "path")], [OBool "followsymlinks"]; +diff --git a/generator/proc_nr.ml b/generator/proc_nr.ml +index f71a849c9..56cd97a9f 100644 +--- a/generator/proc_nr.ml ++++ b/generator/proc_nr.ml +@@ -516,6 +516,8 @@ let proc_nr = [ + 511, "internal_readdir"; + 512, "clevis_luks_unlock"; + 513, "inspect_get_build_id"; ++514, "findfs_partuuid"; ++515, "findfs_partlabel"; + ] + + (* End of list. If adding a new entry, add it at the end of the list +diff --git a/lib/MAX_PROC_NR b/lib/MAX_PROC_NR +index 31cf34b8d..3cda32fc2 100644 +--- a/lib/MAX_PROC_NR ++++ b/lib/MAX_PROC_NR +@@ -1 +1 @@ +-513 ++515 +-- +2.43.0 + diff --git a/0006-inspection-Resolve-PARTUUID-and-PARTLABEL-in-etc-fst.patch b/0006-inspection-Resolve-PARTUUID-and-PARTLABEL-in-etc-fst.patch new file mode 100644 index 0000000..bbc5529 --- /dev/null +++ b/0006-inspection-Resolve-PARTUUID-and-PARTLABEL-in-etc-fst.patch @@ -0,0 +1,45 @@ +From 5733e5268fe0b7a99f20b23ea30ab13632cc9d95 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Mon, 8 Jul 2024 14:39:16 +0100 +Subject: [PATCH] inspection: Resolve PARTUUID= and PARTLABEL= in /etc/fstab + +Fixes: https://issues.redhat.com/browse/RHEL-46596 +(cherry picked from commit e616c8f286ddacf401d7c356724ae874ed883262) +(cherry picked from commit ebce03824a3ce75823037003ca2311d7b8d61565) +--- + daemon/inspect_fs_unix_fstab.ml | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/daemon/inspect_fs_unix_fstab.ml b/daemon/inspect_fs_unix_fstab.ml +index 837c8c620..f5817a318 100644 +--- a/daemon/inspect_fs_unix_fstab.ml ++++ b/daemon/inspect_fs_unix_fstab.ml +@@ -131,6 +131,25 @@ and check_fstab_entry md_map root_mountable os_type aug entry = + with + Failure _ -> return None + ) ++ (* EFI partition UUIDs and labels. *) ++ else if String.is_prefix spec "PARTUUID=" then ( ++ let uuid = String.sub spec 9 (String.length spec - 9) in ++ let uuid = shell_unquote uuid in ++ (* Just ignore the device if the UUID cannot be resolved. *) ++ try ++ Mountable.of_device (Findfs.findfs_partuuid uuid) ++ with ++ Failure _ -> return None ++ ) ++ else if String.is_prefix spec "PARTLABEL=" then ( ++ let label = String.sub spec 10 (String.length spec - 10) in ++ let label = shell_unquote label in ++ (* Just ignore the device if the label cannot be resolved. *) ++ try ++ Mountable.of_device (Findfs.findfs_partlabel label) ++ with ++ Failure _ -> return None ++ ) + (* Resolve /dev/root to the current device. + * Do the same for the / partition of the *BSD + * systems, since the BSD -> Linux device +-- +2.43.0 + diff --git a/0007-appliance-init-Don-t-set-impossible-noop-disk-schedu.patch b/0007-appliance-init-Don-t-set-impossible-noop-disk-schedu.patch new file mode 100644 index 0000000..57efd5b --- /dev/null +++ b/0007-appliance-init-Don-t-set-impossible-noop-disk-schedu.patch @@ -0,0 +1,109 @@ +From 533d39a6862638f587b231ecf541ab1f5c8e85f9 Mon Sep 17 00:00:00 2001 +From: "Richard W.M. Jones" +Date: Fri, 16 Aug 2024 08:26:34 +0100 +Subject: [PATCH] appliance/init: Don't set impossible "noop" disk scheduler + +Since RHEL 7.4, the noop scheduler is no longer a thing. Trying to +set it results in the error: + + + echo noop + /init: line 108: echo: write error: Invalid argument + +The current recommendation (https://access.redhat.com/solutions/5427) +is to use mq-deadline, but that's also the default so we don't have to +do anything. + +A bigger reason to remove these lines is that kernel 6.11.0 has +introduced a hang where -- rarely -- the ext4 filesystem hangs if you +try to change the scheduler while handing a page fault, even if you're +setting a scheduler that doesn't exist. I couldn't get much detail +except for a couple of stack traces from different VMs: + + crash> set 234 + PID: 234 + COMMAND: "modprobe" + TASK: ffff9f5ec3a22f40 [THREAD_INFO: ffff9f5ec3a22f40] + CPU: 0 + STATE: TASK_UNINTERRUPTIBLE + crash> bt + PID: 234 TASK: ffff9f5ec3a22f40 CPU: 0 COMMAND: "modprobe" + #0 [ffffb21e002e7840] __schedule at ffffffffa718f6d0 + #1 [ffffb21e002e78f8] schedule at ffffffffa7190a27 + #2 [ffffb21e002e7908] __bio_queue_enter at ffffffffa67e121c + #3 [ffffb21e002e7968] blk_mq_submit_bio at ffffffffa67f358c + #4 [ffffb21e002e79f0] __submit_bio at ffffffffa67e1e3c + #5 [ffffb21e002e7a58] submit_bio_noacct_nocheck at ffffffffa67e2326 + #6 [ffffb21e002e7ac0] ext4_mpage_readpages at ffffffffa65ceafc + #7 [ffffb21e002e7be0] read_pages at ffffffffa6381d17 + #8 [ffffb21e002e7c40] page_cache_ra_unbounded at ffffffffa6381ff5 + #9 [ffffb21e002e7ca8] filemap_fault at ffffffffa63761b5 + #10 [ffffb21e002e7d48] __do_fault at ffffffffa63d1892 + #11 [ffffb21e002e7d70] do_fault at ffffffffa63d2425 + #12 [ffffb21e002e7da0] __handle_mm_fault at ffffffffa63d8c6b + #13 [ffffb21e002e7e88] handle_mm_fault at ffffffffa63d95c2 + #14 [ffffb21e002e7ec8] do_user_addr_fault at ffffffffa60b34ea + #15 [ffffb21e002e7f28] exc_page_fault at ffffffffa7186e4e + #16 [ffffb21e002e7f50] asm_exc_page_fault at ffffffffa72012a6 + RIP: 000055d16159f8d8 RSP: 00007ffdd4c1f340 RFLAGS: 00010206 + RAX: 00000000000bec82 RBX: 00007ff2fd00dc82 RCX: 000055d1615b492a + RDX: 00007ffdd4c216b0 RSI: 00000000200bec82 RDI: 000055d185725960 + RBP: 00007ffdd4c1f5a0 R8: 0000000000000000 R9: 0000000000000000 + R10: 0000000000000000 R11: 0000000000000202 R12: 00000000200bec82 + R13: 000055d185725960 R14: 00007ffdd4c216b0 R15: 000055d1615b9708 + ORIG_RAX: ffffffffffffffff CS: 0033 SS: 002b + + crash> set 230 + PID: 230 + COMMAND: "modprobe" + TASK: ffff98ce03ca3040 [THREAD_INFO: ffff98ce03ca3040] + CPU: 0 + STATE: TASK_UNINTERRUPTIBLE + crash> bt + PID: 230 TASK: ffff98ce03ca3040 CPU: 0 COMMAND: "modprobe" + #0 [ffffaf9940307840] __schedule at ffffffff9618f6d0 + #1 [ffffaf99403078f8] schedule at ffffffff96190a27 + #2 [ffffaf9940307908] __bio_queue_enter at ffffffff957e121c + #3 [ffffaf9940307968] blk_mq_submit_bio at ffffffff957f358c + #4 [ffffaf99403079f0] __submit_bio at ffffffff957e1e3c + #5 [ffffaf9940307a58] submit_bio_noacct_nocheck at ffffffff957e2326 + #6 [ffffaf9940307ac0] ext4_mpage_readpages at ffffffff955ceafc + #7 [ffffaf9940307be0] read_pages at ffffffff95381d1a + #8 [ffffaf9940307c40] page_cache_ra_unbounded at ffffffff95381ff5 + #9 [ffffaf9940307ca8] filemap_fault at ffffffff953761b5 + #10 [ffffaf9940307d48] __do_fault at ffffffff953d1895 + #11 [ffffaf9940307d70] do_fault at ffffffff953d2425 + #12 [ffffaf9940307da0] __handle_mm_fault at ffffffff953d8c6b + #13 [ffffaf9940307e88] handle_mm_fault at ffffffff953d95c2 + #14 [ffffaf9940307ec8] do_user_addr_fault at ffffffff950b34ea + #15 [ffffaf9940307f28] exc_page_fault at ffffffff96186e4e + #16 [ffffaf9940307f50] asm_exc_page_fault at ffffffff962012a6 + RIP: 0000556b7a7468d8 RSP: 00007ffde2ffb560 RFLAGS: 00000206 + RAX: 00000000000bec82 RBX: 00007f5331a0dc82 RCX: 0000556b7a75b92a + RDX: 00007ffde2ffd8d0 RSI: 00000000200bec82 RDI: 0000556ba8edf960 + RBP: 00007ffde2ffb7c0 R8: 0000000000000000 R9: 0000000000000000 + R10: 0000000000000000 R11: 0000000000000202 R12: 00000000200bec82 + R13: 0000556ba8edf960 R14: 00007ffde2ffd8d0 R15: 0000556b7a760708 + ORIG_RAX: ffffffffffffffff CS: 0033 SS: 002b + +Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2303267 +(cherry picked from commit b2d682a4730ead8b4ae07e5aaf6fa230c5eec305) +--- + appliance/init | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/appliance/init b/appliance/init +index 128a3c20e..dae06dbbe 100755 +--- a/appliance/init ++++ b/appliance/init +@@ -104,8 +104,6 @@ udevadm settle --timeout=600 + # Increase the SCSI timeout so we can read remote images. + shopt -s nullglob + for f in /sys/block/sd*/device/timeout; do echo 300 > $f; done +-# https://access.redhat.com/site/solutions/5427 +-for f in /sys/block/{h,s,ub,v}d*/queue/scheduler; do echo noop > $f; done + shopt -u nullglob + + # Set up the network. +-- +2.43.0 + diff --git a/SOURCES/README-replacement.in b/README-replacement.in similarity index 63% rename from SOURCES/README-replacement.in rename to README-replacement.in index f264092..388dc34 100644 --- a/SOURCES/README-replacement.in +++ b/README-replacement.in @@ -8,8 +8,7 @@ list: http://www.redhat.com/mailman/listinfo/libguestfs -This Red Hat Enterprise Linux package comes with a lot of help and -examples to get you started. +This package comes with a lot of help and examples to get you started. The first place to start are the manual pages. Type: @@ -20,19 +19,19 @@ The first place to start are the manual pages. Type: man virt-cat # and other virt-* tools If you install the libguestfs-devel package, then in the -/usr/share/doc/libguestfs-devel/ directory you will also -find: +/usr/share/doc/libguestfs-devel/ directory you will find other +documentation including: - BUGS: list of open bugs in this version - - ChangeLog: the detailed list of changes in this version + - ChangeLog.gz: the detailed list of changes in this version - - ROADMAP: the roadmap for future versions + - HACKING: how to extend libguestfs - TODO: ideas for extending libguestfs - *.c: example C programs using the API - - *.xml: example virt-inspector output + - *.xml.gz: example virt-inspector output (compressed) - - *.rng: virt-inspector RelaxNG schema + - virt-inspector.rng: virt-inspector RelaxNG schema diff --git a/SOURCES/0001-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch b/SOURCES/0001-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch deleted file mode 100644 index 19dfe77..0000000 --- a/SOURCES/0001-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 5b6d2b05fe0c4035b9791a751e3133d26c7baa2d Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 21 Dec 2012 15:50:11 +0000 -Subject: [PATCH] RHEL 8: Remove libguestfs live (RHBZ#798980). - -This isn't supported in RHEL 8. - -Disable daemon tests that require the 'unix' backend. ---- - lib/launch-unix.c | 7 +++++++ - tests/daemon/Makefile.am | 4 +--- - 2 files changed, 8 insertions(+), 3 deletions(-) - -diff --git a/lib/launch-unix.c b/lib/launch-unix.c -index 0d344f9df..74dd1bb4a 100644 ---- a/lib/launch-unix.c -+++ b/lib/launch-unix.c -@@ -37,6 +37,12 @@ - static int - launch_unix (guestfs_h *g, void *datav, const char *sockpath) - { -+ error (g, -+ "launch: In RHEL, only the 'libvirt' or 'direct' method is supported.\n" -+ "In particular, \"libguestfs live\" is not supported."); -+ return -1; -+ -+#if 0 - int r, daemon_sock = -1; - struct sockaddr_un addr; - uint32_t size; -@@ -106,6 +112,7 @@ launch_unix (guestfs_h *g, void *datav, const char *sockpath) - g->conn = NULL; - } - return -1; -+#endif - } - - static int -diff --git a/tests/daemon/Makefile.am b/tests/daemon/Makefile.am -index 921e6d1df..8b2887247 100644 ---- a/tests/daemon/Makefile.am -+++ b/tests/daemon/Makefile.am -@@ -23,9 +23,7 @@ include $(top_srcdir)/subdir-rules.mk - - check_DATA = captive-daemon.pm - --TESTS = \ -- test-daemon-start.pl \ -- test-btrfs.pl -+TESTS = - - TESTS_ENVIRONMENT = $(top_builddir)/run --test - --- -2.31.1 - diff --git a/SOURCES/0002-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch b/SOURCES/0002-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch deleted file mode 100644 index 4e2ee11..0000000 --- a/SOURCES/0002-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch +++ /dev/null @@ -1,330 +0,0 @@ -From 91b2a6e50211c58ea31a36351ec63c358f708bf9 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 18 Jul 2013 18:31:53 +0100 -Subject: [PATCH] RHEL 8: Remove 9p APIs from RHEL (RHBZ#921710). - ---- - Makefile.am | 2 +- - daemon/9p.c | 182 -------------------------------------- - daemon/Makefile.am | 1 - - docs/C_SOURCE_FILES | 1 - - generator/actions_core.ml | 21 ----- - generator/proc_nr.ml | 2 - - gobject/Makefile.inc | 2 - - po/POTFILES | 2 - - 8 files changed, 1 insertion(+), 212 deletions(-) - delete mode 100644 daemon/9p.c - -diff --git a/Makefile.am b/Makefile.am -index 3df1b6a7a..36e44dfd5 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -78,7 +78,7 @@ SUBDIRS += tests/xfs - SUBDIRS += tests/charsets - SUBDIRS += tests/xml - SUBDIRS += tests/mount-local --SUBDIRS += tests/9p -+#SUBDIRS += tests/9p - SUBDIRS += tests/rsync - SUBDIRS += tests/bigdirs - SUBDIRS += tests/disk-labels -diff --git a/daemon/9p.c b/daemon/9p.c -deleted file mode 100644 -index 743a96abd..000000000 ---- a/daemon/9p.c -+++ /dev/null -@@ -1,182 +0,0 @@ --/* libguestfs - the guestfsd daemon -- * Copyright (C) 2011 Red Hat Inc. -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- * -- * This program is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- * GNU General Public License for more details. -- * -- * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -- */ -- --#include -- --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --#include "ignore-value.h" -- --#include "daemon.h" --#include "actions.h" -- --#define BUS_PATH "/sys/bus/virtio/drivers/9pnet_virtio" -- --static void --modprobe_9pnet_virtio (void) --{ -- /* Required with Linux 5.6 and maybe earlier kernels. For unclear -- * reasons the module is not an automatic dependency of the 9p -- * module so doesn't get loaded automatically. -- */ -- ignore_value (command (NULL, NULL, "modprobe", "9pnet_virtio", NULL)); --} -- --/* https://bugzilla.redhat.com/show_bug.cgi?id=714981#c1 */ --char ** --do_list_9p (void) --{ -- CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (r); -- DIR *dir; -- -- modprobe_9pnet_virtio (); -- -- dir = opendir (BUS_PATH); -- if (!dir) { -- perror ("opendir: " BUS_PATH); -- if (errno != ENOENT) { -- reply_with_perror ("opendir: " BUS_PATH); -- return NULL; -- } -- -- /* If this directory doesn't exist, it probably means that -- * the virtio driver isn't loaded. Don't return an error -- * in this case, but return an empty list. -- */ -- if (end_stringsbuf (&r) == -1) -- return NULL; -- -- return take_stringsbuf (&r); -- } -- -- while (1) { -- struct dirent *d; -- -- errno = 0; -- d = readdir (dir); -- if (d == NULL) break; -- -- if (STRPREFIX (d->d_name, "virtio")) { -- CLEANUP_FREE char *mount_tag_path = NULL; -- if (asprintf (&mount_tag_path, BUS_PATH "/%s/mount_tag", -- d->d_name) == -1) { -- reply_with_perror ("asprintf"); -- closedir (dir); -- return NULL; -- } -- -- /* A bit unclear, but it looks like the virtio transport allows -- * the mount tag length to be unlimited (or up to 65536 bytes). -- * See: linux/include/linux/virtio_9p.h -- */ -- CLEANUP_FREE char *mount_tag = read_whole_file (mount_tag_path, NULL); -- if (mount_tag == 0) -- continue; -- -- if (add_string (&r, mount_tag) == -1) { -- closedir (dir); -- return NULL; -- } -- } -- } -- -- /* Check readdir didn't fail */ -- if (errno != 0) { -- reply_with_perror ("readdir: /sys/block"); -- closedir (dir); -- return NULL; -- } -- -- /* Close the directory handle */ -- if (closedir (dir) == -1) { -- reply_with_perror ("closedir: /sys/block"); -- return NULL; -- } -- -- /* Sort the tags. */ -- if (r.size > 0) -- sort_strings (r.argv, r.size); -- -- /* NULL terminate the list */ -- if (end_stringsbuf (&r) == -1) -- return NULL; -- -- return take_stringsbuf (&r); --} -- --/* Takes optional arguments, consult optargs_bitmask. */ --int --do_mount_9p (const char *mount_tag, const char *mountpoint, const char *options) --{ -- CLEANUP_FREE char *mp = NULL, *opts = NULL, *err = NULL; -- struct stat statbuf; -- int r; -- -- ABS_PATH (mountpoint, 0, return -1); -- -- mp = sysroot_path (mountpoint); -- if (!mp) { -- reply_with_perror ("malloc"); -- return -1; -- } -- -- /* Check the mountpoint exists and is a directory. */ -- if (stat (mp, &statbuf) == -1) { -- reply_with_perror ("%s", mountpoint); -- return -1; -- } -- if (!S_ISDIR (statbuf.st_mode)) { -- reply_with_perror ("%s: mount point is not a directory", mountpoint); -- return -1; -- } -- -- /* Add trans=virtio to the options. */ -- if ((optargs_bitmask & GUESTFS_MOUNT_9P_OPTIONS_BITMASK) && -- STRNEQ (options, "")) { -- if (asprintf (&opts, "trans=virtio,%s", options) == -1) { -- reply_with_perror ("asprintf"); -- return -1; -- } -- } -- else { -- opts = strdup ("trans=virtio"); -- if (opts == NULL) { -- reply_with_perror ("strdup"); -- return -1; -- } -- } -- -- modprobe_9pnet_virtio (); -- r = command (NULL, &err, -- "mount", "-o", opts, "-t", "9p", mount_tag, mp, NULL); -- if (r == -1) { -- reply_with_error ("%s on %s: %s", mount_tag, mountpoint, err); -- return -1; -- } -- -- return 0; --} -diff --git a/daemon/Makefile.am b/daemon/Makefile.am -index 038be592c..df9dcc4ee 100644 ---- a/daemon/Makefile.am -+++ b/daemon/Makefile.am -@@ -82,7 +82,6 @@ guestfsd_SOURCES = \ - ../common/protocol/guestfs_protocol.h \ - ../common/utils/cleanups.h \ - ../common/utils/guestfs-utils.h \ -- 9p.c \ - acl.c \ - actions.h \ - available.c \ -diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES -index cd5bd2924..831b7e25a 100644 ---- a/docs/C_SOURCE_FILES -+++ b/docs/C_SOURCE_FILES -@@ -63,7 +63,6 @@ common/windows/windows.c - common/windows/windows.h - customize/crypt-c.c - customize/perl_edit-c.c --daemon/9p.c - daemon/acl.c - daemon/actions.h - daemon/augeas.c -diff --git a/generator/actions_core.ml b/generator/actions_core.ml -index 806565b19..37476c93e 100644 ---- a/generator/actions_core.ml -+++ b/generator/actions_core.ml -@@ -6157,27 +6157,6 @@ This returns true iff the device exists and contains all zero bytes. - - Note that for large devices this can take a long time to run." }; - -- { defaults with -- name = "list_9p"; added = (1, 11, 12); -- style = RStringList (RPlainString, "mounttags"), [], []; -- shortdesc = "list 9p filesystems"; -- longdesc = "\ --List all 9p filesystems attached to the guest. A list of --mount tags is returned." }; -- -- { defaults with -- name = "mount_9p"; added = (1, 11, 12); -- style = RErr, [String (PlainString, "mounttag"); String (PlainString, "mountpoint")], [OString "options"]; -- camel_name = "Mount9P"; -- shortdesc = "mount 9p filesystem"; -- longdesc = "\ --Mount the virtio-9p filesystem with the tag C on the --directory C. -- --If required, C will be automatically added to the options. --Any other options required can be passed in the optional C --parameter." }; -- - { defaults with - name = "list_dm_devices"; added = (1, 11, 15); - style = RStringList (RDevice, "devices"), [], []; -diff --git a/generator/proc_nr.ml b/generator/proc_nr.ml -index 30e42864f..57976be36 100644 ---- a/generator/proc_nr.ml -+++ b/generator/proc_nr.ml -@@ -295,8 +295,6 @@ let proc_nr = [ - 282, "internal_autosync"; - 283, "is_zero"; - 284, "is_zero_device"; --285, "list_9p"; --286, "mount_9p"; - 287, "list_dm_devices"; - 288, "ntfsresize"; - 289, "btrfs_filesystem_resize"; -diff --git a/gobject/Makefile.inc b/gobject/Makefile.inc -index 650f8ddac..c4e735967 100644 ---- a/gobject/Makefile.inc -+++ b/gobject/Makefile.inc -@@ -94,7 +94,6 @@ guestfs_gobject_headers= \ - include/guestfs-gobject/optargs-mksquashfs.h \ - include/guestfs-gobject/optargs-mkswap.h \ - include/guestfs-gobject/optargs-mktemp.h \ -- include/guestfs-gobject/optargs-mount_9p.h \ - include/guestfs-gobject/optargs-mount_local.h \ - include/guestfs-gobject/optargs-ntfsclone_out.h \ - include/guestfs-gobject/optargs-ntfsfix.h \ -@@ -188,7 +187,6 @@ guestfs_gobject_sources= \ - src/optargs-mksquashfs.c \ - src/optargs-mkswap.c \ - src/optargs-mktemp.c \ -- src/optargs-mount_9p.c \ - src/optargs-mount_local.c \ - src/optargs-ntfsclone_out.c \ - src/optargs-ntfsfix.c \ -diff --git a/po/POTFILES b/po/POTFILES -index 69ea7134a..0782e8ceb 100644 ---- a/po/POTFILES -+++ b/po/POTFILES -@@ -47,7 +47,6 @@ common/visit/visit.c - common/windows/windows.c - customize/crypt-c.c - customize/perl_edit-c.c --daemon/9p.c - daemon/acl.c - daemon/augeas.c - daemon/available.c -@@ -277,7 +276,6 @@ gobject/src/optargs-mkfs_btrfs.c - gobject/src/optargs-mksquashfs.c - gobject/src/optargs-mkswap.c - gobject/src/optargs-mktemp.c --gobject/src/optargs-mount_9p.c - gobject/src/optargs-mount_local.c - gobject/src/optargs-ntfsclone_out.c - gobject/src/optargs-ntfsfix.c --- -2.31.1 - diff --git a/SOURCES/0004-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch b/SOURCES/0004-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch deleted file mode 100644 index bb2f9e9..0000000 --- a/SOURCES/0004-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 34f8c6a5eb0eabfba4ab1831b45e2baa73a4b501 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 19 Sep 2014 13:38:20 +0100 -Subject: [PATCH] RHEL 8: Remove User-Mode Linux (RHBZ#1144197). - -This isn't supported in RHEL 8. ---- - lib/launch-uml.c | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/lib/launch-uml.c b/lib/launch-uml.c -index 5aec50a57..8b9fcd770 100644 ---- a/lib/launch-uml.c -+++ b/lib/launch-uml.c -@@ -44,7 +44,9 @@ struct backend_uml_data { - char umid[UML_UMID_LEN+1]; /* umid=<...> unique ID. */ - }; - -+#if 0 - static void print_vmlinux_command_line (guestfs_h *g, char **argv); -+#endif - - /* Run uml_mkcow to create a COW overlay. */ - static char * -@@ -81,6 +83,7 @@ create_cow_overlay_uml (guestfs_h *g, void *datav, struct drive *drv) - return make_cow_overlay (g, drv->src.u.path); - } - -+#if 0 - /* Test for features which are not supported by the UML backend. - * Possibly some of these should just be warnings, not errors. - */ -@@ -133,10 +136,17 @@ uml_supported (guestfs_h *g) - - return true; - } -+#endif - - static int - launch_uml (guestfs_h *g, void *datav, const char *arg) - { -+ error (g, -+ "launch: In RHEL, only the 'libvirt' or 'direct' method is supported.\n" -+ "In particular, User-Mode Linux (UML) is not supported."); -+ return -1; -+ -+#if 0 - struct backend_uml_data *data = datav; - CLEANUP_FREE_STRINGSBUF DECLARE_STRINGSBUF (cmdline); - int console_sock = -1, daemon_sock = -1; -@@ -496,8 +506,10 @@ launch_uml (guestfs_h *g, void *datav, const char *arg) - } - g->state = CONFIG; - return -1; -+#endif - } - -+#if 0 - /* This is called from the forked subprocess just before vmlinux runs, - * so it can just print the message straight to stderr, where it will - * be picked up and funnelled through the usual appliance event API. -@@ -527,6 +539,7 @@ print_vmlinux_command_line (guestfs_h *g, char **argv) - - fputc ('\n', stderr); - } -+#endif - - static int - shutdown_uml (guestfs_h *g, void *datav, int check_for_errors) --- -2.31.1 - diff --git a/SOURCES/0006-build-Avoid-warnings-about-unknown-pragmas.patch b/SOURCES/0006-build-Avoid-warnings-about-unknown-pragmas.patch deleted file mode 100644 index b322d8d..0000000 --- a/SOURCES/0006-build-Avoid-warnings-about-unknown-pragmas.patch +++ /dev/null @@ -1,37 +0,0 @@ -From dbd1eaab6a478cf0c3ea093a56b3d04c29278615 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 12 Jan 2021 10:23:11 +0000 -Subject: [PATCH] build: Avoid warnings about unknown pragmas. - -In commit 4bbbf03b8bc266ed2b63c461cd0945250bb134fe we started to -ignore bogus GCC 11 warnings. Unfortunately earlier versions of GCC -don't know about those pragmas so give warnings [hence errors in -developer builds] like: - -tsk.c:75:32: error: unknown option after '#pragma GCC diagnostic' kind [-Werror=pragmas] - -Turn off these warnings. - -Updates: commit 4bbbf03b8bc266ed2b63c461cd0945250bb134fe -(cherry picked from commit 812f837c97f48ce0c26a0e02286fb9180c282923) ---- - m4/guestfs-c.m4 | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/m4/guestfs-c.m4 b/m4/guestfs-c.m4 -index 25ffea0d9..bbb4db464 100644 ---- a/m4/guestfs-c.m4 -+++ b/m4/guestfs-c.m4 -@@ -108,6 +108,9 @@ gl_WARN_ADD([-Wformat-truncation=1]) - dnl GCC 9 at level 2 gives apparently bogus errors when %.*s is used. - gl_WARN_ADD([-Wformat-overflow=1]) - -+dnl GCC < 11 gives warnings when disabling GCC 11 warnings. -+gl_WARN_ADD([-Wno-pragmas]) -+ - AC_SUBST([WARN_CFLAGS]) - - NO_SNV_CFLAGS= --- -2.31.1 - diff --git a/SOURCES/0007-daemon-lvm-Use-lvcreate-yes-to-avoid-interactive-pro.patch b/SOURCES/0007-daemon-lvm-Use-lvcreate-yes-to-avoid-interactive-pro.patch deleted file mode 100644 index 54275ce..0000000 --- a/SOURCES/0007-daemon-lvm-Use-lvcreate-yes-to-avoid-interactive-pro.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 22416a2329ec531b9608c21b11ff3d53275fe7a0 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 22 Feb 2021 10:18:45 +0000 -Subject: [PATCH] daemon: lvm: Use lvcreate --yes to avoid interactive prompts. - -See https://bugzilla.redhat.com/show_bug.cgi?id=1930996#c1 - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1930996 -(cherry picked from commit 21cd97732c4973db835b8b6540c8ad582ebd2bda) ---- - daemon/lvm.c | 2 +- - tests/regressions/Makefile.am | 2 ++ - tests/regressions/rhbz1930996.sh | 36 ++++++++++++++++++++++++++++++++ - 3 files changed, 39 insertions(+), 1 deletion(-) - create mode 100755 tests/regressions/rhbz1930996.sh - -diff --git a/daemon/lvm.c b/daemon/lvm.c -index 841dc4b6b..72c59c3a1 100644 ---- a/daemon/lvm.c -+++ b/daemon/lvm.c -@@ -219,7 +219,7 @@ do_lvcreate (const char *logvol, const char *volgroup, int mbytes) - snprintf (size, sizeof size, "%d", mbytes); - - r = command (NULL, &err, -- "lvm", "lvcreate", -+ "lvm", "lvcreate", "--yes", - "-L", size, "-n", logvol, volgroup, NULL); - if (r == -1) { - reply_with_error ("%s", err); -diff --git a/tests/regressions/Makefile.am b/tests/regressions/Makefile.am -index ecb0d68a7..c1e0ee8a9 100644 ---- a/tests/regressions/Makefile.am -+++ b/tests/regressions/Makefile.am -@@ -49,6 +49,7 @@ EXTRA_DIST = \ - rhbz1370424.sh \ - rhbz1370424.xml \ - rhbz1477623.sh \ -+ rhbz1930996.sh \ - test-noexec-stack.pl - - TESTS = \ -@@ -79,6 +80,7 @@ TESTS = \ - rhbz1285847.sh \ - rhbz1370424.sh \ - rhbz1477623.sh \ -+ rhbz1930996.sh \ - test-big-heap \ - test-noexec-stack.pl \ - $(SLOW_TESTS) -diff --git a/tests/regressions/rhbz1930996.sh b/tests/regressions/rhbz1930996.sh -new file mode 100755 -index 000000000..27089beaa ---- /dev/null -+++ b/tests/regressions/rhbz1930996.sh -@@ -0,0 +1,36 @@ -+#!/bin/bash - -+# libguestfs -+# Copyright (C) 2017-2021 Red Hat Inc. -+# -+# This program is free software; you can redistribute it and/or modify -+# it under the terms of the GNU General Public License as published by -+# the Free Software Foundation; either version 2 of the License, or -+# (at your option) any later version. -+# -+# This program is distributed in the hope that it will be useful, -+# but WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+# GNU General Public License for more details. -+# -+# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ -+# Regression test for: -+# https://bugzilla.redhat.com/show_bug.cgi?id=1930996#c1 -+# -+# Actually a bug/change in LVM, previously we failed to create an LV -+# if the underlying disk contained a filesystem signature. -+ -+set -e -+ -+$TEST_FUNCTIONS -+skip_if_skipped -+skip_unless_phony_guest fedora.img -+ -+f=rhbz1930996.img -+rm -f $f -+ -+guestfish -N $f=lvfs vgremove VG : vgcreate VG /dev/sda1 : lvcreate LV2 VG 100 -+ -+rm $f --- -2.31.1 - diff --git a/SOURCES/0008-inspection-More-reliable-detection-of-Linux-split-us.patch b/SOURCES/0008-inspection-More-reliable-detection-of-Linux-split-us.patch deleted file mode 100644 index 5b14b93..0000000 --- a/SOURCES/0008-inspection-More-reliable-detection-of-Linux-split-us.patch +++ /dev/null @@ -1,113 +0,0 @@ -From e1b339688e5f8f2a14fe0c7e9d02ad68004e4655 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 15 Apr 2021 09:18:22 +0100 -Subject: [PATCH] inspection: More reliable detection of Linux split /usr - configurations - -In RHEL 8+, /usr/etc no longer exists. Since we were looking for this -directory in order to detect a separate /usr partition, those were no -longer detected, so the merging of /usr data into the root was not -being done. The result was incomplete inspection data and failure of -virt-v2v. - -All Linux systems since forever have had /usr/src but not /src, so -detect this instead. - -Furthermore the merging code didn't work, because we expected that the -root filesystem had a distro assigned, but in this configuration we -may need to look for that information in /usr/lib/os-release (not on -the root filesystem). This change makes the merging work even if we -have incomplete information about the root filesystem, so long as we -have an /etc/fstab entry pointing to the /usr mountpoint. - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1949683 -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1930133 -Fixes: commit 394d11be49121884295e61964ed47f5a8488c252 -(cherry picked from commit 26427b9ecc64e7e5e53a1d577cef9dc080d08877) ---- - daemon/inspect.ml | 33 +++++++++++++++------------------ - daemon/inspect_fs.ml | 6 +++--- - 2 files changed, 18 insertions(+), 21 deletions(-) - -diff --git a/daemon/inspect.ml b/daemon/inspect.ml -index 945a476f6..fb75b4a6c 100644 ---- a/daemon/inspect.ml -+++ b/daemon/inspect.ml -@@ -182,11 +182,9 @@ and check_for_duplicated_bsd_root fses = - and collect_linux_inspection_info fses = - List.map ( - function -- | { role = RoleRoot { distro = Some d } } as root -> -- if d <> DISTRO_COREOS then -- collect_linux_inspection_info_for fses root -- else -- root -+ | { role = RoleRoot { distro = Some DISTRO_COREOS } } as root -> root -+ | { role = RoleRoot _ } as root -> -+ collect_linux_inspection_info_for fses root - | fs -> fs - ) fses - -@@ -196,29 +194,28 @@ and collect_linux_inspection_info fses = - * or other ways to identify the OS). - *) - and collect_linux_inspection_info_for fses root = -- let root_distro, root_fstab = -+ let root_fstab = - match root with -- | { role = RoleRoot { distro = Some d; fstab = f } } -> d, f -+ | { role = RoleRoot { fstab = f } } -> f - | _ -> assert false in - - try - let usr = - List.find ( - function -- | { role = RoleUsr { distro = d } } -- when d = Some root_distro || d = None -> true -+ | { role = RoleUsr _; fs_location = usr_mp } -> -+ (* This checks that this usr is found in the fstab of -+ * the root filesystem. -+ *) -+ List.exists ( -+ fun (mountable, _) -> -+ usr_mp.mountable = mountable -+ ) root_fstab - | _ -> false - ) fses in - -- let usr_mountable = usr.fs_location.mountable in -- -- (* This checks that [usr] is found in the fstab of the root -- * filesystem. If not, [Not_found] is thrown. -- *) -- ignore ( -- List.find (fun (mountable, _) -> usr_mountable = mountable) root_fstab -- ); -- -+ eprintf "collect_linux_inspection_info_for: merging:\n%sinto:\n%s" -+ (string_of_fs usr) (string_of_fs root); - merge usr root; - root - with -diff --git a/daemon/inspect_fs.ml b/daemon/inspect_fs.ml -index 6e00c7083..02b5a0470 100644 ---- a/daemon/inspect_fs.ml -+++ b/daemon/inspect_fs.ml -@@ -164,10 +164,10 @@ and check_filesystem mountable = - () - ) - (* Linux /usr? *) -- else if Is.is_dir "/etc" && -- Is.is_dir "/bin" && -- Is.is_dir "/share" && -+ else if Is.is_dir "/bin" && - Is.is_dir "/local" && -+ Is.is_dir "/share" && -+ Is.is_dir "/src" && - not (Is.is_file "/etc/fstab") then ( - debug_matching "Linux /usr"; - role := `Usr; --- -2.31.1 - diff --git a/SOURCES/0009-lib-Autodetect-backing-format-for-qemu-img-create-b.patch b/SOURCES/0009-lib-Autodetect-backing-format-for-qemu-img-create-b.patch deleted file mode 100644 index 6cc2f94..0000000 --- a/SOURCES/0009-lib-Autodetect-backing-format-for-qemu-img-create-b.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 791a16b049ea1ce2c450acd367fce774d9aab5b1 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Tue, 31 Aug 2021 08:27:15 +0100 -Subject: [PATCH] lib: Autodetect backing format for qemu-img create -b - -qemu 6.1 has decided to change qemu-img create so that a backing -format (-F) is required if a backing file (-b) is specified. Since we -don't want to change the libguestfs API to force callers to specify -this because that would be an API break, autodetect it. - -This is similar to commit c8c181e8d9 ("launch: libvirt: Autodetect -backing format for readonly drive overlays"). - -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1998820 -(cherry picked from commit 45de287447bb18d59749fbfc1ec5072413090109) ---- - lib/create.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/lib/create.c b/lib/create.c -index 44a7df25f..75a4d3a28 100644 ---- a/lib/create.c -+++ b/lib/create.c -@@ -255,6 +255,7 @@ disk_create_qcow2 (guestfs_h *g, const char *filename, int64_t size, - const struct guestfs_disk_create_argv *optargs) - { - const char *backingformat = NULL; -+ CLEANUP_FREE char *backingformat_free = NULL; - const char *preallocation = NULL; - const char *compat = NULL; - int clustersize = -1; -@@ -270,6 +271,14 @@ disk_create_qcow2 (guestfs_h *g, const char *filename, int64_t size, - return -1; - } - } -+ else if (backingfile) { -+ /* Since qemu 6.1, qemu-img create has requires a backing format (-F) -+ * parameter if backing file (-b) is used (RHBZ#1998820). -+ */ -+ backingformat = backingformat_free = guestfs_disk_format (g, backingfile); -+ if (!backingformat) -+ return -1; -+ } - if (optargs->bitmask & GUESTFS_DISK_CREATE_PREALLOCATION_BITMASK) { - if (STREQ (optargs->preallocation, "off") || - STREQ (optargs->preallocation, "sparse")) --- -2.31.1 - diff --git a/SOURCES/0010-daemon-chroot-Fix-long-standing-possible-deadlock.patch b/SOURCES/0010-daemon-chroot-Fix-long-standing-possible-deadlock.patch deleted file mode 100644 index d606eae..0000000 --- a/SOURCES/0010-daemon-chroot-Fix-long-standing-possible-deadlock.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 3435938f43ca3737ec1d73da4d8cad756b5c9508 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 26 Mar 2021 16:04:43 +0000 -Subject: [PATCH] daemon: chroot: Fix long-standing possible deadlock. - -The child (chrooted) process wrote its answer on the pipe and then -exited. Meanwhile the parent waiting for the child to exit before -reading from the pipe. Thus if the output was larger than a Linux -pipebuffer then the whole thing would deadlock. - -(cherry picked from commit 94e64b28bee3b8dc7ed354a366d6a8f7ba5f245c) ---- - daemon/chroot.ml | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/daemon/chroot.ml b/daemon/chroot.ml -index 5e856c91f..7da8ae29e 100644 ---- a/daemon/chroot.ml -+++ b/daemon/chroot.ml -@@ -62,6 +62,10 @@ let f t func arg = - (* Parent. *) - close wfd; - -+ let chan = in_channel_of_descr rfd in -+ let ret = input_value chan in -+ close_in chan; -+ - let _, status = waitpid [] pid in - (match status with - | WEXITED 0 -> () -@@ -76,10 +80,6 @@ let f t func arg = - failwithf "chroot ‘%s’ stopped by signal %d" t.name i - ); - -- let chan = in_channel_of_descr rfd in -- let ret = input_value chan in -- close_in chan; -- - match ret with - | Either ret -> ret - | Or exn -> raise exn --- -2.31.1 - diff --git a/SOURCES/0011-inspection-Fix-inspection-of-recent-RPM-guests-using.patch b/SOURCES/0011-inspection-Fix-inspection-of-recent-RPM-guests-using.patch deleted file mode 100644 index 49f0938..0000000 --- a/SOURCES/0011-inspection-Fix-inspection-of-recent-RPM-guests-using.patch +++ /dev/null @@ -1,1064 +0,0 @@ -From 2ff8ad25680373997c2975d7ca51f3af7115eb01 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Fri, 26 Mar 2021 12:19:28 +0000 -Subject: [PATCH] inspection: Fix inspection of recent RPM guests using - non-BDB. - -Recent RPM-based guests have switched from using Berkeley DB (BDB) to -sqlite. In order to inspect these guests (and earlier ones) we need -to stop using the hokey parsing of the BDB and use librpm APIs -instead. - -This commit adds a new internal API so we can call librpm from the -daemon, and changes the library part to use the new API for RPM-based -guests. - -This change removes the requirement for BDB tools like db_dump. - -See also: -http://lists.rpm.org/pipermail/rpm-ecosystem/2021-March/000751.html -http://lists.rpm.org/pipermail/rpm-ecosystem/2021-March/000754.html -https://blog.fpmurphy.com/2011/08/programmatically-retrieve-rpm-package-details.html - -This breaks the virt-inspector test (now in the separate guestfs-tools -repository). However this is not a bug in libguestfs, but a bug in -the phoney Fedora guest that we use for testing - we created a -BDB-style RPM database which was supposed to be just enough to make -the old code work. The new code using real librpm needs -/usr/lib/rpm/rpmrc (not present in the phoney image) and also cannot -parse the phoney database, so we will need to separately rework that -test. - -Thanks: Panu Matilainen -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1766487 -Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1409024 -(cherry picked from commit c9ee831affed55abe0f928134cbbd2ed83b2f510) ---- - .gitignore | 1 + - appliance/packagelist.in | 2 + - daemon/Makefile.am | 8 +- - daemon/rpm-c.c | 161 ++++++++++++++++++++ - daemon/rpm.ml | 58 +++++++ - docs/C_SOURCE_FILES | 2 +- - docs/guestfs-building.pod | 9 +- - generator/actions_inspection.ml | 10 ++ - generator/proc_nr.ml | 1 + - lib/MAX_PROC_NR | 2 +- - lib/Makefile.am | 1 - - lib/dbdump.c | 229 ---------------------------- - lib/guestfs-internal.h | 4 - - lib/inspect-apps.c | 259 +------------------------------- - m4/guestfs-daemon.m4 | 8 + - m4/guestfs-progs.m4 | 10 -- - 16 files changed, 258 insertions(+), 507 deletions(-) - create mode 100644 daemon/rpm-c.c - create mode 100644 daemon/rpm.ml - delete mode 100644 lib/dbdump.c - -diff --git a/.gitignore b/.gitignore -index 7a4696b90..c8b53cac9 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -176,6 +176,7 @@ Makefile.in - /daemon/optgroups.mli - /daemon/parted.mli - /daemon/realpath.mli -+/daemon/rpm.mli - /daemon/stamp-guestfsd.pod - /daemon/statvfs.mli - /daemon/structs-cleanups.c -diff --git a/appliance/packagelist.in b/appliance/packagelist.in -index 25f2645d2..15af4284a 100644 ---- a/appliance/packagelist.in -+++ b/appliance/packagelist.in -@@ -41,6 +41,7 @@ ifelse(REDHAT,1, - openssh-clients - policycoreutils - reiserfs-utils -+ rpm-libs - syslinux-extlinux - systemd dnl for /sbin/reboot and udevd - vim-minimal -@@ -71,6 +72,7 @@ dnl iproute has been renamed to iproute2 - isc-dhcp-client - ldmtool - libc-bin -+ librpm9 - linux-image - dnl syslinux 'suggests' mtools, but in reality it's a hard dependency: - mtools -diff --git a/daemon/Makefile.am b/daemon/Makefile.am -index df9dcc4ee..7f2d13414 100644 ---- a/daemon/Makefile.am -+++ b/daemon/Makefile.am -@@ -57,6 +57,7 @@ generator_built = \ - optgroups.mli \ - parted.mli \ - realpath.mli \ -+ rpm.mli \ - statvfs.mli \ - structs.ml \ - structs.mli -@@ -167,6 +168,7 @@ guestfsd_SOURCES = \ - proto.c \ - readdir.c \ - rename.c \ -+ rpm-c.c \ - rsync.c \ - scrub.c \ - selinux.c \ -@@ -231,6 +233,7 @@ guestfsd_LDADD = \ - $(LIB_CLOCK_GETTIME) \ - $(LIBINTL) \ - $(PCRE_LIBS) \ -+ $(LIBRPM_LIBS) \ - $(TSK_LIBS) \ - $(RPC_LIBS) \ - $(YARA_LIBS) \ -@@ -260,7 +263,8 @@ guestfsd_CFLAGS = \ - $(HIVEX_CFLAGS) \ - $(SD_JOURNAL_CFLAGS) \ - $(JANSSON_CFLAGS) \ -- $(PCRE_CFLAGS) -+ $(PCRE_CFLAGS) \ -+ $(LIBRPM_CFLAGS) - - # Parts of the daemon are written in OCaml. These are linked into a - # library and then linked to the daemon. See -@@ -298,6 +302,7 @@ SOURCES_MLI = \ - optgroups.mli \ - parted.mli \ - realpath.mli \ -+ rpm.mli \ - statvfs.mli \ - structs.mli \ - sysroot.mli \ -@@ -338,6 +343,7 @@ SOURCES_ML = \ - inspect_fs_windows.ml \ - inspect_fs.ml \ - inspect.ml \ -+ rpm.ml \ - callbacks.ml \ - daemon.ml - -diff --git a/daemon/rpm-c.c b/daemon/rpm-c.c -new file mode 100644 -index 000000000..92a3abf58 ---- /dev/null -+++ b/daemon/rpm-c.c -@@ -0,0 +1,161 @@ -+/* libguestfs - the guestfsd daemon -+ * Copyright (C) 2021 Red Hat Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ */ -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#ifdef HAVE_LIBRPM -+#include -+#include -+#include -+#include -+#endif -+ -+#include "daemon.h" -+#include "actions.h" -+ -+/* Very lightweight OCaml bindings for librpm. */ -+ -+#pragma GCC diagnostic ignored "-Wimplicit-function-declaration" -+#pragma GCC diagnostic ignored "-Wmissing-prototypes" -+ -+#ifndef HAVE_LIBRPM -+ -+value __attribute__((noreturn)) -+guestfs_int_daemon_rpm_init (value unitv) -+{ -+ CAMLparam1 (unitv); -+ caml_failwith ("no support for RPM guests because " -+ "librpm was missing at compile time"); -+} -+ -+value __attribute__((noreturn)) -+guestfs_int_daemon_rpm_start_iterator (value unitv) -+{ -+ guestfs_int_daemon_rpm_init (unitv); -+} -+ -+value __attribute__((noreturn)) -+guestfs_int_daemon_rpm_next_application (value unitv) -+{ -+ guestfs_int_daemon_rpm_init (unitv); -+} -+ -+value __attribute__((noreturn)) -+guestfs_int_daemon_rpm_end_iterator (value unitv) -+{ -+ guestfs_int_daemon_rpm_init (unitv); -+} -+ -+#else /* HAVE_LIBRPM */ -+ -+value -+guestfs_int_daemon_rpm_init (value unitv) -+{ -+ CAMLparam1 (unitv); -+ rpmReadConfigFiles (NULL, NULL); -+ CAMLreturn (Val_unit); -+} -+ -+static rpmts ts; -+static rpmdbMatchIterator iter; -+ -+value -+guestfs_int_daemon_rpm_start_iterator (value unitv) -+{ -+ CAMLparam1 (unitv); -+ ts = rpmtsCreate (); -+ iter = rpmtsInitIterator (ts, RPMDBI_PACKAGES, NULL, 0); -+ CAMLreturn (Val_unit); -+} -+ -+value -+guestfs_int_daemon_rpm_next_application (value unitv) -+{ -+ CAMLparam1 (unitv); -+ CAMLlocal2 (rv, sv); -+ Header h; -+ guestfs_int_application2 app = { 0 }; -+ -+ h = rpmdbNextIterator (iter); -+ if (h == NULL) caml_raise_not_found (); -+ -+ h = headerLink (h); -+ app.app2_name = headerFormat (h, "%{NAME}", NULL); -+ // XXXapp.app2_epoch = headerFormat (h, "%{NAME}", NULL); -+ app.app2_version = headerFormat (h, "%{VERSION}", NULL); -+ app.app2_release = headerFormat (h, "%{RELEASE}", NULL); -+ app.app2_arch = headerFormat (h, "%{ARCH}", NULL); -+ app.app2_url = headerFormat (h, "%{URL}", NULL); -+ app.app2_summary = headerFormat (h, "%{SUMMARY}", NULL); -+ app.app2_description = headerFormat (h, "%{DESCRIPTION}", NULL); -+ headerFree (h); -+ -+ /* Convert this to an OCaml struct. Any NULL fields must be turned -+ * into empty string. -+ */ -+ rv = caml_alloc (17, 0); -+#define TO_CAML_STRING(i, name) \ -+ sv = caml_copy_string (app.name ? app.name : ""); \ -+ Store_field (rv, i, sv); \ -+ free (app.name) -+ -+ TO_CAML_STRING (0, app2_name); -+ TO_CAML_STRING (1, app2_display_name); -+ sv = caml_copy_int32 (app.app2_epoch); -+ Store_field (rv, 2, sv); -+ TO_CAML_STRING (3, app2_version); -+ TO_CAML_STRING (4, app2_release); -+ TO_CAML_STRING (5, app2_arch); -+ TO_CAML_STRING (6, app2_install_path); -+ TO_CAML_STRING (7, app2_trans_path); -+ TO_CAML_STRING (8, app2_publisher); -+ TO_CAML_STRING (9, app2_url); -+ TO_CAML_STRING (10, app2_source_package); -+ TO_CAML_STRING (11, app2_summary); -+ TO_CAML_STRING (12, app2_description); -+ TO_CAML_STRING (13, app2_spare1); -+ TO_CAML_STRING (14, app2_spare2); -+ TO_CAML_STRING (15, app2_spare3); -+ TO_CAML_STRING (16, app2_spare4); -+#undef TO_CAML_STRING -+ -+ CAMLreturn (rv); -+} -+ -+value -+guestfs_int_daemon_rpm_end_iterator (value unitv) -+{ -+ CAMLparam1 (unitv); -+ rpmdbFreeIterator (iter); -+ rpmtsFree (ts); -+ CAMLreturn (Val_unit); -+} -+ -+#endif /* HAVE_LIBRPM */ -diff --git a/daemon/rpm.ml b/daemon/rpm.ml -new file mode 100644 -index 000000000..f61ce41c5 ---- /dev/null -+++ b/daemon/rpm.ml -@@ -0,0 +1,58 @@ -+(* guestfs-inspection -+ * Copyright (C) 2009-2021 Red Hat Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License along -+ * with this program; if not, write to the Free Software Foundation, Inc., -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -+ *) -+ -+open Printf -+ -+open Std_utils -+ -+external rpm_init : unit -> unit = "guestfs_int_daemon_rpm_init" -+external rpm_start_iterator : unit -> unit = "guestfs_int_daemon_rpm_start_iterator" -+external rpm_next_application : unit -> Structs.application2 = "guestfs_int_daemon_rpm_next_application" -+external rpm_end_iterator : unit -> unit = "guestfs_int_daemon_rpm_end_iterator" -+ -+(* librpm is troublesome when run from the main process. In -+ * particular it holds open some glibc NSS files. Therefore we fork -+ * before doing the chroot and any librpm operations. -+ * -+ * We could also consider in future limiting the time taken to run the -+ * subprocess since it's unclear that parsing RPM config files from -+ * the guest in particular is safe. -+ *) -+let rec internal_list_rpm_applications () = -+ let chroot = Chroot.create ~name:"librpm" () in -+ let apps = Chroot.f chroot list_rpm_applications () in -+ eprintf "librpm returned %d installed packages\n%!" (List.length apps); -+ apps -+ -+and list_rpm_applications () = -+ rpm_init (); -+ rpm_start_iterator (); -+ let ret = ref [] in -+ let rec loop () = -+ try -+ let app = rpm_next_application () in -+ List.push_front app ret; -+ loop () -+ with Not_found -> () -+ in -+ loop (); -+ rpm_end_iterator (); -+ List.sort -+ (fun { Structs.app2_name = n1 } { Structs.app2_name = n2 } -> -+ compare n1 n2) -+ !ret -diff --git a/docs/C_SOURCE_FILES b/docs/C_SOURCE_FILES -index 831b7e25a..8b6aa8896 100644 ---- a/docs/C_SOURCE_FILES -+++ b/docs/C_SOURCE_FILES -@@ -149,6 +149,7 @@ daemon/pingdaemon.c - daemon/proto.c - daemon/readdir.c - daemon/rename.c -+daemon/rpm-c.c - daemon/rsync.c - daemon/scrub.c - daemon/selinux-relabel.c -@@ -293,7 +294,6 @@ lib/command.c - lib/conn-socket.c - lib/copy-in-out.c - lib/create.c --lib/dbdump.c - lib/drives.c - lib/errors.c - lib/event-string.c -diff --git a/docs/guestfs-building.pod b/docs/guestfs-building.pod -index 28c761ce4..4d75772d0 100644 ---- a/docs/guestfs-building.pod -+++ b/docs/guestfs-building.pod -@@ -210,11 +210,6 @@ eg. F. - Optional. Used by the L to - securely confine the appliance (sVirt). - --=item Berkeley DB utils (db_dump, db_load, etc) -- --Optional. Usually found in a package called C, --C, C etc. -- - =item systemtap - - Optional. For userspace probes. -@@ -252,6 +247,10 @@ Optional. Render icons from guests. - - Optional. Render icons from Windows guests. - -+=item librpm -+ -+Optional. To parse the list of applications from RPM-based guests. -+ - =item Perl C - - Optional. Perl module used to test L. -diff --git a/generator/actions_inspection.ml b/generator/actions_inspection.ml -index e2098cb00..690afd460 100644 ---- a/generator/actions_inspection.ml -+++ b/generator/actions_inspection.ml -@@ -607,6 +607,16 @@ Please read L for more details. - See also C, - C." }; - -+ { defaults with -+ name = "internal_list_rpm_applications"; added = (1, 45, 3); -+ style = RStructList ("applications2", "application2"), [], []; -+ visibility = VInternal; -+ impl = OCaml "Rpm.internal_list_rpm_applications"; -+ shortdesc = "get applications from RPM guest"; -+ longdesc = "\ -+This internal function is used by C -+to list the applications for RPM guests."}; -+ - ] - - let non_daemon_functions = [ -diff --git a/generator/proc_nr.ml b/generator/proc_nr.ml -index 57976be36..6b6cb7353 100644 ---- a/generator/proc_nr.ml -+++ b/generator/proc_nr.ml -@@ -514,6 +514,7 @@ let proc_nr = [ - 507, "luks_uuid"; - 508, "cryptsetup_open"; - 509, "cryptsetup_close"; -+510, "internal_list_rpm_applications"; - ] - - (* End of list. If adding a new entry, add it at the end of the list -diff --git a/lib/MAX_PROC_NR b/lib/MAX_PROC_NR -index 77afe238f..2bc4cd64b 100644 ---- a/lib/MAX_PROC_NR -+++ b/lib/MAX_PROC_NR -@@ -1 +1 @@ --509 -+510 -diff --git a/lib/Makefile.am b/lib/Makefile.am -index f9cc53df1..7f36ae515 100644 ---- a/lib/Makefile.am -+++ b/lib/Makefile.am -@@ -81,7 +81,6 @@ libguestfs_la_SOURCES = \ - conn-socket.c \ - copy-in-out.c \ - create.c \ -- dbdump.c \ - drives.c \ - errors.c \ - event-string.c \ -diff --git a/lib/dbdump.c b/lib/dbdump.c -deleted file mode 100644 -index 7c17ce6b3..000000000 ---- a/lib/dbdump.c -+++ /dev/null -@@ -1,229 +0,0 @@ --/* libguestfs -- * Copyright (C) 2010-2012 Red Hat Inc. -- * -- * This library is free software; you can redistribute it and/or -- * modify it under the terms of the GNU Lesser General Public -- * License as published by the Free Software Foundation; either -- * version 2 of the License, or (at your option) any later version. -- * -- * This library is distributed in the hope that it will be useful, -- * but WITHOUT ANY WARRANTY; without even the implied warranty of -- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- * Lesser General Public License for more details. -- * -- * You should have received a copy of the GNU Lesser General Public -- * License along with this library; if not, write to the Free Software -- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -- */ -- --#include -- --#include --#include --#include --#include --#include -- --#ifdef HAVE_ENDIAN_H --#include --#endif -- --#include "guestfs.h" --#include "guestfs-internal.h" -- --#if defined(DB_DUMP) -- --static void read_db_dump_line (guestfs_h *g, void *datav, const char *line, size_t len); --static unsigned char *convert_hex_to_binary (guestfs_h *g, const char *hex, size_t hexlen, size_t *binlen_rtn); -- --struct cb_data { -- guestfs_int_db_dump_callback callback; -- void *opaque; -- enum { reading_header, -- reading_key, reading_value, -- reading_finished, -- reading_failed } state; -- unsigned char *key; -- size_t keylen; --}; -- --/* This helper function is specialized to just reading the hash-format -- * output from db_dump/db4_dump. It's just enough to support the RPM -- * database format. -- */ --int --guestfs_int_read_db_dump (guestfs_h *g, -- const char *dumpfile, void *opaque, -- guestfs_int_db_dump_callback callback) --{ -- struct cb_data data; -- CLEANUP_CMD_CLOSE struct command *cmd = guestfs_int_new_command (g); -- int r; -- -- data.callback = callback; -- data.opaque = opaque; -- data.state = reading_header; -- data.key = NULL; -- -- guestfs_int_cmd_add_arg (cmd, DB_DUMP); -- guestfs_int_cmd_add_arg (cmd, "-k"); -- guestfs_int_cmd_add_arg (cmd, dumpfile); -- guestfs_int_cmd_set_stdout_callback (cmd, read_db_dump_line, &data, 0); -- -- r = guestfs_int_cmd_run (cmd); -- free (data.key); -- -- if (r == -1) -- return -1; -- if (!WIFEXITED (r) || WEXITSTATUS (r) != 0) { -- guestfs_int_external_command_failed (g, r, DB_DUMP, NULL); -- return -1; -- } -- if (data.state != reading_finished) { -- error (g, _("%s: unexpected error or end of output"), DB_DUMP); -- return -1; -- } -- -- return 0; --} -- --static void --read_db_dump_line (guestfs_h *g, void *datav, const char *line, size_t len) --{ -- struct cb_data *data = datav; -- -- switch (data->state) { -- case reading_finished: -- case reading_failed: -- return; -- -- case reading_header: -- /* Ignore everything to end-of-header marker. */ -- if (STRPREFIX (line, "HEADER=END")) -- data->state = reading_key; -- return; -- -- /* Read the key, value pairs using a state machine. They are -- * prefixed with a space and printed as hex strings, so convert -- * those strings to binary. Pass the strings up to the callback -- * function. -- */ -- case reading_key: -- if (STRPREFIX (line, "DATA=END")) { -- data->state = reading_finished; -- return; -- } -- -- if (len < 1 || line[0] != ' ') { -- debug (g, _("unexpected line from db_dump command, no space prefix")); -- data->state = reading_failed; -- return; -- } -- -- data->key = convert_hex_to_binary (g, &line[1], len-1, &data->keylen); -- if (data->key == NULL) { -- data->state = reading_failed; -- return; -- } -- -- data->state = reading_value; -- return; -- -- case reading_value: { -- CLEANUP_FREE unsigned char *value = NULL; -- size_t valuelen; -- -- if (len < 1 || line[0] != ' ') { -- debug (g, _("unexpected line from db_dump command, no space prefix")); -- data->state = reading_failed; -- return; -- } -- -- value = convert_hex_to_binary (g, &line[1], len-1, &valuelen); -- if (value == NULL) { -- data->state = reading_failed; -- return; -- } -- -- if (data->callback (g, data->key, data->keylen, -- value, valuelen, data->opaque) == -1) { -- data->state = reading_failed; -- return; -- } -- -- free (data->key); -- data->key = NULL; -- -- data->state = reading_key; -- return; -- } -- } --} -- --static int --convert_hex_octet (const char *h) --{ -- int r; -- -- switch (h[0]) { -- case 'a'...'f': -- r = (h[0] - 'a' + 10) << 4; -- break; -- case 'A'...'F': -- r = (h[0] - 'A' + 10) << 4; -- break; -- case '0'...'9': -- r = (h[0] - '0') << 4; -- break; -- default: -- return -1; -- } -- -- switch (h[1]) { -- case 'a'...'f': -- r |= h[1] - 'a' + 10; -- break; -- case 'A'...'F': -- r |= h[1] - 'A' + 10; -- break; -- case '0'...'9': -- r |= h[1] - '0'; -- break; -- default: -- return -1; -- } -- -- return r; --} -- --static unsigned char * --convert_hex_to_binary (guestfs_h *g, const char *hex, size_t hexlen, -- size_t *binlen_rtn) --{ -- unsigned char *bin; -- size_t binlen; -- size_t i, o; -- int b; -- -- if (hexlen > 0 && hex[hexlen-1] == '\n') -- hexlen--; -- -- binlen = hexlen / 2; -- bin = safe_malloc (g, binlen); -- -- for (i = o = 0; i+1 < hexlen && o < binlen; i += 2, ++o) { -- b = convert_hex_octet (&hex[i]); -- if (b >= 0) -- bin[o] = b; -- else { -- error (g, _("unexpected non-hex digits in output of db_dump command")); -- free (bin); -- return NULL; -- } -- } -- -- *binlen_rtn = binlen; -- return bin; --} -- --#endif /* defined(DB_DUMP) */ -diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h -index d7ec7215d..4799ee0a1 100644 ---- a/lib/guestfs-internal.h -+++ b/lib/guestfs-internal.h -@@ -719,10 +719,6 @@ extern int guestfs_int_set_backend (guestfs_h *g, const char *method); - /* inspect.c */ - extern char *guestfs_int_download_to_tmp (guestfs_h *g, const char *filename, const char *extension, uint64_t max_size); - --/* dbdump.c */ --typedef int (*guestfs_int_db_dump_callback) (guestfs_h *g, const unsigned char *key, size_t keylen, const unsigned char *value, size_t valuelen, void *opaque); --extern int guestfs_int_read_db_dump (guestfs_h *g, const char *dumpfile, void *opaque, guestfs_int_db_dump_callback callback); -- - /* lpj.c */ - extern int guestfs_int_get_lpj (guestfs_h *g); - -diff --git a/lib/inspect-apps.c b/lib/inspect-apps.c -index dbc9d968c..da0003672 100644 ---- a/lib/inspect-apps.c -+++ b/lib/inspect-apps.c -@@ -47,22 +47,12 @@ - - /* Some limits on what the inspection code will read, for safety. */ - --/* Maximum RPM 'Packages' file we will download to /tmp. This file -- * can get very large: 70 MB is roughly the standard size for a new -- * Fedora install, and after lots of package installation/removal -- * I have seen well over 400 MB databases. -- */ --#define MAX_RPM_PACKAGES_SIZE (500 * 1000 * 1000) --/* Maximum RPM 'Name' file we will download to /tmp. */ --#define MAX_RPM_NAME_SIZE (50 * 1000 * 1000) - /* Maximum dpkg 'status' file we will download to /tmp. */ - #define MAX_DPKG_STATUS_SIZE (50 * 1000 * 1000) - /* Maximum APK 'installed' file we will download to /tmp. */ - #define MAX_APK_INSTALLED_SIZE (50 * 1000 * 1000) - --#ifdef DB_DUMP - static struct guestfs_application2_list *list_applications_rpm (guestfs_h *g, const char *root); --#endif - static struct guestfs_application2_list *list_applications_deb (guestfs_h *g, const char *root); - static struct guestfs_application2_list *list_applications_pacman (guestfs_h *g, const char *root); - static struct guestfs_application2_list *list_applications_apk (guestfs_h *g, const char *root); -@@ -136,11 +126,9 @@ guestfs_impl_inspect_list_applications2 (guestfs_h *g, const char *root) - - if (STREQ (type, "linux") || STREQ (type, "hurd")) { - if (STREQ (package_format, "rpm")) { --#ifdef DB_DUMP - ret = list_applications_rpm (g, root); - if (ret == NULL) - return NULL; --#endif - } - else if (STREQ (package_format, "deb")) { - ret = list_applications_deb (g, root); -@@ -178,254 +166,15 @@ guestfs_impl_inspect_list_applications2 (guestfs_h *g, const char *root) - return ret; - } - --#ifdef DB_DUMP -- --/* This data comes from the Name database, and contains the application -- * names and the first 4 bytes of each link field. -- */ --struct rpm_names_list { -- struct rpm_name *names; -- size_t len; --}; --struct rpm_name { -- char *name; -- char link[4]; --}; -- --static void --free_rpm_names_list (struct rpm_names_list *list) --{ -- size_t i; -- -- for (i = 0; i < list->len; ++i) -- free (list->names[i].name); -- free (list->names); --} -- --static int --compare_links (const void *av, const void *bv) --{ -- const struct rpm_name *a = av; -- const struct rpm_name *b = bv; -- return memcmp (a->link, b->link, 4); --} -- --static int --read_rpm_name (guestfs_h *g, -- const unsigned char *key, size_t keylen, -- const unsigned char *value, size_t valuelen, -- void *listv) --{ -- struct rpm_names_list *list = listv; -- const unsigned char *link_p; -- char *name; -- -- /* Ignore bogus entries. */ -- if (keylen == 0 || valuelen < 4) -- return 0; -- -- /* A name entry will have as many links as installed instances of -- * that package. For example, if glibc.i686 and glibc.x86_64 are -- * both installed, then there will be a link for each Packages -- * entry. Add an entry onto list for all installed instances. -- */ -- for (link_p = value; link_p < value + valuelen; link_p += 8) { -- name = safe_strndup (g, (const char *) key, keylen); -- -- list->names = safe_realloc (g, list->names, -- (list->len + 1) * sizeof (struct rpm_name)); -- list->names[list->len].name = name; -- memcpy (list->names[list->len].link, link_p, 4); -- list->len++; -- } -- -- return 0; --} -- --#pragma GCC diagnostic push --#pragma GCC diagnostic ignored "-Wcast-align" -- --/* tag constants, see rpmtag.h in RPM for complete list */ --#define RPMTAG_VERSION 1001 --#define RPMTAG_RELEASE 1002 --#define RPMTAG_EPOCH 1003 --#define RPMTAG_ARCH 1022 --#define RPMTAG_URL 1020 --#define RPMTAG_SUMMARY 1004 --#define RPMTAG_DESCRIPTION 1005 -- --static char * --get_rpm_header_tag (guestfs_h *g, const unsigned char *header_start, -- size_t header_len, uint32_t tag, char type) --{ -- uint32_t num_fields, offset; -- const unsigned char *cursor = header_start + 8, *store, *header_end; -- size_t max_len; -- char iv[4]; -- -- /* This function parses the RPM header structure to pull out various -- * tag strings (version, release, arch, etc.). For more detail on the -- * header format, see: -- * http://www.rpm.org/max-rpm/s1-rpm-file-format-rpm-file-format.html#S2-RPM-FILE-FORMAT-HEADER -- */ -- -- /* The minimum header size that makes sense here is 24 bytes. Four -- * bytes for number of fields, followed by four bytes denoting the -- * size of the store, then 16 bytes for the first index entry. -- */ -- if (header_len < 24) -- return NULL; -- -- num_fields = be32toh (*(uint32_t *) header_start); -- store = header_start + 8 + (16 * num_fields); -- -- /* The first byte *after* the buffer. If you are here, you've gone -- * too far! */ -- header_end = header_start + header_len; -- -- while (cursor < store && cursor <= header_end - 16) { -- if (be32toh (*(uint32_t *) cursor) == tag) { -- offset = be32toh(*(uint32_t *) (cursor + 8)); -- -- if (store + offset >= header_end) -- return NULL; -- max_len = header_end - (store + offset); -- -- switch (type) { -- case 's': -- return safe_strndup (g, (const char *) (store + offset), max_len); -- -- case 'i': -- memset (iv, 0, sizeof iv); -- memcpy (iv, (void *) (store + offset), -- max_len > sizeof iv ? sizeof iv : max_len); -- return safe_memdup (g, iv, sizeof iv); -- -- default: -- abort (); -- } -- } -- cursor += 16; -- } -- -- return NULL; --} -- --struct read_package_data { -- struct rpm_names_list *list; -- struct guestfs_application2_list *apps; --}; -- --static int --read_package (guestfs_h *g, -- const unsigned char *key, size_t keylen, -- const unsigned char *value, size_t valuelen, -- void *datav) --{ -- struct read_package_data *data = datav; -- struct rpm_name nkey, *entry; -- CLEANUP_FREE char *version = NULL, *release = NULL, -- *epoch_str = NULL, *arch = NULL, *url = NULL, *summary = NULL, -- *description = NULL; -- int32_t epoch; -- -- /* This function reads one (key, value) pair from the Packages -- * database. The key is the link field (see struct rpm_name). The -- * value is a long binary string, but we can extract the header data -- * from it as below. First we have to look up the link field in the -- * list of links (which is sorted by link field). -- */ -- -- /* Ignore bogus entries. */ -- if (keylen < 4 || valuelen == 0) -- return 0; -- -- /* Look up the link (key) in the list. */ -- memcpy (nkey.link, key, 4); -- entry = bsearch (&nkey, data->list->names, data->list->len, -- sizeof (struct rpm_name), compare_links); -- if (!entry) -- return 0; /* Not found - ignore it. */ -- -- /* We found a matching link entry, so that gives us the application -- * name (entry->name). Now we can get other data for this -- * application out of the binary value string. -- */ -- -- version = get_rpm_header_tag (g, value, valuelen, RPMTAG_VERSION, 's'); -- release = get_rpm_header_tag (g, value, valuelen, RPMTAG_RELEASE, 's'); -- epoch_str = get_rpm_header_tag (g, value, valuelen, RPMTAG_EPOCH, 'i'); -- arch = get_rpm_header_tag (g, value, valuelen, RPMTAG_ARCH, 's'); -- url = get_rpm_header_tag (g, value, valuelen, RPMTAG_URL, 's'); -- summary = get_rpm_header_tag (g, value, valuelen, RPMTAG_SUMMARY, 's'); -- description = get_rpm_header_tag (g, value, valuelen, RPMTAG_DESCRIPTION, 's'); -- -- /* The epoch is stored as big-endian integer. */ -- if (epoch_str) -- epoch = be32toh (*(int32_t *) epoch_str); -- else -- epoch = 0; -- -- /* Add the application and what we know. */ -- if (version && release) -- add_application (g, data->apps, entry->name, "", epoch, version, release, -- arch ? arch : "", "", "", url ? : "", "", -- summary ? : "", description ? : ""); -- -- return 0; --} -- --#pragma GCC diagnostic pop -- - static struct guestfs_application2_list * - list_applications_rpm (guestfs_h *g, const char *root) - { -- CLEANUP_FREE char *Name = NULL, *Packages = NULL; -- struct rpm_names_list list = { .names = NULL, .len = 0 }; -- struct guestfs_application2_list *apps = NULL; -- struct read_package_data data; -- -- Name = guestfs_int_download_to_tmp (g, "/var/lib/rpm/Name", NULL, -- MAX_RPM_NAME_SIZE); -- if (Name == NULL) -- goto error; -- -- Packages = guestfs_int_download_to_tmp (g, "/var/lib/rpm/Packages", NULL, -- MAX_RPM_PACKAGES_SIZE); -- if (Packages == NULL) -- goto error; -- -- /* Read Name database. */ -- if (guestfs_int_read_db_dump (g, Name, &list, read_rpm_name) == -1) -- goto error; -- -- /* Sort the names by link field for fast searching. */ -- qsort (list.names, list.len, sizeof (struct rpm_name), compare_links); -- -- /* Allocate 'apps' list. */ -- apps = safe_malloc (g, sizeof *apps); -- apps->len = 0; -- apps->val = NULL; -- -- /* Read Packages database. */ -- data.list = &list; -- data.apps = apps; -- if (guestfs_int_read_db_dump (g, Packages, &data, read_package) == -1) -- goto error; -- -- free_rpm_names_list (&list); -- -- return apps; -- -- error: -- free_rpm_names_list (&list); -- guestfs_free_application2_list (apps); -- -- return NULL; -+ /* We don't need the ‘root’ parameter here. The caller is supposed -+ * to have mounted the guest up before calling the public API. -+ */ -+ return guestfs_internal_list_rpm_applications (g); - } - --#endif /* defined DB_DUMP */ -- - static struct guestfs_application2_list * - list_applications_deb (guestfs_h *g, const char *root) - { -diff --git a/m4/guestfs-daemon.m4 b/m4/guestfs-daemon.m4 -index aa90268b4..1728249a5 100644 ---- a/m4/guestfs-daemon.m4 -+++ b/m4/guestfs-daemon.m4 -@@ -102,6 +102,14 @@ PKG_CHECK_MODULES([HIVEX], [hivex],[ - [AC_MSG_FAILURE([hivex library is required])]) - AM_CONDITIONAL([HAVE_HIVEX],[test "x$HIVEX_LIBS" != "x"]) - -+dnl librpm library (optional) -+PKG_CHECK_MODULES([LIBRPM], [rpm >= 4.6.0],[ -+ AC_SUBST([LIBRPM_CFLAGS]) -+ AC_SUBST([LIBRPM_LIBS]) -+ AC_DEFINE([HAVE_LIBRPM],[1],[librpm library found at compile time.]) -+],[AC_MSG_WARN([librpm library not found])] -+) -+ - dnl systemd journal library (optional) - PKG_CHECK_MODULES([SD_JOURNAL], [libsystemd],[ - AC_SUBST([SD_JOURNAL_CFLAGS]) -diff --git a/m4/guestfs-progs.m4 b/m4/guestfs-progs.m4 -index bf1f83c9d..f90bda04e 100644 ---- a/m4/guestfs-progs.m4 -+++ b/m4/guestfs-progs.m4 -@@ -63,16 +63,6 @@ AC_CHECK_PROG([PO4A_GETTEXTIZE],[po4a-gettextize],[po4a-gettextize],[no]) - AC_CHECK_PROG([PO4A_TRANSLATE],[po4a-translate],[po4a-translate],[no]) - AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A_GETTEXTIZE" != "xno" && test "x$PO4A_TRANSLATE" != "xno"]) - --dnl Check for db_dump, db_load (optional). --GUESTFS_FIND_DB_TOOL([DB_DUMP], [dump]) --GUESTFS_FIND_DB_TOOL([DB_LOAD], [load]) --if test "x$DB_DUMP" != "xno"; then -- AC_DEFINE_UNQUOTED([DB_DUMP],["$DB_DUMP"],[Name of db_dump program.]) --fi --if test "x$DB_LOAD" != "xno"; then -- AC_DEFINE_UNQUOTED([DB_LOAD],["$DB_LOAD"],[Name of db_load program.]) --fi -- - dnl Check for netpbm programs (optional). - AC_PATH_PROGS([PBMTEXT],[pbmtext],[no]) - AC_PATH_PROGS([PNMTOPNG],[pnmtopng],[no]) --- -2.31.1 - diff --git a/SOURCES/0012-inspection-Return-RPM-epoch.patch b/SOURCES/0012-inspection-Return-RPM-epoch.patch deleted file mode 100644 index 9e50561..0000000 --- a/SOURCES/0012-inspection-Return-RPM-epoch.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 3ce392c9870a589cc50d2270fcf07b4d129c3dc3 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Sat, 27 Mar 2021 09:31:00 +0000 -Subject: [PATCH] inspection: Return RPM epoch. - -Fixes: commit c9ee831affed55abe0f928134cbbd2ed83b2f510 -(cherry picked from commit fef73bce7eec0ce0753a2e150e4e088020d38643) ---- - daemon/rpm-c.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/daemon/rpm-c.c b/daemon/rpm-c.c -index 92a3abf58..be0e81e22 100644 ---- a/daemon/rpm-c.c -+++ b/daemon/rpm-c.c -@@ -108,13 +108,16 @@ guestfs_int_daemon_rpm_next_application (value unitv) - - h = headerLink (h); - app.app2_name = headerFormat (h, "%{NAME}", NULL); -- // XXXapp.app2_epoch = headerFormat (h, "%{NAME}", NULL); - app.app2_version = headerFormat (h, "%{VERSION}", NULL); - app.app2_release = headerFormat (h, "%{RELEASE}", NULL); - app.app2_arch = headerFormat (h, "%{ARCH}", NULL); - app.app2_url = headerFormat (h, "%{URL}", NULL); - app.app2_summary = headerFormat (h, "%{SUMMARY}", NULL); - app.app2_description = headerFormat (h, "%{DESCRIPTION}", NULL); -+ -+ /* epoch is special as the only int field. */ -+ app.app2_epoch = headerGetNumber (h, RPMTAG_EPOCH); -+ - headerFree (h); - - /* Convert this to an OCaml struct. Any NULL fields must be turned --- -2.31.1 - diff --git a/SOURCES/0013-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch b/SOURCES/0013-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch deleted file mode 100644 index 91fa8ef..0000000 --- a/SOURCES/0013-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch +++ /dev/null @@ -1,4664 +0,0 @@ -From 87917f9bb911dd11c2f78b7a1a84a053e9e4e133 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 29 Mar 2021 12:22:12 +0100 -Subject: [PATCH] test-data/phony-guests: Fix phony RPM database, fix - virt-inspector test. - -libguestfs 1.45.3 now reads the RPM database using librpm, which means -our old phony database created by db_dump can no longer work. Instead -provide a real (but very minimal) sqlite database. - -This commit also fixes the virt-inspector test since the RPM database -contents are now different. - -(cherry picked from commit 42e5e7cfdbca01b2e9bd50c63a9fc65b6da9192f) ---- - .gitignore | 3 +- - m4/guestfs-progs.m4 | 3 ++ - test-data/phony-guests/Makefile.am | 30 ++++++------------ - test-data/phony-guests/fedora-db.sql.xz | Bin 0 -> 231272 bytes - test-data/phony-guests/fedora-name.db.txt | 13 -------- - test-data/phony-guests/fedora-packages.db.txt | 13 -------- - test-data/phony-guests/make-fedora-img.pl | 9 ++++-- - 7 files changed, 20 insertions(+), 51 deletions(-) - create mode 100644 test-data/phony-guests/fedora-db.sql.xz - delete mode 100644 test-data/phony-guests/fedora-name.db.txt - delete mode 100644 test-data/phony-guests/fedora-packages.db.txt - -diff --git a/.gitignore b/.gitignore -index c8b53cac9..27279396f 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -580,8 +580,7 @@ Makefile.in - /test-data/phony-guests/fedora-luks.img - /test-data/phony-guests/fedora-md1.img - /test-data/phony-guests/fedora-md2.img --/test-data/phony-guests/fedora-name.db --/test-data/phony-guests/fedora-packages.db -+/test-data/phony-guests/fedora.db - /test-data/phony-guests/guests.xml - /test-data/phony-guests/guests-all-good.xml - /test-data/phony-guests/stamp-fedora-md.img -diff --git a/m4/guestfs-progs.m4 b/m4/guestfs-progs.m4 -index f90bda04e..4819df627 100644 ---- a/m4/guestfs-progs.m4 -+++ b/m4/guestfs-progs.m4 -@@ -63,6 +63,9 @@ AC_CHECK_PROG([PO4A_GETTEXTIZE],[po4a-gettextize],[po4a-gettextize],[no]) - AC_CHECK_PROG([PO4A_TRANSLATE],[po4a-translate],[po4a-translate],[no]) - AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A_GETTEXTIZE" != "xno" && test "x$PO4A_TRANSLATE" != "xno"]) - -+dnl Check for sqlite3 (optional). -+AC_CHECK_PROG([SQLITE3],[sqlite3],[sqlite3],[no]) -+ - dnl Check for netpbm programs (optional). - AC_PATH_PROGS([PBMTEXT],[pbmtext],[no]) - AC_PATH_PROGS([PNMTOPNG],[pnmtopng],[no]) -diff --git a/test-data/phony-guests/Makefile.am b/test-data/phony-guests/Makefile.am -index 0d74ab110..60313548a 100644 ---- a/test-data/phony-guests/Makefile.am -+++ b/test-data/phony-guests/Makefile.am -@@ -23,10 +23,8 @@ EXTRA_DIST = \ - debian-syslog \ - make-fedora-img.pl \ - fedora-journal.tar.xz \ -- fedora-name.db.txt \ -- fedora-name.db \ -- fedora-packages.db.txt \ -- fedora-packages.db \ -+ fedora-db.sql.xz \ -+ fedora.db \ - make-ubuntu-img.sh \ - make-archlinux-img.sh \ - archlinux-package \ -@@ -78,8 +76,7 @@ blank-%.img: - # Make a (dummy) Fedora image. - fedora.img: make-fedora-img.pl \ - fedora-journal.tar.xz \ -- fedora-name.db \ -- fedora-packages.db -+ fedora.db - SRCDIR=$(srcdir) LAYOUT=partitions $(top_builddir)/run --test ./$< - - # Make a (dummy) Fedora image using md devices -@@ -87,8 +84,7 @@ fedora-md1.img fedora-md2.img: stamp-fedora-md.img - - stamp-fedora-md.img: make-fedora-img.pl \ - fedora-journal.tar.xz \ -- fedora-name.db \ -- fedora-packages.db -+ fedora.db - rm -f $@ - SRCDIR=$(srcdir) LAYOUT=partitions-md $(top_builddir)/run --test ./$< - touch $@ -@@ -97,15 +93,13 @@ stamp-fedora-md.img: make-fedora-img.pl \ - # for root and home. - fedora-btrfs.img: make-fedora-img.pl \ - fedora-journal.tar.xz \ -- fedora-name.db \ -- fedora-packages.db -+ fedora.db - SRCDIR=$(srcdir) LAYOUT=btrfs $(top_builddir)/run --test ./$< - - # Make a (dummy) Fedora image with LVM encrypted with LUKS. - fedora-luks.img: make-fedora-img.pl \ - fedora-journal.tar.xz \ -- fedora-name.db \ -- fedora-packages.db -+ fedora.db - SRCDIR=$(srcdir) LAYOUT=lvm-luks $(top_builddir)/run --test ./$< - - # Make a (dummy) Debian image. -@@ -138,14 +132,9 @@ guests-all-good.xml: make-guests-all-good.pl $(disk_images) - # Since users might not have the tools needed to create this, we also - # distribute these files and they are only cleaned by 'make distclean' - # not regular 'make clean'. --fedora-name.db: fedora-name.db.txt -+fedora.db: fedora-db.sql.xz - rm -f $@ $@-t -- $(DB_LOAD) $@-t < $< -- mv $@-t $@ -- --fedora-packages.db: fedora-packages.db.txt -- rm -f $@ $@-t -- $(DB_LOAD) $@-t < $< -+ xzcat $< | $(SQLITE3) $@-t - mv $@-t $@ - - windows-software: windows-software.reg -@@ -161,8 +150,7 @@ windows-system: windows-system.reg - mv $@-t $@ - - DISTCLEANFILES += \ -- fedora-name.db \ -- fedora-packages.db \ -+ fedora.db \ - windows-software \ - windows-system - -diff --git a/test-data/phony-guests/fedora-db.sql.xz b/test-data/phony-guests/fedora-db.sql.xz -new file mode 100644 -index 0000000000000000000000000000000000000000..be3a4f3ef8c829e35d455d5c4f61be61f4a09f94 -GIT binary patch -literal 231272 -zcmV(pK=8l)H+ooF000E$*0e?f03iV!0000G&sfap{xa|WT>uu~eAsC)98QuB00R)4 -zwXu}%-J?Fz1LCsojVu0HySRr|UR~ZdOYPPRlDK|+?x7p)ThjIji8?#vvN*Y5BMW)*CxV2nuVp1+fqfd)i|J#L2-23aSO&-{pq?a-X -zN#SY-YvhmSotN)g3EmDFcLnMwEQo~{$@>H7GAvzjr6b+-AS$4R8@PPPBY@ImUG)tF#~W`@3jPH-3UdGK6dgj&fz2Kk9BJ5ex#p^FAzpQ5qf -z(ZM^I;FcF=bA2e6PL^(0^leTr)h|c&bEJi?OJSYljSo8?4uI4rb6@O3(83{?t60P@ -z3dBh)5?a_k#RBA_Ui{C$o%y4qOMtz@Vg5O2Y?YzY^K9^61WhU)y)@X%!UNI;nd{`23PWM_B!%nJW3($UF378;k_Wph!lo%<*N7$ -zif2)S7D-;k`n`QN)`%BZ`1gNJSWHUPT9l6L)V!GZycL_FT5d@2RYc*Th~MT#1Lm4Y -z#r8hiyM!pQfwiH!3eEEM^c`^%9y_BoH0`Veo%j%e7y!blfKt(`-y9c<6X|18BhZ;9 -zi&N9VevHnPbKtZ&UL1jGYa{u`SV)DDkUKvGHsb#tNZh5Zmn3wOr1@L1=>>>&N0z%f -z=5Bob0@>$hZO6#RHbTp0JDQZjp=dL8FL752ME^8%UAd$x0x(WmaB`}*_i39%$q~YZ -z-U_OsgIx}Uj9?GlA{+`MinQ_pB-1E_=DO{$f{?u45z8jQ^cS9FOB1XWJ-$f29ub^@ -zA+XXRfTsw`IC -zaUi|rmO3s%qBTxvV<|F=p?S{&Qp#>M4mL)3Zz53EEXDa9H`%;lv!&MrW?B&3OP}b+d5LS1jAP>B*3ep97*Et1!!pHiFJr7q8c=@(*GkD>>p4ySSJh)05>P)^)2LCPtXZP19(7 -zSP=+Yi<+eYICR}GLGV%=$ -zrm1$LbZ7R&hmi7TMUHSn7cHbz$IMLZP5u`14=*#IAAM)uq<*-o5F&OgGz0iWev%w@im(~5FfAn~kJt1N1< -z_k9tmBtys00DQFcmk}f@5k+oitkDiNL=DBeFr(5)nvB=4_n`f8oQAbtcX?T_`S4YY -z!L-!nNt#gJVJ$Xj9Bbr7QFpzFV)MDaBtJt$l(Og}47JL$=@!vz -zDDXWAuAHQxq<%c}cjSlsW>ZfrUWZ0JqF)DjX}}2J-|V*+eQ#(c6nq!>O3*rTkfuNF -zBJWStPD|M`&FoU|@zIj;!Oj52u;clZ!qUR4AEzm`C&ZJPTQ11X4tT+&Ui@VoA%#o< -zl04j$U(;EJ#^>P<7qxN -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 -zjR5KFMm(Z(&Y@u;y$A(%+wiH7xv*@ -z1xhWSkJcHzgB{QOQnFR^(4Mci9{Qk5s+G#%gn1|N5%Zy)J4a1xX+aK#u3-7;NeLSH -z*iC1woXa?ee|s+*7tdzAj#x|**vI5CUVkzQC)sK!P7yMsXo=c;>yx+#&>WD+-&-pj -z@LC6qcJp9@H5Qj42__B*GP>cbWFx#j!-d`msYJ|>-Fh_MtqWykX_2@;reSE|7|kA_ -z*dZ+k42xI{K+$%Mo#HDJXi!>_o#xjY5~PHg_rVavc-~;*>l@*c%Z=KpNn{($658 -zZt1@>guyh%nCM;?r(k1`+!P -zdB+eOykMn_30oT!$Alp!s#ZBLx>HiK^i=%@U}^M -z{Q#HCPc`xO`%Z^x1R_4!^iG=MZ){=mGtMJY -zVkIXtmt!460d(EY;DlGhwFdwFbK>ZZFU(mWG5z47(2Krpr-=ekt~~h|Gam-`BqLqAr-q{m8_CB+Hi -z3qK!bda}SU!ofR}!)NlI7qj)!0>T!WNeRrDu0#WFM%S9pv?=Wl@|ErR{VWR|J65a(l7aH{$+sQBIEhLuBQ-J{zjj+M&=9|2U`-gm{*Dmi@%Bvf0ONE|X -z7u6!zsF_n}M55(0PR~|}x*%2=m{@xORQes!A3euc9_mN3;38!ROk=qFxkJM$1biEw -ze|1m9`9m>0Ann?EXA@IbNQvYHaiO9;YbvF}^Mk8$h{-4BE}gCRg;B18f2CW0c>5Yw -z8#)w;mfy_UlL@wRX4QS94P6_+OJ3)c%&n_WOctHF#*-#}o5w02eMlakx+DW5>?59` -z0$yHkItYeCj@$3zi#TgaMFzD0@xhYCq^(iRJchQsO&-8UT+}jy*2*PN`C;fWB^**! -z?S&rI*?0aaxVK#C6fHR=yfCHXGsmY(Jyq3T9U%g(`-Fw4|DlQ`B -z7q{^Du(T#8=hFocry<>Y$ADvd30=Fr@U^x5tGYCSxzDY!x`H(%1q!*v%11Ov{>L6$ -zG}TOl&rAzNRv*pgVRNdAan$}#*RDo%P(?yQGfnSyWgaa;Rr9~&D3H{ho?^ccbasGw -z&1^Z0hK~3u%WV3<{2g8z@TGt8&GU$~09w=OTN^`joc5Ep5Et@CreVMY3rT=1}ho=le=exP6)s -zZS74aM}Qc>V%AfiWpgdlyp+(Pk92L8cpT3$j%!fw$OoN^(_E1It?!?7IRCtzRfZWm3^>AHUCRC%&Q# -ze&E~nwqdg(wr~huF?8IrE``68&x#oThG)OBewtQnu*P-13oh@hmStEF+PN?~-B%LG -z>O6{}gQgIJ89qdo>_>Xz4&uM@F$`v$7{!~aFyUk0sTs1UIH&v)qJVjkfy1A*l>`<>yTY5<%))t!OHthj~rO5j+niL7w?ftp-`QNh^rB -zDy?b(8nqCFRaQ5J?C>%8UImmSEkZRI{EQG)p{eChI~-px-XK4qLN0sb@!X6YG&A=) -zu=*Su8-tP>M4%xzk37z}c9_>~Ht3g&IQOid*K*}u+SpZoMh==I!VDj>^6haFP(Khw -z3J^v8?4|F2AvJaF3nW=nO$Zb;4wdIe+us|PQLhw2rtX67Gwb#ZIASEV%^uT3IsQMN0K)uZ|b6W -zC!$>ooF2+Y?K1fO6PlH({YDX;@qw`iv=K>Y8wVBmco0rWneewlyC(U9=-7N`4Hy0L -znxn@mi$$QzdsL@AP*bWcL32%~>(J2>t0B=+Yy^E5{FmvriO!b@!46jNGj5qQX%GIVr*MqYu#2Cm$?OwI2d0zs5i -zsiyxtMq#OslQ>Q`ZJXD>E<}nX`L}6!MBC&L`eAsp%@ib1Zgs4GO8`H(x>zM7Sp}~4 -zI&@cUwzHKQ9TxaKFq?Dst3RC#4+gx%HvhKoe7~k`F8g=PPtvzKOzJeClcba+EbXnF -zwd4U)Xc^ZDAP1+F^lKy<1-zY83bZqV?}_$C>KPyM-L!S5cllN0xWmkGP;csHc}wlv -zi-sF{8Ss)49SkO3G^xbl<`{|2OM5-_N?(j1ncjLzFm!T&6ob^A)WTO1f0J?yn*ggaUzNr3IgPE*hQDa`!@Joc&2zpRkT8_+t?F3+bq>!y=+MNX+@aDdrt48GCFRtxUQ(C(Au~GS$}HL+wF}+CuPUhpD=!PV4fQ{ -ziE6iqJR-P|+O_VlP|*M0uAAnr@nWs1v9ER#ojr;iS7PXl2cYWfV;|(=V)aTG9CL-w -zPl0BRAz$lXXW#!^n;}Sd!y6~Fa^y5|Mmat_pmKw6wI<}Rt6 -z!nNHxb~`-Pqnx`EE$L)o@)K&seU>;po;0zH?j8m07wkayh+G@Oybi>D@=zjkebmXYlQ#EURa}POMn}f`%JvHkIHj(;LPEl)U>V8PFnuw=8O4XRk -z9FL_pZI-K4J-R0*{>8>0^l<+)Gt=d@keUy@->QsV!V6UBJ|t*bvuc)`E?P;Sz%;QO -z$%C#WEVOl+8n-IUw7JF&f!tyPjIl5Ggv2T#-!M4wJrFqCy@%h#!gn;fV2wqj{3~Q# -z6pXF^j6TCyuTO%_3Pf9nQepbv)DI*?*iOsa@FblRZfO!x0K$ii6-2)mJCecauyf<} -z%h`;^;OcUbkS5w=cfuVYN#07lzvQA5e=2cdzm0!-|K7 -zPo7b6x(mOp@(P*u>f%kGM~!2GGX#V8evUs=&XHY;=?n>qnt(-BX6K;_2lK2xJ6*1u -z?cA7nx7mc~lDIX3#ByKU2xYNS)NO0lDZ*$l}HF6FY>r^GT1E4M*U*Egu)Tvff(yCQ{X~%X1`1S#%g#Y -zS-zs?f8%5JVzlx90#e&pR<%TlZJkcHRelrZFgI))(@<*;RX+pOC^Y#><@??U!*O~G -z$M{#R&V`(6pRV>HX6jGV6VK5V{m0G1x>6xH+73M#@ul*shD3jWh1AB1U*ULk!!_*< -z`@7ajT^^aq!I;stgQCx&n=s$GwPIy}!u(GeId)=DB1>=&t!YrVh-x5bgjp&!-egZY -z{+%|8O05+YN}x9R?I%UQ&|55_Z|W))Qk?kx$Uod9WAl!E|CCc9XPN_NRQX}Qq7bxt -zNUT?D7PQi?_MP2z@o!sC0ooGZoh)@*S5Kuqx@Ql-sFYzXEe)5|O%zYM`#TSOJ -za$lrwBqWYm8?#=(O_?U-Kpq|$*dj={%*W9d49p}Ekmo%q!V`kRIHIjYCKEb~71ZS4 -zQ0S+X4vi(`WkkX`ZY7B5vqy+xPAL -zW~It8M`#AW&9J^~Iss3GkKthvg?Ta=)Xq*?>uj&pSqB1?>Z)3& -z<^&GxE=kQSO!`;gj1O^RVi|)~Rkr-9i`6}6aRWIR6O4`)!I}C;_^L+T<7tWbCw)v( -zaLuRk3#d-#DGY1LU?~ABpHWA}-Q@cI$!tj2+pyX-IjkN4ha}w*acAZjz^D4hJl4w6 -zyb&b+C<(*9`I1^-H(Usxj(Pj6TLJr3leaqat}_n-Oc}G7leGL?tl@}9!2%mjUTcwL -zAEhRnR=U>I#y~6B6|-ndP=B?5Bns|+Zdr8jXs6bOa^L9%`m6u3rDruo=5jCl4aW2) -zxR2C~=r{t!cY8MIHQ!-5(^67nKz*JzihxVKiMR>Xt~S0(9WK$eXn6(n3+jswH*UE{ -zuj0j*Z)-_G;sDcxDG#BwiTVcoPsZM$&nm$x?5q?q -zc8UjB?-Y?yHmjtrm-QqR3WOB5EkuKBFUozO+0Exdbr{7hM@{#i0s+@}s}FM}GgtYU -z9iVQ-`qD9dY^h3Vhvok&a;qn)o`NWn4qeh0-t7lx1s3*GHL1InWRo%myg$DEV(bsY -z$Oz#)hGxE;EQr5|(q -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 -zUXBH?;KChM&Fe@5J;qo)4^8}2Ag=5Fp` -zLc;x<*bSXA*y6NRpt-JkD)w+9aY**rbH#~^G*{g&27_SzrRv(PZEt~ -zCH^5M+CSK7diNukr}a-_<@mR~)JolSoCwRYch2IG$xol4w-cc`g+C!M;qT2^hwIL4 -zO+K)^B0!%{WAfjo-t7PeWqTrb{d#ax`(xhQr>hLhHrLV|hi24D6OYpj{fmP?2N?+d}&9AS~i@1H@@kAf# -z1bCFhv^~2t<@&Z7WSt-s5wyt&iPFW!MA^J4*G*a_v1<2GM4woU-YoFM_Lr?Tojw -zA@lCfc0_9ns+DBzgbZm5@fPXkeq!2Y6sTT`OOI(^Z{SIjKEy@gO=k`;^{Yr+aBNy; -zpvk?dzMa(E%V#~@;}i~GdUJ@C{~nEtH@Cx`gi)$6UK1pc``o)dTpEsb!0qA0@UYOD -zB%uaxF@K;ab=dxu7yeTj+jQ>1-raAnswP%9kZWG5+3k4+6K2>uqO?z4JC|*^SJi~v -z3L{c0U`8y2%R)nS?$%_H7O?moCOn^%d&%ywE!xfvJ`uv)C*4gK2kzTgBU7q*FQ>Lz -z{JX*qHSq*UA1_&SsAft_kQP?-@E~$jJ$U=)z8{fGmh5~%wxO@tYtH#mrhuibI -z*EA*0*KZ%-?G9!H_5a`iuBMYhz}<6F13-a2JLI5?mcK`M}T$dvQFV`!6weFb6)HZ$gef -zhFo5>vjy@m5M@uM;5ur$8(a6aO2nkqH+{kUQ;j*9$E{v>;{?v@@b4glp|45QNf%1J -z|B!5$WWFV}ii9L*(LxmV!r*j -zdJ>A`%#G&2^}U<-#-{Y+x#&FwH3+H={d9$S_(m5L_KvY;E^_Ngk`)*6z@YYs5(Hmo -zj&KWgloX46!9FS~8IA1&EQIb^Se-n2+1GDg?B;ppgFY}$oXVHVcypcE>NZ7_ANhJ) -z=DTZBt5#J2yBwajW!Aw|_y?tkxC3Ggo7{~q>}JYK4%63fOILF|hs)N5C*1mK}zKb#{cqX?4l_eyg+#$|Y|VsjKPqzj)J -zCk~lcj$RhFt34dfd=o~y^j1^`a62BD^wEI0rt11m%bD-+`^u)C5;0V_#&4uhL6Oyp -z5tQ!o7cP4^4R~sVVjGc_>GB;YO{W#k -zaY>`fq#tm7D@!;(Nxlq6)v5EA_I2Zf{)k9jqI`*hvFF4f4+% -zfI%Qe(hh>PjLA#&1G7L5GOeU&dwMf2WFS&*qTc@zo9&6xF2&b6OjM -zEAsyRJn^CAN{h_2W(f8bUGW+4b0h-$9!^OqNNNhlqbClAYL -zYOos3AXUnXFSL$9$P~nOqE+jNQP}6jj^H{AC#sC;x~RtuU1=0w8u9uu!4Z^ka4(#s -zR-)i^Oy=-U4j03XV=vlUp4}xeq~6LeVngvsOmY{hocplA_1J0zd{84wYi`T!l*<(3 -zR8JIb%fn$5=k_5>#rrplHR;{RU7)~OU?P^fDzsmNK7LhG_x5jH^-{1~NFQy1TsmE` -z<=~!I%y3}t=6yYwDLN~SSrXZquz}=9L1S@Px;|6{lw}D+7!0jKL{zgPbUxe%3*#^1 -z?34PYJ@W;zDN{ejMZB5fy)VX@HQ!!!F8DSANS!;KZgQ&pZpK5>i -z#^ez!koa0uCK0Ww33x*!j`bGWCswnE!&o^{BM{+%f;AZpY1Zgahz%K0q^&rZ$4BwJ -z;3!|_zlZwYYRmYZIbZ4;r04kG_81dKFI{1{95ORi!&t%!09)5 -z^=l+I%5rW_v2S1>iD6MXRVMC@vRPocPTYn;5r12muWPA2`yiiht;cusZHrs#*~NyY -z85G-WT{eY{oHSQI$74nE>0diwIX&GLg43L6dnOJ?(gyH~BwqPJHo;|dTJ8K%>Ssj+ -znz69B8#UoX{-w69dUx!$?A6*u?vno;&ntj45PFKg^ijACVwp(h3v7Kz2s}sK_j)@! -z{r#oB-=Hks)JoY;&0-zp2LjKgk~TF5(9B&Q;KKvn8vX`rM`;|j=E|c2ppn`=qr2);3x-Z5Ud8UF`OvMtqMNCmPIxLS;mt& -zXG4H`u?Lxeen-HkHGgU!V>fnj8o9WvPGpl-Ig+CBTG)!xw*`ED>s2y>T^Yt -z_O%=Ir&Mv)rTGJa-Uw80Z=e@j4=b!?9YCt`=?<)e!|J@#Y@>4PXqineRUj2CC0TrX -z3ZR5V3(>Q0)ZvxN%W7BzsPFv$@orDYgxf`!Vs)+Q65uwJu2U{+;t@2)e(cGcodp65 -z3eb$?%xb7#Xbb}jT6H(lh!G#airiBn@m^hCWu(i-Gm*GWDL7~`=^XA|x+_o8pTq=r -z@FXWGA2ob?_nOT(V059|XY$@IDrKv6Jx@OS&Od&!0H?Hiwz909e|E4lJjrUF`ZML- -zUqmD3JooP#e{M{T!5%d+-UmEa{S3o+t|{?0sR*-S68)apM5;2K=A5rjAw_bZX%WQR -zD!jz9wseoH+Yq&wX8FX>bZ^WEN9}s0nFrnA{{gK^_RJ>gO@t>cQ0OLp -z_J)Upr2grVA~=+B8$?c*lt^Ycbz@!U7KCqp^QxX6>Eaty40U_3_TSV -ziztViJS{f*>`n~2Ho;4ZQ`LP~m;G|qhWDm}lddFukHo@n@?UlFHhp9fT+j=aB16k= -z_K{@;(?>B>OErq}zjM6`L`3fcX7>zn9plN{tEVt21r8dc3+Z>xm3@qW8A!aSF%}Y) -zPiIiZ7*e)N_Tg`%I-GM`I@(T5;m;(VBPvmpDxVG(M?+I^c3LDi%qfB2;PSsJ1BNgvPyY1 -ziNIzJ16_jC>KPQH%OgD6w;j&n9d2$R?iB^ndJ!ShF%dY}{UXoM>1j4n$-{p~5bsq) -zUhKlmb=rv2(oV*qYO>mXdvIP_C2nb7C-Xpum -zMj~xTl1HvuAT4c3I%EmWetQCG?!-VydJQ0M$?H=d-a-3<}2BV9P&xG-qVsI}m3UO!rGN8!{1IuK(E -z8d~vmMnlQL(7mIjP6+tQgzb+zBu=L%*eX2G#xYhDE^#7oI6oj5VW%?6G+%=Bmc^1! -zFGWrx@Khp%g5w)&T9knVtRJ-$+j&9T>hYvnmhhEWQnD;sIUtE-Er3ZCh=rL=qbPxY -zX#vAVyjnZ=R~JkET+=Fr!}5dO2&eSKuWOZnw$b$+&RVJ_zZDD|4mU7zZ%2YQ?q{RD -zL^W!T5;dq#3pg)=OKVS1)%;{GxYd$T#{F~INgLi5zNa)=8|?D@EqOSThMCGjIlQOW -zleCC%+K@D}AiHPj$f8gMGQCQ} -z-;h;F=-GuD*%OiSv@;pAV*b&Ex)asKzFXI -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 -zYvi!7*Z{QDlOtdq>RM|1q|q&+_mT%xIWed@`t -zav@Ab>TKrQcpXN`x*YgFYC%}bJc(qfJm -zWC&?05AY-yVl9Q7@OfwX+CDBVKH=Aq2y!n8UXAUg98_2eoTqC6bg(Vst7hB -zlpBoK+2?+gzW%(Lg_^URerwPh39c8Y^P3TW6DOQd0k1}&o8Uh0K3#Vyq%0M=T&qvQ -zuG=qx(0LixIQ6EV0;x3}thN0IJ>AWFPqu>5G_*1?CbMHu<Q(qY9;ZRaaB=H6 -z(Zbgu)_o5p9~?9ao`j)|`jX6)5qq`+-AASZt7(;%*m{`&_)S6p`!v-nZ!rHI6QEbd -zUN89@gyQv)p -z-^=5QRS-h3Wdgec$#{w -z8fmovv^&N{hSd51ij?-C!R4JIm(=N*=${w`%KMl`+Xtkj>xfZXJ2iN}eXm;?@Bk{rhnklG0gp -zlfcbc-nEMtoOjW;Rz;z^?gYy^Xs9K1H(5Fjt!vfV{th!`TTYj6N`F__=}p8aK!WHeh92VkpdyIK=+YD|FGF%J+qA$r -zNdyb?66VcGL0YYDm3C4%E)NK%HTo!Lqs0A{A -z)KR~r?mC43<;YzqctVd=j8G>xV}0^tWQE%IQKi~$!H!0A)Hn`>Uh1dL1DRVN8eMj+ -zN4_-~lQXlRxYNu;-HmDEF^;b1y~#ZLJnlDVlXF#MBsv_v_Z6c8DY;Aq%m<4siJ5lF -z?2z&;HXBGILl8*i8VuYmR@;kd4B0*BYu9g?AROHf`?}*ikINzYmL)t&daVYidWxhu -zZnk)lLqFKqu61I*?(Gvp5@whA -z^@`%@zF5(>NE%n6Pi_E*-#06R!rHHOvkgX9yG|wQShI15|Jx|2gtR5)=vt&Z%p6-gCwI%Mv=u(t79oa2!4wHXlM=@dEU)J5&Gm)Hjfjt4KQD1PO2I#hlGSa?b-DClwaRQ_}R -zUmAF&bMn-jXZ@nA!|lOJ4$s$*HO@xpSjxL2b0no_#sC$dB$IN`k0MO(3!&Wvs7Al> -zE1jR97X!0j)|q?h$02LJjEiOX_|lig0A@&}^+$y@bS)EaP9s0U#wgY3mN~F}qVcQ_ -zTWNcaDvUFc^u<@6OV`oRGDu=2*`GMp&C41c{xDl>FC~Vu#nRFe$t|%(w2~v&ojUZZ -zxYI7^OoWh(Vd1~)1nD`8HCZhVEXt36$xG&?Dxi$()YioOhuh}iv^!Y~&0;;f0X6ip1Q;|1w#7C;=ajO9yM%5FN0UpXm2OjG4-CiFJYO#ue187!=&T7Z3g -zg+)-3D-k)}FJtolh)P_{=D=K|34$3x)!<)Q1u$62N7l>+14@BPfr#6wGA`ntFe&^-8-YQLn~P%7o1R+IHKVXQg3KrTl}R&Ge+s7-ms -zWxC6OU~03zWBvR$`eIvV9)^9+-l_)q4rH9(4*qlcVI0MO3L~h-oj7vMo}8HMew@o(slkGxE4b -z=c<%avOnJXI!jLv1}g2u1cTC3%sApAvTfqH)PCKotM+XQ1UBPgH8dS{W!dYavZiqJ?WyjeTc%dBWjtW6r$ -z=8!np^N-4JouVghSfiMgf1n)Lf4(tc#4IyPp -zP5FBfRbznl7hPA^Q=RApKww*>4;sHUPZUpMO$)7k&a{f$i~n(WYr>dHJao -zZ2Kx=Rg9DyWiCIFVrD~F#Ktsu(w8hE4>5l437oc;RtOgCgEw%Qu+JtMC&>Yq@_>3L -z+coWQUbc=A*{i{Gysv@Cn}=`G{0Hi0y?1x!y*vFfnGAhaiKz9YTB*+GS$g-Dwo!Z? -z(P@-PHasus>Nb`U0A;XBqgbxkQLgcN!$Tgm*+T<*3Fntb3VI&fiskD@q_bW#_w$3Q -zMLkpiwMfm6M(`gork_avR!za`s@KNbW$KctQdFV7!_s;rnBf!d#I*`D -zb!)gKj9Dtq-%-LW1_nZrWaO4PMXEr>UKgMidtVaJ1Y1~5eCM@R^v{{$2jSO -zK3RNzv%;xSeDHj@z`DKz>SY1~74(a-z@DFf1+WN`iPo;rQ-8oixK4x+;Lv=*LBeKR7(Igo%PF=N9`&I9C%mV(N5qc^MQTEMc4f!osZJU#RnhJQqYMx -zSc+W?Xlvm1>Ov6nWNvosjpKlkriesgp(DN?abi{hyy3+?o3YSRa$0(&27vYJV-j3VP;X{GYf|Ac}^WWc2vLS;k*#1?>0 -z>(xS>{0p~;N%BgHU+psQ -z`mtd>5iHXBI)dkKD;-p``7&!%0}vl{?vK!4rU{R_0(z1^Ky)WX&bR-xZUVebgPN>4 -zrTGAbGXMji`vJ9;9d}9N6xm3fZl5a-jAd;)A15KfLMcmOuuJ9X^2dAlO~?ttYhhql -zL&)LRtBgG2i(5$S{F({JCWgYxOB-@aC*{sKQu!4=I`LNI;+a|$HS+yHstF5E@Kd?q -zfrLg*E(I%B(58N2qkXpkfJv;6wHY)+UL{|CVS2(Nyn#B8z7iGAn> -zlpCoto+(@e{X2P5cDUBv%{`59-}}SzkxP2s#fDyG>FX?780FAeJd@u4e3R=UO<3KD -zY0(PyUfTbL)Nk@xmGkuA6x8mwc;+AOWe6geYhZH;W8;|Ou%a9F+fL*0N=0D(f>o5^ -zoo+<+Cy`rSu-B*Pd7{evN7f(<<$O{}h(viE^HSez0_QyX-|$;i#?u%ec@^?Q_E)yn -zti2u)J-d>G>HUu&qG@#l0 -z{G~ep{kqUQl{Z?Ac?U*hyFfQ4H``Ne0`f3wi<=qq1Pq0BQUa|8f%|vWfK}Yh0SRrO -zCOBYO3=QqG9nKn*puD4A*G=q{-BxpTWGgChTA#)>eUnNZvF8=HrxOezSLv5JIQeJC=n!0eq+#jUKl0P -zOfriLnp@^qsC398f(ZF0`Q+m3Za|aWX$KLXYegN~x>hi*yy^c?nWB4zquOXjo?rAUWDKI}DTsGA1$UVK=GlkqB0*2v&D -z`~c!Zz6Rt0_${z9Un4y^tm(vnwN~rulrzlro{08j=}7?yQ5^xpme9^bfagbriPbRS -zyc!l80D1k#4?6B4ob`!~nsRG%C56BLaW`Gr-Mn&KqJp{sI~?p|GLlVGH6xp}Y%r8E -zi*{VT4PN#9UyN}(V%DV3SHE8X?r+w1NI6Xtfr#qfrZH#UnpWs?tjhA4hTykZ#X5>! -zMNjG&NPvx9$UG=0)p+m_3ufGy98S;KcXi*C$ky+?ndhtvNDYJsKueLh<%0i5twku* -z&2NcCvm6N$XcDX?1&3o>a@!_wlxULpuT@kCn=>a#h&bbT#7MGg)o%l)(pks -zZqpM<9XRcc7hD}?2E)RGraImUMW4SpwP66UlNKrisg8z3Ewh -zgU5Ze9SP`x<`AUVmd%_R?IpcMf-)9yNC6EUsbF)AM& -znJoN1Gcux|&Up6a2pLKxp;f8@(q)&iG8?2}!e-uwnCX~!H7(wgVn@o)9tz!M>&j7Cawni1 -zfZAUX{#pH-Aj$2EI@h2|3p_L;S$micHT{4@>Vlsh;NWB4oYSPTIW`|kPMfG31(OGR -zo{zt}W(;~@M^2iYw8%4HFZJ_T7o1~(ih5e$>qHlg7>E*Ts}3n@4i{?WWud7pNf_PL -za;tzcv+RUC1Aji7FrE!Zd(o2Z1LY231-p -zK{vhSZ@ivGrT-I6zxew2$bpUMBD6E2Q;F_tHIvO^9Ws@&DY~MCL4)ZYIKgw3_50PI -z=&Ub7D5IT(*1kl2NWQ9QM;aYGuS)2XW;(S_Wg;r$$%EqMQ16aHj9zGrp}k#ovugtX -z^}n+9G#z4##^4&5p`hp&0qi_dE=ow_?t`h~!MSpgatCuu>61~g>An8X$=38tx_)0* -z)4PIL94j$Cb%er~5dhplQ-kDC5JB)L)>gzo-#gvT~ko3NO1&zw>7%fFUzt*F3nhh!smSceyqG9qFI|Af{L=XS{HZH1Z$_ru)V1(S3ykRJc&l3r{GjxgifM1 -zAdZ9@wwmEeT}L;N{T&!1kQ-%}rKfXuI9tEtUO`lD`c+8)1f;gVjmFEh^VVGs*n2!d -z+`?n-#rxH(Ss1q}Vw6vQnFx$-UGv#9h(ni!T(D>k;wPI?WsueW4I!z|w^R3cx4JcM -zN;ZBAb9qY>`yy}KVc)|%$Y%AcRFR5Y+txv391LXx8SVt=DRsld4-^}k#IOFXF2TMA -zlkNLRMJX#Ub(C*HGxPU4*yikjI!j;JIKqhS1oAktQUO3&;)224Du5?9Cii6_?Xkmd -zvX3QMv3949D#?Gw^KfCzwsr^ja*Q##ZJmb{ -z@{5+YWr<(ZaeB^?eMPVWM35k_=;qQ~D_(7hDFlBkF6}1oiQyh6^e=~4q!&ijLtw@f>dSxx`O(C1II2}5l`-_ -zt-J%RjyU2~e8ajrmt%5ZzmwY8FMOObt!ePK(@L%uP-}J%XmH5PGn{4`mp0)7;0Xrk -zKglphKAF9M0i}E-WOZ4!^)FFA4ULf~?vJ!dd1`>YaTIGz9Z2_KXnDW2xYwYV3-|b0 -z)pGxw!2w?;98fU~c98^8a7wb60ri9g?)FtbFAfosg1$J%n#h6ZoF4Ql?Kvy5fL4{@ -zooX~zP1~soYD_VCA=(SbFw2NX+qW5)e$YQAbgx3X3BP~*Z<{unr-Xd;i~dX7CTcTh -zJ$PWw)Z#IZ3C{^Cx5pX3MfTPB!FAZ3@dX}$Q(FkvYKXB6eUu@_aw6D!l -zoBUf%XC+K^Em%NmS&2P{{V1a)H1B^;ux66ZwW%5)WC&`{t!RW{%g!6(PM$QKXrLBg -z_D^&eO<2+enS#gTWueyst8y;0d~hho)|67}8juKT6|xh0Jipn?2(!YHL>G5`SBdW! -z@6*Vi6rg*xW_r2rQL{5?1VZccPQXAj#RbGEM7}0S?Q|WqNy4;&%&?}F@jaILn-!p( -zeioM_h23Xclf^knzcXESYU-b{uEBepIUO5&1Fmj8;y)iS^K5qcfZ)Z^-a_zUf5jlO -z0{#xMdkr4<&tQR|7L)^z?@3`jKkOr_Ngh&w3(dm{2lYvU`Woo*>p6Db{HLCi -zbi;AN^ul4%YKo`UQxa5TxTj~pdvs-TLNvXSbRPuDEsJ}6k~})Vo*}Up3ytBY_&{Fr5)yg``P=5Wrfb$>EX6swNvEBuTx3Y1Ik0kZ-QG|3 -zE+Freg+`W^CT^1jA??w3b>x+UWHvpLUVXtpEQUXWi6DW}eG33xIG{pGk1#V`cDzBu -zW4^wQ0Y=kS!7pELNV)pAL+LrWJpuB8;lH<@%i@Q$=(VqN3t<4 -z4Uqp4C*Bp)KJJDwkNZXPJQRvzbIEDzX;&80M0H7R%+UQRKvi@vD*R^RG-Wq9zQMMr -z_kJG`5rx(5dd?1cL;4WZyy@$BTV0b8Y#1YCdT8{yNO4E_^$737V0%=i1;}Os#-971ra7q=nnaHII}dA53o>T -zn8N*IGlx~OG+GeH!W*9B&NJq~W@w~7!kn{M8?G%dYWKOE?TcY$;1lWsyIw6h_L7d( -zHU_n4wi%qt*I=oLrDDwLsq3W3Jjydkp4qfhB>&!L93&DCX3d}^>Ia%CQS-7HEiZ|^ -z@sazt_j5HmKN_>pne#ae!PPNGstq#u9W{~to5gdDL}qUC^N?lyB3%w}FA>zni;-8A -zkAtv!oYAd8x1L5eIDrMG!O{`Q2?2l;)jGnnf=2$i0d2~f$u&3twjZ=D2JZzB`ch7D -zeW%?|Rthk8)GKJZD6hA}C3dqUVL2LF^&avk)`RScH)mXYC7FL|>!7KDxaUgEZTz<4 -zj~P{^yE$Y`QgA?fyUpR_Oba!KJ^WSE;ZWY?DlsN -zQ`!1tWq{GTS|~8e50PVyAdgi9Y|4amTNYete@+pX$!$?$!L?8sYO``dFE(BKKg629f2g#qXI;+ZHe>X|y|PH5{)K3(6UZ9#K5nw&3Ua9a -zF6pBIxk0v!%5L^cZ7_cJ-1!&>`{-}Xu -zTCtjyE8nq%(70!Flz(~8J~*6Mr3g0U3qO(=5~zmk%rOc4QY^u#U@k>X-Qyr$TcJg@ -zDOQPjKTis;kOu_9#=H_9d&+$yqg2NLjnC=Jb;yJU55ghz2~GMR%B>Q9X0!7@8F9dD -zQg?_O2F+&%Y!}A>?h&;4Z=JyjTMeyLT12MomPdy0)6-a@!<;bO_{Nv3l% -zBTq6tmY~u=XTENQk(VKhU3`l)!*jOVv;zP5twy(9_3ZB@oNTK`yH(kqC%kabO6a!= -zpy6Dq>kJCJ+)6eeXXHNdJAf%}9DU2o=J7b5^o)^`ujot -zL0aswQjq)sjBR&FaeY8D`S_&UAb!+Ge!w|~AF9l+zI@wN_FUy%+bs{9V53*(%Y4S` -zdtRw$CAUla$jE?RICe7~8s4eqMbKgW;=ll<=wbdt0^qMTAq5y##s?I;7z?r?iGUtW -z2TbMV9h>gL6+t%5Yfl@)pn#Vru-1ID7tv;EpRW?u{M@?Omv_G>5FnO}FB=;P!?_?` -z0?ELcpp2lniiXIp;DjS%8;re(<*r3gd*reRUR?72Al|ztDjhka7=lf7SoYC&!U?TH -z@CuBACH8qF9mEUW9?2umy=B`Ew>*;+!MPJ9aA?wPr9`O?ljs*fd9+QpV6aHUG`T#ly`XX_OoCecT$XPPc?&a1ju!ooXFDnWkdGzqPLC1n|LL7{?dhdgT -z=kXkNha4YwXWpgkalGwJNn=&OxonPGkPh(>kec;Vt>GTBPhyAARTa@{qPtz*;G -zy@F=eoNP4_y3Q7qwP>)kE$i2xOPa}ezq_iEhPax1fC@!7CjnPE+~40f(8w0fh+*Z0 -zGgV;f;+^1m1e%tdw?>+I -zUQ)yINQWLCP`~Dgq1l-luFmDfB^FrC%wf=Xg3`H#JvNT;k~W0^O#K^_0)8;kp9#RS -z%tE`-ti8IqdWIZ~ulJ^tk#jR-RVaOYZdDLX<2z$m4oF>GlZGBPtEVZ+d%h7LWK9w$ -zrmY@IW6BB0!Vi}Rl9)V58u%sGz*cPmiEx)9sYxZU#KlOKEXGAMmPGO-i*J1uMW~$S -zU0P%$6?GmkKi9TvWIj``?=hXA(KdGNU)Pl28JS~N8?%Y>LN(R-^C($g!pl6C={+L2 -z(hO?`i`k68I0|~=-jAk|&^)r7Bk>2w7uD&j{YJo)VJ^3cZV}uDiWHLEl -zV`~ZPVQ;^0#J;EMd?|dvkJ&VnR(I3G_OJ|( -zbCDowkDp7DZ)K9{ck8~B^O6iiNZFB}=h(^dqs@alQR69MK%BmZjay2nP$QSMK8#?KfJuSP8)SfVrV!JsIS?F({5%ZU+U|!+NKafWi$Ip#8n!ESfV?_?Y2cejvH5 -z|NY66bj9DIU(^k!BfqjFyr{H5?vZcy>@cbD$eG|4ta$4zfi|U5 -zy1A18Cl`Wo=g>rh+uh6Q!dhUh`({{|>@?OF&+fp@C7qYlhOC@nx>u!-4dZ$W#a@?I -zkaZZ-2;)JAG$LjQ`Gz|vsl=%lcpdkStq!n^X7j-1SQ= -z*W-xAoMq<0me2a$Tyy;$7i%eOglFS%)_1a2r^bE!TU>`Ux@S5(PaW~*Ui-H-6KC}o -zrMI2pbD(h#CuWBC2RNN-v3^dpDF8zcgKjl;pBHzZEcacc+jw;M -z=eo?KrRmPAg_!Cot6t|vC_IOnCMZA`l}J%y=Elc|er}Dt@rpSz$yBbZmiu+gm@7K~ -zA8kJ39KVAO4TGuTDC6?|l#Rxgzcg?AsyYci3#Lf1qe7a$VThwBj*5-;+8N4@p(X7& -ze~1}aC0ZOk=Kegp6nZ*&tTz*v@ZS*pz+MEEt5V|Qf5r`u1Ao6!b^#)llwggp!*e9> -zQ8O((z*N;v(*7w$jzrl3u7y+(+NA^R&B0Rw*WO%@>VTU_7?3Sjd(a7sU`#%KE1p(< -z;-mOjYi%@IA~}We=ooWCVq=vKG|Q~gyp*I?cw>uu -za91<;c2PLxItkBO5T!V4Y^pm#){&&Ue(^0w;N$1pl6=vNemsz@A5IM(N|O8?2$M_@12hqcigsj^8Ne1G}BeRo7% -z0tq>BLr#=8)9UjEwVeYlBb=&82$|5?-QXD&H#c=%F`0O>f!`b8r??%#%)p;hLgI7< -zO1LdIx_Jig)1x4`be!Pe=iXZBrjiW+gInGInRitgo9;{~787>So)U_8-zr&Yfl-l6 -zei>s(JB!VDWu|iugfm3ss&PMz94udGT?>0Bv!K7!I1jm#3e%Fr7Uwv(t6pckFlNy> -zcQq*-|7nx2Q;cB$oKz(WnC@9&IZ*D;nCnQ)FAu+0V -zJvVX8c}NtU(IX<9{swr!>A&_N5)W1jvJZfi>5vJC1K=fGO|xO#4Q#q2&a^V{c&{_~ -z(u=jQrq}5H6%|g3w;{T1MX$S&XJu!1!66wg7~VITAP2K6$!3#Q)})WsA|NJ`q*Itj -zu}u%FOdxOMzKRK^h{CxrKMrF;L=E-yxK(yR5G=|KBxt-oZPZ(Gd;gGl#7d~Q|A -z&1tKnKMTw_zCgG%76$vCD1d-zmF4@L?p1g8-E<0V)KfT25D{y1^{Bf#3o(A#CFvB* -z93%b%E2p`h4=q+|mWz`so6@u`R(=(3eYhrx9JB@1YK*bB>lz~eOweL6;f^BmpP~_l -z!sB$UJKPcQII=fdEnur8vR=|Xfv5Z$PG>kPcGHD%DRRQ+zSKWdx$1d$KB8vHA1}t+ -zw-1W2UH2;7qjkjCOH{w8Uv+ybd}HRfvbLbJ=1IO#20Nc22__A-w*akprWV?!ez}=` -zdE1sIPENPoO6>8mdWLzN$dwJWe7Tk{_OOjKQ0u `t?^XxhVOtnv`^JYkZaT+737 -z4FvGs&*8<@-eJ<(ilW=QbD`XNiyR!{GWplWE7=837xy~t0*z17N?r-nTcC^RH{9~h -zcWo%cJ|2MQVS5{m9w~Qj69qg$bm2jaV;ZHLU`}ndp>^J!oB<2+(~9cVsGPQuKOO6U -z&=17`3L}B{@)Z^QGWaG7y5}lrhR~|OtEDtqChtpJv9hw#+i}=!q;8$TQ3W~9R?DB1 -zcfk>nIqwq~d!_G*4~tB9^t@5~zD9*T`Il9cB+7>4e;ziCl;sE?Sxqpmgig4NgqGv& -zqN1MWHP?G2QJ-gp8N0JcC1UILYUNLh`Ap-}Ls(-D1BZK+)`JgxP(y07wM7X?$oVpE_BgLcgG^z?` -z{x?FwR^^!B4{@BcoHWcf?FY>3y{%_e8WzoQq}q{>gM<~40a6HhHyisHHHrBI?=xZGjB>=~*d8{z3B<8<_^rh1nJ@3|d6 -zcis{~+ZZSGTuC0;6Ef+QS&>6hs9GVg4Su({jB5w2Knl56RH9}&JU#>tTuJMjg9 -z7JQZ`iWn^!e9upqsjms{(@Y89jNfH81@-XDj0Df$ -zrBqo6SPynF2-r)3!HZT9^;l5ev(=#D^{mT~mLog?Abm@+M_(749cz8daajlR5AVb= -z%l5(&6d%^(i_Q%<6zw5*dwXeq=B`TwRvED8@3iN|;@z!A;LjLYMY%2KJ|*y*e!C37 -zS%7A}Rv!Q{BdU=0Q6yPj^gLr|24^lEeHtR0ec4L9)k|lzAv(az5wE -zL>)FU2=ZgTZWV>zPSYX(V?h%?jmTsRyjbeU1cfqSX|)YpOtB?(IUaq4izV8EYjv$Q -z$6nIOr6Npv25-JDOQ>Rgr(3GB&UyE*9heg55^UQ7P_6p|0viYVZmG`cJg!=2 -z_^<-485}NZKNYtaF!cFqR=qFh*N>2jCt?X=-2N%%Sc8H+c3icGv;}mTZl96IXZdl@ -zZn3f~8!v$8%ZJBcF!g9=@YgA%j8xow3JZBtIHUg?z4RSR{J3n28*6USFGifpdSGGG -zQ8X}-+?X*UF|SjW#FjX4!8waLrXWRjb$1rLt4!{C18!y0HHU;$&L5jHQ$Lbpj5HMb -zlcj$%-E+IY#S7zc4^g?^%9tj6O9W)eYAqFKtKyov^5k6Ilkb(15I5`MdktrZ2Ac7Z -zUhbhK+@xnW036hIZqS$bwV;}8hNlZq2r?^;#8`x$R0lWCzYjhe?{U}e%v{EU42AfD -z5GoNa8X1bFKic4 -zwGaX~1N{bLJ==rfhh&QO@}O$CkA|Te74h>t@pn5Tz@{vSshQu$mO90K&5&nyv4fT8 -zP+;ZpqV+XolK=vSyUvqj{%&+^SA@}+^J+lpLHZZbfs-5x)%uGqK$Y_S=7ntnfY)R^ -zkp7^i_EZ}$-&M7byHvmjO)STOsd)DD^I4G!1gUS&E2h3T&AXpMkY+12Z+yh8;rgiO -z+u4W(NBYvY+$DQU0qZaWLVsMly;BNC;FVgAb_~Nui{j(l#r!{kBuX(p;G8m$;v9P5 -zue~oitFLT)k09{BDf_JcQGq*w{Y@kP-R1yj)&@JTmC##klaEGUhH;39cqavlj3k;m -z&1@$_5iFHi=M}IuzZNds+$7`6Vay|Mo>BDWk6>d>ANMcFE6tb<3zS(au&eu!C)8zQ -zcmXl#d2jYc_dsgu@>8_v_U_Cs>QZFwtAkd)h1{MQlIr%2Uh3(M1!cJ|?Jj$*y4%0X -zgdQ&$IA{}L@*kNb*W@febuJ9HmfQa!)<(RjVp!`DkJV%;U_PgVnknv`hv3dK -zc(RT1QDCcvEGPC$6BLHlO441zW~b%gGoUUvf0xV539@hD1<%_3Z(mCrw+0N9*=U>> -zK)h*?NeBawqJiG>IjTg5qWy>xgnYs;7tnL}9;4b{CNQKZQOOW^@190&AKZ6vCy!ku -zvSN3<;L$oR8ZEq83tH7Em9Y;7x1V(l%jo2 -z$S{53Cxnt68r8-Zc5+e5{Us~+pmcd>BkoY#Z9ips-{WVUuTshTiFxj=Jm(8*5$;dB -z5?vjC%|-9`ACUi9Xl^K@JwV&I#+r*(=uZ#;Lwoc24e=X6ABa@B4$QnUOR}j>x?!Vy;Uf6Mu_FHvzpG0y`ZN3n4-?9p~Y2{{NC~^uHMPB;` -zp8lCIkl%&8{Kh&?oTLlWT?{23`JBFoaXI^94hscrJf^OE|K!|_m>ceYTdyNq0=hsH -z2}!HY^`rxg*W`{om}NNE-57L~*whyglqWsq03avPdTpKoiFh6pVWdvUxW!Qnw(ilR|WVX-z+?ov-!u7<*3Rz8vSmc^zE(9>mGxhZ44h_yH -zre8Y`t?t{lcw;bG-dpD~QsO-UeQFLpwvnUFuJ|HUesZgiV6RNpA&Xr2Iyi?2cbi%W -zH*c8Je=MVkHh?K+xNm-+-FE|dJQ5$^i)kf?uI%v|avN-L>#npNOY?1%iLNO%jdnEo -zF@hnXfh%!CLXyFpsSPI6jj3^AKKZPd+{L_{mAT=?bwqCKaYmzU1e_9lUQx4;df+>h -zgC3QhbSZ=#7&!G|fYIagAnK`23e8ud#8!RXJe0~xy!wyHU>$iI{^1Ee@&=w-kRW@> -zPjs5JD5G?@srstUTPI6yC4NUjL88 -zPi>5QAr`4G!`7(5SvUcsBq+cGzntjuR7dzrNdz0{j=>WM8Sf#OtlcWx%5K;QYx4Z) -zCLB$2L1i-d*r3Jr=`L-^1IovfN%C@Ez1V(= -zRB)2A7UUzm4lu9ei%crX4oLd-uHz)Y&wgQ;eB&D8}G -z#l!gMFhmiQ6e-!vR^5&*Bcc#$p4sd=9%7MNNQ^d_*Y3rDQ=KaxYFgB?U`!ZD`{Dyn -zlgj1FIQ^jOJSO?5>eJ5>x;ze>SP&cO;(XhxYd@@xzJ^(_mkR{}^vKZFm|}nWNZcfY -z4MIZNBm)dt47%y)yeutY8M)s&~ebKpXKEY%Ejo< -zZNjC7Qw@8We)BUdkOTnRs)5ETx1N6QjvT}dTZ+Wag}Xh&oRAdGpLxWq{e3#;MAPIR -z8g6)F^WTH5RY(3A^=A?2CJQ-1MEKG(M08+gV~kwJ>~rYG8J=ll -z;k6d#>mzUc!^M?H2FIM<2} -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 -za6!FwgBLERiM_dLk62s2!VK2gTF%! -zEX^V-bY1YkowV$D#ssj7ns*b&lVEz|V|xM?PeBCH9XAiahm0cg@+i!78xSGgMBlZ?{T8nA<~;MJR2Q#_xoAxJV|a -z#m^luoz%#E)xxaLKsL;T`*MMYwk5Ei3&7#Yj_X8(rQP&^6s@@hkHL)|ELTQQ#wAFS -z9qXY;USkbLLxA>;)ndw2?)g%FA=at)_kAZ!5jN)IX3|JPIbFR`Vhivt_h=RdUa`L# -zckYjhcH%hdEyj%M*WnkI_rG7SDeDem^4RH?FzV&d{%q#=dKTAy5ej__r>p`iXd>Zg -zXCsHBJ*Cd813dD+aJMh0Es)hmj{FeDas?4)cfkEH8J8;5CBNp{_Fi!8q2>7c&DJlN -z&_4C24_ALeIWdaTqqd7c6`y6)Gl@-`(q#3D-?7Z9zl@7q6X;+P+MuRf$f3 -z34m}<3m%qPwIbhkIu;w-E7wc^IVc1-y4)K|Z!1&;m|WusTA%GZ%uR46K(p?QEw#gL -zzWysyh7Whni`WR}+;rJD7A;5^BHbYo-FEoA-~eg#rGyYG%p+5wZ-E&43Ar(4};J7tcwUaJu_cOrmtP0LeQ6mme8+#2* -zQ&yhfnj?Y*`)s*tg=HU}Pd)Hf-bu>$c3O76VlN9fEeQ;M&~=O@`+N*}@d-b!ekS_a -zR`B0sO|wM7+(^VQIwLmR3jXWyaEhTL++-DoY#+AGKiJ@0<@FQu#SqG*OKISy(-!7|sO1ZB+R6C~`g;`#q)IFUa7`kKo*_bGBNqWFu{;s68Y*xKg~YElJk -zPZ~}Hf(tdb5q1Ki!M%(M7{j8ZF`ztYe}49LjvIa!UYmzISu3Uzhz!GIR}A-wtzlbK -zNX)6yN;q)SvN%Z4M%>thyJctyyK}INiG?}dSaxsHB4wnnOgI$Afj6H;+ZL%#hGiq& -zZIb{tuWyBg{516`OYMl_0E;fXqykwUP4CLgdm9EYPu%0sTQ0$|Ucmv$D0%6Dy6 -zP2u)W?r3IOzMk>)1^}hFf^F`YePH!-D;*_F%kc^Z4ZkjLAvQq(TrY(D=2kxEyWeqd -z_#Y1q*JQJWoAP0qw1%Wo^X1*&l!5$^mzzo&-zwzwKxI+?xFP3$=m1Pr>X+qe14?%6 -z)IMb!U02)qmTdE%&c=0UJw}p3zyD(`hw%oO*@WmJm{YEnL-!$`m4^I2a@-4jYn)yp~iI&vO6Xw!?vFY0Qk$fZfu+8aa+RK*h9%jqx# -z`YGFo9x^;XU7a1m@1$JXKEdk^e_P~i(W$=wa;p^Tvp)Xbw6VWkrBsF1vCka99T}cV -zZ>Mk{6Nb&3GLFBUx?V^_c%x)f90uCSu=B$Jsr>pj|A~F>R?T&#`m!3J!|0jtzeLE6 -zr2dRLgg2gd-#Z#mW~PjW07U}uzXhoFjkIu0)M`yN8i}}>rw2J2qM#XNlYp&=gbNSqA3B14v=k0nyIX@u;hZ^AF&gaD -zHw+?5Oovr6%~D1RPEAL9wPwsGuwZdSPuDO7H6G!L`9buq;L5`mdVCcOGS!90`xH#E -zuD%;6GANKzFvfK(=7JeZkcYGLf||bU2CgWiqzZAz8=5PWII&3e5x?Nxhzk`Z7?aW_ -zo8p1}!~LFy-yl#G<8g^CgS>^~Ft${6mKZLn -z+>GS_%UO;zs-u$fOY0|+*O#UeOBF=$(#nb5=4TnJqT4pTeRf-!`nv@EL)8isq$I(JR -zIC6mSzU~~dcEF%^vzbYWQ7wn95inRbHR=ZaTkdkFGciMi{Om0W;(C(K-H~$vvXMTZ -zbeF00A@wR6TfS$m)QfZWR5I`d_Y(bkq(7SsM;OcVWwUEe*US&8D!w><-ii(H66v~< -z6q==;zn+#{+G7>r6|%QKYwxd>#gu3bTroIuj^i93YzLKCW5E)XpiP{}L -zdv`wQYC|QEE2xn{6u`(+=!&Tiul}>U-)BD+>OtpQ -zklCO_S(R?bztF7OS8jPfq5oD=Mh*8OB{V5jQIOblHMmlGFvwvY7T}72Yc5=!53R3a -z85vOGulQF2?qI>rJs@Z!9H<>}5z=j;X^{fe7LcEful)!$g7HpBpC;csKLU@dfCI_= -zypT5tYy%9JpaYPUp6;yEA5=}@ti-zFSl_!Hwa97LLZ`<#1HWAS&nuAfYss@GvVj*V -zM27d~dXSNU^V;Ha1SwTVcdPwMW+>rtRLIkIhq?<2xi)gEPEt3YGi<5jI@!5}w=HRf -zXu(-*?(15uuGhjebO25y)e=As9&3l4 -z-mxfAFo8ii7OHp)+hCUFF$785CCn==>}>@*e|yi?w&9Bl_s7Br`t4SMshzHiHq -z>l3ol^xeW#yIcv}O@~)Y=6xA{n!Zs9%rH{X!N_S}W8kBDTU=L*NViMDaHJ~@W3czivP+ktC)Yoo^F~jyE#Y+iMgEIjMQ$mwedH&-wPU1(%Drw!A)EmNW86 -zCEeXRc+@M0jS>pA~`++Liod#-7aEa0>K -zwviA!*PYu?>U+8O4XFO{%xCw|)4896Ut!U+0Fgq`RumF)247~2cu -z+X|VZOjmx4w5t!_HJ$vqxPe*04~88h{VeHAILNDUm|H$}+lT2m>_Qu*7Zb;w=40JB -zydTwqpbxl^b(W7GBes%~e)K@o+_342+vj;RW -zT8s+cycF69p^@-T#J#(e*{>5D|1B7|KP!HbEW%!ZkZWfh -zt7IhAAqv4uHIDDJipD+r?$nowL0;ZrHOE$Q=Dbg8SU(BU?~0z2dzRLF8)MwOwcxBw -zLM&cifhlT}h2pQ+Yzqis#w>nar^T0oG*A+-n+uFypbCjH#H#G*RKlJNqm@SL|Eu|0 -zp~suNPiKEAj3WOtyR}qa{0K~#5TqJDwU_PEhfaxMI+lZ>N-(9xggZLbl68>=c7rLPsrF>}W;GJYO$w;~lgB>%#} -z>oO7El1Q|E=a~(5C0XGpt3cjMGYRoRn?#lM%OT?Ly|^R_(Q}QXW_?5s-v)0rD5TC8 -zVG7iJIZ4_;Cp?vKV?Oc+f?;bVm90>Qc^ -zFz*>$1zOq;T8t4r4Rk^|6#ng}vi*I_U~lbNU1DSE$25?~keppqYb#fSQIO_UC)wa= -zN=`CY*TiXhTLx^r&a5A;U0+js)`{ -zd5kQ*cw0-b^{|^hfkqVWutQ0skD-_Mh|VWtibu=ob)LqOa(|3_kPyTOc|_VK8qw=D -zNb4H$SfMYXn3{+_bn8*xB!jj;jbx0kV<+pfB7G93u)pLd>xQNK92IR_IWvY)F}wxx -zz}gWn!YH(e$IN^h*q9Br?@cuh?~VXOlR>#(rcVZUk;W&Z!);6S#6h`W9A3*8yCCNg -zb|O(l-nS22&i=`l3tq*<5(u$Q(NrAyrrK)-O1r+U$k_canAJo0Zsl7l`i19ONqc>l -zR}qh{2&WntytSyh_l2`%MJJ{|>ZEvrIvZ>uL>^e_o@e8Cc!leQF!tDG-7cMhC&naY -zvqZ&v-+9RkVN#7(bqsQPV*@m6J$W=5XDykQb?USHM&X`Nz>qBD8=gTIu!FloVVk&K -zBeq~NfiSXe=Eo?y5N8M#h+W~85oYWyR@NhCPd)d2zYE6~>N`KUnj1;m7RLM1mF0b& -z_i1w&l4mbpnHx~E??n_K95nq%D&kq!v6|nwml(%JfUIzY$Rs7m80*cgd(X_#f11gU -zdU4Y#LX;stNAxv%vf8D{!C667}3|Ku*26}PLP)RwWbIg -zAAjXvu661D1UP3PAjN3vR$yw-`k}lo`?v~LliBQjD{v?+4qT}SK`gl70{=Bv#{eqv -zQ2=p_8>&yy6t`e<(WFX -zG7^>3ZEPCOgdQGg-rif&ecA4XudOlxSBAW#)bUFD -zaJrh*aB6Zps9m71UPdlC4yHQc5izrhNdD|R -zx-9YV8*#r9PB6ndEI%sAP3|1Zr&#tx4Ig+BBvjrV!c05Z_8j{tVy$krFT|TfO00Yi -zn?=xq+Mf}8RTIeS)L$DuyP%oV?E-mB^Zd9u9~hG&qR8@`Jj8xbhyIwMTekxf8)781 -zB!OJN-VXxvcn6)6wS_Z7x9&V>MAdjMA^uV(1V_REHrY%mtOV_5+{!VbtxiOGBcQ -zo@;-rz2HQ`T->}=ll{XcVv|((3PsZkWYQ&xY$&xQn@Uj%=8+cwL1tiT{fC5yAjart6)nD8q-sq7kl9S7ZJ4>!CRe=}01 -z{D(C0Fc65q*c%kL3UQjuAlhK*mQ9XDr!^Km7FKBG3ZQ{7dGBm%AaI#aaTqg7ju}n^ -z9@W+M{0W;r<=??ie*zIX=vB;FMr?PBd?xJI6k?q?=0OnvwPw3!bp{zkD9kBt@Sw@L -zG=r@S7vgx)`K#;$Gm8G=6(xq3P0LuypmZ5b`O{h46;`GYru2&YYKem0Ai&?n4zFSM=Up9073`3CM%1ptL_6 -z>6+w~B<^ISVQA^2IOp$Ui_Vytc@(f{#S|q**0i(x#M`J~VmmXh_`hUAJ;N#=EP|ds -z!5Td&wPqdKgxu1(=l6#Ju;>Amcl>HOszzt^bRl^&RN1W<9C -z?$;W5KKwP#@1%BP(F+nfnNbpgs1r8Y+QF%{hdYFzm5I_Md5@6tx~H;1K`D%DJ}IJq -z{=1Zd=@=4D@RJOwSn|r}>Y3Or*A-aw$YvN@*Z}(6Z90^d$YMq~ybHOOK>*$W*l~*k -zA2Leazx7G3ic$+xADnP(%a8Tw&yTwgp9Sul@=68laW4BE$ -zwpL%{(NwH&wIdl@*f0#haFusSc5RQH;(NGOeg>2j+}0?d*A|5;*{{sT?*mvF4~*k{#7q&=51G`!PT8=3QCuZ3cs -zX*mw>`f88FmSOHm*>_98FD6nCsyvxmFqQCFsGSRnRrfPQ_5oWmMFa2B>8-;-gkXDQ -z5kVeja7 -zxw)8l?Ox@;@Bq=pX#{QPe_{HWqS -zoJ1^=b4*SpF2)%Lg&&+jw3i!bI}o30uT}8JfH$er{K#q~z;5Pbj7c#N>rZWEzb5R0 -z_8?iOyXLA%b=y}#p8^@crFpCkEj)}$3)62NQ*RWV_g(W$ -zLfuoG9W90<;$aPc-e)vHnCNH4tj*XxVIGwLUS@RMUmtH!u>D4pweIlKx+;sz>AHw-lTcVW1YLQ%Usz}z>v5&JP0nJbT=+P1ILFaA0;pX)9n!Zx@eoCrf#M*&#o -z&y42f4S{~{AYbV)(vq;W+#P3tb6tQF5(FLTYsQ77^cKA%JktsM1iIF~qhau6`Qsm% -zBLOCag4tZRuJqL-{2dXAVZ#=KE6h{yOJ0q{ox;h5K)!tdLqNR0^o|17b0I}_5ZO=@ -zZ6W&&EX4c&VaXXyn#A`OL+yFR%iwZKz6i!MPl%I$fNA`0DvY5FfCHdT*Gy;DLj#2q -zuY6mLt(0ipG?Yz5>YLR)CbD`Z&P%OZZ|;t1%T?aBntG&Zk-o!U5<>9DLIhaocE2`s -z{Nf_}OZ|0G%a^dVv~-?jWcW|7@_9vxOq6GvW;BIC`kl>bTUeb1zHe9WI@(58;XOR+ -z!EOKfoyL^$5xBzS5q`lMdM~djz(f$I-hvho1ox}wY^QIjUr9=8lKA|mep2tq5~`oG -zB|DKi!^fg1wtIbw0m56JBTHFwAj0~Mm6%Iy=wmmmWVBQCyJshv)whGHfPIg% -zrK!9%3vBrArI+!|5rIYdwDat6Uc3Lb#!Gcd`rZsa-jG68Vz7ADYVSxU0Dp!m>G -zh=2U5w8R@DlEZk%<~qhyvj+`x)+D=eWKq94;i&PPTceL8B -z2sRb+GG{H|*_{P~(c74IeKb>UB~Xcx`4#X41lar+k)`=?&7YMP=%^0W6YyyFVeVFU7XTMX|-9E#4d$uBI)Cv0L -zaf#xM2G-2>{TAV)I?#`5e<5igdN*XdKJaFbj!?;Jmj;*#Cix$gC=aW8pYp^rhh1$( -zv3@lZ+dEJE#7*edf8G#Y)#y8`urA?)wOQ}r5#FN|;f2tLMwjuMQKoviCEg$T{6}BKPpq+k#o -zO_}z_(4vrN(i7^dy{FgAA3XT-pB -z@M0`KMz;(UCJ_oPPM8nH3nL@ELu&S694Qfo39V$O@eVycD0Ic_Qu(|U4-Dcdj@1_k -zY`siiG17uCP3*c9Dn5-dY02XV!=BIuP}b`l4lrb-VQD{HxT!8Y8|Kp!dTO(_oS6@= -z*DL&RJg4G+yoGx?br}kR(BMh0O{JRJaHsk8OhSw^``Y;e1>)?GRyI6%>UM*_H8==k -ztOnCp115hYT9~rZ;&sG5mM^#d$4PeWL+QbS8wCx_%GTLC41JM|7{<3)w9bCAM*#>T -z&3lH(MhyDqUAUR(#tnF<)2Q&Gk!{Ij5KU3C%Vnt@3Z4^I$))HSsJ}#@NZttuF7E1e -z2Q|jhaQpkkbUg=b>$Wi3J}IkAz1*=Mk)xXF1+NMiPeYNta!nKln#(1J9G*{9*`|Y`oaU>Ouk?i^-_U+$I5O43o -zwDWs|dfUry1AHhCFu_y(VF!s?j19|x;>ez2{|oThJJxy7Bq+i38<9z4mlFe2=1y`K -z1fTrB^i}I1neKg$9_8qdddWTX&Ycpu)mifj`r%wR%@h%|r!`GK2A#haH*h=R%!IAh -zST506?rPu>ot0=If85Tf!rBcoa(UL{%a>aJmw<#YMkkJ{C#79w&H0@ZY7VbyVN`=tpSRIo-vZqHO4)s1po -z$K5s&=Ies~v%U0^JQ$nEJ$>k!3)qK<7H0S7`|zH<6WV@8R@%^-M!1)b8F|_)_b&j) -z`GggiEYQx^W=7PdC}=^~$k60JaewgV9Erea_+QY>uOy=AX$AhON^D6m=sG#ye@6Do{$FGx@`voFe6Nx_(CLBT2mPkG6T5l= -zun?!ReP@>dTFX3Lkk!S!ifKWuVW>`2_BKsxkb~zL(24IBJF!r~$m^pi>j|Vth?7O4Krv*pr#HmAAV_uj -zF?Oq>Dj?cL`s^7+D<-g0H`IFU&J9=KLXgchs`OaFu2}8aW+^Nk)YEj2DK(P~B{-$M -zSJs@*#W~Xts^OedsW2x+hq4WybS!towwS!%5T-_% -z6lfZIASNu~zR`-+``<l@$A -z9HydMn;!PaOVFhejvrdGy!tvu=WMAbUk|;`W()N@;)-G5A^*xRL8@xDN8j(NT&7C -z1ubJ0P3p1yA|s}(imj%20QeCIOVtYUlE+&GDO)-KqTMF?oP5tBnA(nqR&PvtY5~&c -z?d2)^Bo+(1S#za*%s$nOBCF(S;-X`bJ68-wVd@5<6()I -zSGs(xqCvcj%z0&CTnkT}o*69O&;L?k##zN;*;oQZWK;I9T{rsVQBuDFtY!2xQyRgB -zmHorjVlRe9gEH>x^uiwN*JyR{H1M&y{$j5e?_G$kb!@{@$a#85DL@LB=iR#lw6a36 -zJ0`1mv|Lgm&Atw|{mkBCz16nKe(THp+m-C8N`QYH+t;9AfP#_!saW+dtq@RAgzB-F -zHOXLahoje4bZAJfe?R)sZMP*_h`TB=uJEiOlc6z3IgxVIGg896wc%ueP5M`{Y|!G6 -zh1en6Nkr5`B�b?g&HRKvj0K1tXh$alrg^SoK< -zqU75MKYo2Dt7i!xRn8FdS>?V0f!rlJ6$hL{1O2&5k?v4R^8^ds&Ckgy(Lh37U}|OJ -z@kXAk@xkN}=MNs0FMHA0O*}dgz)#;T^Jy1RwV$wAwJ-gj1xEP?A?JP^Zc$ZEY0AAJvJ($Bb_ -zpn}I1K3~zjmt{_|eo$V)(=gjWewSQGhoJ34st&6ggS35joOWM2o{F2d+Vt%kyphM^ -zDpQfpKkkgiSk^SYDBlLVB>8g(9?pZpI27GH;HxaP73w#qrD{YFMij&4LPfdsL^Odq#9o|Ueb0c`r~taKy26p61)4X{ -z3ZWKHtUEpvXMrg1q(}hG9Bv`Ho7C`zvxDc6%RE=VtBie=nmt3-H5c9;2DNcIW#&9BT@}_15zJ;p&G0DTwN7Gule-zU -z38jYafK9X$1_bjscgDvFKodZ{xi_Za8_^Z^a_jK&&IaJNWJa5ceKvX{VMhvM`I*o^tC8f~Py=iu4f<$t#xn9X1g3R6`m?N$RRqORP`e2_(gQt8|4n_^^D}hp#^0FZKl1uDaRLSFb4G)vjmM;&X$d -zdB2=BZF|aEN)!ozJi92#MsNTqLoz~T{`jHimIZvZp0dxKmlZF(XtKLUe@&_VKmjxh -zqVqm5__#c_01`UM44$erIMwn1e7kb8l>u^$&ZWjqIrptfpF>GrbwVW?B+;MrAxox3 -zMp*B8lxM`YH3OnPm-?(KGpZEco)djiI8)i4E@{9Vl%D}9IsiVV*a$EUkssE;rcdBz -zkY?&NZ1QYI-aF~GWvoJNvEPMUR^_8CWDWQ<^a}nCS{d5Ippf*TZr{y$^a&snRYDSFu{U`s&3dYim -z$?fkooApe9-QQUux}1EGOM%4?)`CO*=p`fW&}1O;E+bQnd#IycYxuG7QH$AY9V -zlghL-*85f*)UEz(h%4{P91RmLeNXD3tT@2NR9 -z*@a|>f#knmzQFCGaas>hE(Yu$2fCqA{G1grJJS)u{tb?0hw9^l;{1ckkn`MpH~xha(d#2eiRZ3IYD!{RFkTWT|;g -z#wd&p^^X!|;*8Duj!c)ZV9z)juY9GXkp7{=h?x{-dtA6ibBRu?E0(m^x5EO?{?mXl -zc{*SKK94~*yJ7)@T%b!d1F$}m4jRxuGLYBJT^KsLODIHfgAKQ>Z-(C40QiDQxT!Oq -zYw=13%q4Z-$B`f`i8J)gwBXW;K(i^2Fz>V3L^F|=;?W80KzqI#X4H)!vcEZDv@mun -z0fHl*4Q#X%$p01Kv6bMJfZ0#6u(H{e-;6}jtfZnL;7V}5u`{&hPokcZMoTT$i~7X)5^kr3FO9hlj?dXLjZe9{Cbn#q}av$o}CXV|W+6zm_5 -z=Ik2b@q8crF5Qz7V?#G++8Y{u7FlkTPD<@cSO%ApNBCOdMa&<`avR~gj4TKxZI_lT -zuBr@)QfuM~xD;s#2mvMgV24_!Y5pKGedWtM+N0KkGK)i9&`c3~AD|9(g1O)95W7)o -zY2#6#7X*`3c*#VQlU^g)>O`Y}h96W5u>aYTON!#~uF6Mi)yb*GQw@_h -zk4C2Md|?6#BFweJsDqNYzev&m?+=`|M}5$gg|w2KKeWNCv@3MJ>4*i85N;(+4R?o7I8u$u;R4~zw`kq6d<5+De(|8 -zvv|J6vGb5YYvn`xI8skxA!g#_tc4cDs{^cqJRI6n2lTtKiiKAJ|LPh4U{a~FK3l;*m%ph#+hg1aLK|L0vfP%6n -zuNIWdzYlSjkg^%!li)UYVaXU7EH^fi3&*| -zuf;dKKcWgE6diwn03&gFO-QV|IVOLuU81{-B1~#X=d&M9hx^?w5R7WnjAujmKlfPJ|}mMhIG2Y2l7sBy<2dCDi0Biw4ZlksL(J3w!#3*md@SdL%^m4 -z4DA}8IFqN6nP|&BWMBM`Vog^(s~B|6?G;42by?Gaa@X^S0vIM})DRcyUS+LP5A-oz -z`ORZhJ}v;>`~cbi*_flUdGrAZgBbp*2Byx%$jA{)`&KCFJseUar?=8i6mzh3IjZW8 -z`cxlYuc>&`i|CoQxozuvyA4TdDF}=@X`=2bf`rHlVF_GnHBa0rr&?CyTNiy&6(cmf -zkxu%1*x1|V+LNMjDMsg#&vGR+LM`gmsf!R$Usu!dN843F6UVj-s+N=Q70)Ru)7i~I -zj(1`6WN(-qDrzT$pcyOm-7D_GsIcOY==_1Rsq(mOjn^%qMJHvbYF>Hbr+S*QG1~D_ -zbKKhguOG4^Q!0eSlGH4EbaSI`WrM~y^(PAkS;$mL;Ez8|W_F})EPy{Jp}( -z@d?G^EzCo}EPnZ?}U30+8TCCQcaRsIt3BobqHB`WkQgy -zO-%jZ8)o!qAm;PkXhswp>9ZyC@TPEwMnpgGo>l~lEDxG11@MPG-(~6@x2##U9B7i& -z31FoHEdN$|b)CeJeFr#?|4m4Ck&C{?Xo9ghv!;%Ys6WlHs;u}w?i_NojeY~qRGdx) -zOp&=|jTg)(u-l>S5FJa0k^U#LH2PW#lE-mPG(1!tG^;aF?jZV+fy7J@(}<9JFsY9?g+_Y&XT0qQgYQAJ)=h0INd^z^OUDg%b*jdDD2B;X7BTVemrk}(!wf> -zRSN5+6xWrAX_YhC(n`KQ4Upefs%~P28^d0E_5Ax5kgkedRc{{j72nf$lKF~rll>7& -zFAW;u`^ZYk+lAYlTu5KZ1?w;!2mw}8fg2V0sf1)oPuU3>1i`8lk(uQS?SF2Kss(-T -zErYc460hBonPBn?Qy(-B|*?J1KX_+z_ud2 -z9l||fxFk**w(_G5Te{r67a#o8c1GP5_tIct9oVK?%I!eT4Ym}d7?5sEl`R0`VY}9J -z(^BT(paR!rM7f6oY7J5cvyEkZlH64qWkM=gknhmxACSUG`rsrEHkE*ALrLqbrzxr4 -z6=Nv766be~Pq0+e{afofklws{GfR4=GAdlfc-e^^aDD9DhoHHk*mndLrNC_6Ja6Sl -zU5&UgE!cz@nDq8xS$KEO$cKpg(!=l=sr2h;%%*}|1NV97bR$Snv(Lz3R*R=iN|Ti4 -z&^!@9zJYg6F{6b}hPZXZ0v+dae#)c2iLaXsfb!|==7w;v>=4$-4S9{x4o%p*i$*jY -z+Jckbum8tjRA3OM5E6Tx&Tgi;+}UPvCe&Yglx!fJ&f9Ett2fNtHq*TY`VkTm>ahPxWV22| -zIhHea!IQZp0g^;GmO)xpaOP_KvFp;CLk|q}O`v_N8r8>AM%^(T -z$!2!lScLCpy0h~+t^PAg?k4*J%33)!1H2^!cOI@J5#h5zEyvO72al-_YTkgQ&#tz~ -zb2i#y$n3%WT8tnQYJuI37U!SVq|{xk8b0FecLqRy!;H$Ji62TMQE?`YqLa4&4 -zd&4~M6iGGo!|9wzQmywnynzEStAu%5c>d>E_apL0a06ZN28m&C^>{L`$#bd-zz*V5 -zhTxt^xTF!P?YDCKn3Nr+#*Cz1tdj=)dUG_+`MJxaV6KJDa=jv(D*lMxQrG -z$Y%1|wc~m=svYL2CwiwcRyyLf^c(}tMUE3^T39ggYUHKQU7VB|NFtCDA(=vo=RLr) -z(cq527bmGXOW4VoC(>WI&4-ia!FAXZaNz7|d|2h|5LpQmn}G)YBH7;xFU!hYpna$) -z}7xprwwso2iE`9aa?lZjOIBFeGkYAQO2E{ -zdQrLj99d&KD!w@QDHR(f|Ec6l0=d -zBejRJYFpu!$LDiWCx;n{xBfb};@3B@3c-2d45;w=FYFJ8swG}pUEDqiNyC>>p`5-$ -zzem5G)SeIw2{TaN5gDFqO6$@O(0O~0XA2r8LBiy3y;1U1hUXl{X}ym2g^N)u9zBCW -zHC1wn%8_7|H@?4j5w07Xk+wsUnqG?YN}v)5u*jcmao!Gk-rmuU9@c^G&V$*?iU1q46|_yuncU^uh(h119AjRhg{7pU{~< -z&38K&WTs1iyWHwY;Jo%r8-GzF{0EXFU;eoVnjg9hK}Rm6%s`5brZfSCuS;-@unrtQ -zLfohnnH$6aKQT@0>eBFoozYB3c<9dFGndfLeadd|2>G}3%7L=P7*aGrpiCD`K3M?% -z*}cPe5(n?et@@7-+?Rgao`o5kkW+wDO`q4rT>iuurhx8n;Axbw5|vHMFz+LBmT7ai -z2cbtIt*=*!Voy8ZkMz#LS^26)#;pMv8urSFpwmObU|8zJ8VRfv?5iONISK@*(Ao?Z -z2{tlJ-H%rS3NgE2Bv1VV2uNKOt_Cvf^{<}u-!(<0JZ~4(1<=OLdzoj)+owZZvaK-h -z^@7xnzjmEhX-rh6&HG@+z$rNDC|l784xkjU`yX5&{&+|ZxXMf`P;#RijqBtnzLxK8<+GFMGW-IP_pahewzk4 -zw{4DCqcMX_DdPS_Qc!f7S!~&bN(~>xbn5bv^hSL(;ifgle%QtJav~@~Rd5rfs?3dM -zKzyPG`UlUil1N0rWr%DS*Y!nU(k4IyP&3u#1*#{m+1#B{!h4;0Tgz!oj_Fy{m&*|8 -z-T27lY##Q*`CQxqX~!{ySwfud^-9q-r2ix(sFE6+vpQbr-40Ca<=}0yKM;3VD8lU| -z=LS@jgo(t#_YpkJ(6!~3){g}z_kAre -zJwO}}ehwTZV4orDPd@>7>BZAIs6esfLbsii^IsB65RG+ds?*{K9Hm7}u)WSHYgshC -zo3Br%?R_2jarw{ -z@d4tTu^xnX`1ZMERc3vCzJvitw`o6yVSOxV8J1*Z;%85EOU|8~5?XS=r?QXMu#Ve)g)Dvm~vmrD$5Kw@v -zP00%izb`JF0!eJM0vY+1!X0fSx?&A=6#t$zR@@k<&JvUMhX_x$rUHde4W|G>F$9I= -zp7lCV2uWiA1ro4fNa7jOe-UO|`H8cq|Te-PtqyoTH%Ad+>OwsGL@Cb!rKM -z_9BF{_i2c9UITU9Ru`1K9g{Rj6u$HhEP&J-xALzCNY1t)OgP+plQ`Kd*C8gLY{@9v -zyPhY?0TQvU8ujJ#)m_B|{?uzzRP7mXHmz}{TdOvW(`e~zD~sn;Tyt%+7+W5v@9WLT -zbeGya@x9_35Gr}UV0L-MnI3fCyrr=!RyiST(-`9CjlD`|4{n2~fn`P_pjrm4m0HSj -zqgjb&#O`;f?)t{QU8}>#_44{6z`?niU+7*xzS#@4%*;!!0gDZx5@>(X`wf@PBc@5exKkk-(bWi#053 -zWDnT5M5ha6%9GKH8Vu_wumK`9oJL!QBbq2|)b^bKF6tFzGM8PVpj$uGxIXVVAx=HE -zou_2nrtHgW1SFRu@j;cX2+rGFWGlSJb*o?lzP^u~*aKZ$w~b&Og-$e`m~afSG^eoT -zoGR>dYa)1xsrYUMjfOyn9-&W-7Ji~Rs7FhhbPC&6zIUkKZF{AeBX==4Pvy+QZTJO8aVg6oFys=Q$HZ+eX(NP -zhz-v8zLVfL-!7+v@(%Uj*S8*9*nH%(^!PB>Bji5y87Ed4<=vyzG*y=0=dq1T46)YNT}Q!7D6fJ9mq$fQp&J;4@0VDvdf|o&YsC*~{Vv&GaCT2t -zm5+X6pF4kOXdH@lWwS~%RShi7SrAdKE1v{K93{^IzZk^y=98C|{a17vO_z0a5|p}b -zrpc%3e4Tc~XHRUb5z-q$`=6JfLNl1Y$dFv$`o^vS_Ncjpvk_*m%TvHlN8LyhIUnJ+ -zzC^_M~sGp7{$ACRNiyEQML -zKZ@XD>ZBuYKd0Qtm$1Xu*;3VhitQ1#;x~R6_VH2yVlD!_1Lv(l;?7aq~4u`7i-wa2E(i1^#r#r?>IKD7UgSZ -zso_!2KrKX5jQ(g8jVj@(ah$Wkl@Iu>tFqO1tBJrPfez7E!9!Z%iMohp5Rnw0Ev7*` -zWIV-OQM?KRXzYOYvHwl;V^=L}{TlNF`~9K1gD#u^Bv*1PKgwZOF1_c;>PT+Oz0B1) -z#|^B?9^DnvA0sZnSZIAJAX|i6+UJQ07YCK$Ype}BndyE??R}()Ohd?CPT=V>-p11T -zK7ezw+HxFv({vzM!#P#V`yk}|N}ch#PnpPQsa>3#`r_oC_o21ube9;CM6U`J?bjT5 -zkk76NYYpC|ILkGu|2r6LO))dV=m{DzxIPB;XWyz -zm+)aH&ISvRV+4@Q3xrI2-HGjZdS8^wjX357x4J#YpB4=-I#`8~o)6I_Pv0o8<9b09 -z%=7JWYDT^kqJE>21RF;fzN@i@0Zm$y+jDbzOMZdN!&pPtEtGYE*?K2YM;PJNZ}Xwj -z^nBRV2CT1%bT`N1=__qkj#2iwRg`b*+9+wYxN2qh5N_=PFn!1Hr+LW>Rhjba6As^d -zHax+y%JI^Cm@y%!vD`phAd_yEn8ybst+(Mr^aFW&`^>?vPVA7DLy*h@GiyfwgaEbo -z^V-$X*_U&4(QMp4BO`kfq}Gsrr)F7IU3JnljW^oQP~S|lK*kg!N1rO1(jGEO{o$#X1!j2QbLJnp{trQ=^)gMRQt&VE -zAG}tTc8}1xt4RFfACV&MnrdR*a#`z?NYC(Y0#V()Vl3u;13GEw|Nd`g_%OIaB_j9O`P?Jksm;^6r!g -z`0+gyZKUUbITF)cS=fqGbK=mqolKNU6xYV0&AfG!=f$1tWJdn!Qf$EJUroZoVV7UJ -zg_G6i11jM+uzH5x^Ef8rZC{P3qmvli1gkG%Qu_`iUE#w4($EC!l%=h -zm#_ABe3iBEx4q?n(yRc@jL{ei>S}^gkDOF4 -zC>3bh2Z`nC=V;vn;jEAWtsQI9{L1{46gIi}sJKRPsT-}WoOd=R!jE!Gtae+tGBl!B -zK{oVN8V>XMi*#84Ig(ZX3k)OuQPjoV)JIjXy#StT?*vf=$bF0myjTr`SH!y}2tf=L -z=w4VfFGtVBz%U4cW8f~#;E2E!Ga-kBA}Be7XZ51SaS`mQ3*}||@pLTYR8~v0?}DM< -zlhDZ3*IIljn(w8jjcJ*OO-Y{QDiNZhlw4BZYkgG*ZBUiM-ZODbhptmZinGSJ$q<6p -zSN?4e1;DPilH~fHJ~nZc7@po8w4k#8>27_>^A8Pe7~_`2q)ki~V?`Dk=w51eCe8g> -zORLwz2 -zBvt`$pt399M~qW&T#5d1!`|i+m0LLWa91dMIabr#hx;BJCl?ocS*J0pUeZ}UcdS7P -z>O9k4QRqM1@3A>&B!g`Wc2r;U>|9U3hC{r;0GxY~DX{ -z;_g^}J6sxqQKxA2vKws><9M7D-ZCfBCnB(G=lgm$UNxJHaB_i_KvJy%h6ptMXc8&x -z*yuTLJF))LWdf^eBkjdTof{6CdXiS)4_6Zz{ub=v^UplL)hN7#DoFv>AL$@6MCrY`=iN=m8}CZRsgM+V -z+n(UQP@GaR&L9urWk;Xs*||8-K#apZ6}W4NDxR_dwLvclwAQAtG}_Ea&*YyBTTX9BP~&Di -z3@1$$O-3jnid951RAm&Y4EQol<%$&xU!*ZQtO#szeuwG0fw%cpcZs_WIQ)^z%^JL< -zfF|zRxw~I{B!^m&^9R1Yo=ePfl5HRXwOp`(4=OLs)M1<1O6EU<{8a%o;B6ez1@^XB -z{pjLQ1x(0n(qOvIhVe9Y$Z`U&@lHDPJVJ?zrkT*2;Lp1ewRj9ICb_THepj_Tu)NuR -z*`-pt=+U&$kKi+Ef3=59yQvyUF=t=hg0a6InEtdIB6}l4U)+wl -z?J#bz_1os8s3(IjSoOL4ShTN{Shx+R<=CyC{{Wa-0HZH@?pV1p8vD7^jclp$vzWsW -z3)MJEKjV;4R5E%pE~bGk8~BuKN3OiNbW9FiQFF_o*zwcXm;DW!M0s__04Qg& -z#KXbFeo(#bGkZmO>z&I^A1h-mY4S?~js=t9w})DtI`g_rGVLCdas#_;lTUqRL1`UJ -zho#!XiUer*%Y2H}ya9|vC-c$Wq-4bD&J<_5+S*8ZPlRECfL9-8y0a@4x=dR`_AP1w -z|3w}g1EoXzF1&!WU(qt;imH12eTcRU!6gD@!v0$!-o)m57l2`-(Ehjq0WNPXWN*%{ -z7RZmI+h2Psj14C}zJaJjnZJKnxZw-Qytt7*eA@_;QeE5lWWM~F{55##%S`Q>TIb5v -zAi&=3)Z+EEX6Cy8nbD0rf#NR@}!sZ3}b06*kf0xu)Yb3-{sRz0(DD(x>u(bft& -zm^)NYX5c!LUY%eD%j|;dRto&iS*osT3>B0(haLS!0glyZ<(G0I2`TEGR^1fxOme6 -zZu%5$Vg2rb4Sbh&$BD>$;*r7U6RobDyjwM>jhcMC9=7j`Rg2L9e*WbwExWG?n8H%2 -zgj7YfQ6yq91H@~Fq#zx1T{lV7ziJ=h08Jy06d*C1g* -z4M+%HZ#Q%vMHKA-T6~YjJ1!}euf-HDUOZp(&N0_p2#_Wy7R;aLDg19K8A=8LzTVX~ -z9MtntL@6@OGo{(9_|jk-gjiR@pkjsJZN0)f+zi#=hKVxI=T -zg}exi$zQ38?Zc}eYSS!^s=xO3>5M&I_neTHP4@_;ck-ltbxIzb!r%)yi$IOWkb1P~z*`A+0n -zwMhM3-P|1P)D*YH{W)3 -zO3yyR7!fxJ7RUW)HZ!i+sg-R5`Sv84+y{L6c3rNi?KYfN`Ob)>{#VbBA}YLOGZjI=1I3-)R#h+1@&ny9s^{?9>TW+_ddVR`g^kw1 -z0rywZKk*%A_qVu_FAS@EU*{c3hwfVn<2iD -z$2RL!*YPmu(Kvl$a_-6(NZiNKXFCb -zD>8TXxF;nyqNDNTpW0J|2a$$9(<~&fY{x3dI~}Wr8c=iz0pZ@X_o0NIp-VTfg}vpx -z|0tU+V^+@Gx}8EO{$I|MfnHbjxZjG5topE5EX>{^c`am{IQTQ;j+>B(=0pjSDiD^M -z5^lKd5eT}H|&KH -zQz}5Nu3>>At)%WLq=%uin1I7TIVmow(ig7t1?)k)y|Z7|TOjoZ<|=ano7iW&kFiE>_7cC2CAgb -zRrILpPKE3@GRT_x(w~DAhds-cqEgT?B=2$U)ymA#j!=o2ocgP>s5o8A3&Iu-#e159 -z1V1&lc#I19Z^_|Wk}|kJ@KXWKiFnuEPy`B$IM;Gu&*Q8vkL0lQ$&$Y$l60kbXcJ>$i2@`;f{#FAzXDO~$M -z8z!oOzi1omp@OEJ&J$W#3fvKepS#XCqf7Yd`7a;wI}xdJWkn@XR^Tj94wqzt`wM$A -zhqZoiR#4iC!->3$cQ*BF2PwMu<@*y;zau0%uH@mOjOacKiIpOqFtah#vw(Mz%)d8h -zZjrYe)0<_^e24q>h2l4e@{M&goa`GIFZVBwKz=$kYpscJBI>1y3pFi_*Bbg^LZxUE -z>s$)ULF5%wlP10ZfRXlx_j%p@iKQnq9cpITxZ~Thr7@Qbs*yPghr63Qng`u$G+NlG -zv)AyHrw%-k-ig=MlKz%yJvQtRLNqAi_+cHCLEM6#*^Vg*#HHce%jmU%>z7K}&=(9U -z@Ds$-Mw6tev&%xDfl`%?^cpi~VJ_w_zF)j(PNk++!GBL}Vo(6xuXn9ue2zJk$3(CM -zm}DRm2&+gFgmm|F66-);yLCxgkHtDUSMUq&Jn0 -zS7{B<4>nP?++~!w -zQ43`T>fZylrn#)Ab&{qL^8iE~LQiDnN96IDn!S4KwaAjZgfYKGO)!zPcycc=68#R4 -zuycT&OjX@fzob>!;)knR>k3hSxjO<7MNq?x5xC{`TTt8-2_`eW_%~G$tpt{U84#jL -z{-Y_J@!8x!=a9r9uem(+PK})z3~=RAXZq5pFI6ZT>kgkmWvVkNqmo}i{*8uvQwJJ%ZA}H;2Sa#o!(a!3ySKLXr&~e5;0F;p;y#jWq2&h*qu8<22P`qv2 -zbCNk1)|PKqsas^JZiYnq*(x1$z%?n_VI==O0da0bxKfwb4(ynRUCrpC)pW03`|JK#Izugso@AJIkY3+P -z&tf73fP1AiQ$?Zm#?1L1C;Aa}hFn&cy(fHiaIz -zIRw7N(!15tI!b|V75!?gfo9Hl2r~#5*FjpJUk2uI!o-Kq{t^!2kBZOv{S;GRJ1@NDc{d4xb -zrjb%su#h%0OMqbMasIkZ2oXSh(~~iy!pl_pvUaVG>dLBQKE&!l8#-(;g5Vgb0o#Cr -zv+`)P<$lD)muN2nNp}6l4n&^dn21Gi7Qf&uMdwrt+LQSUMqCzs -zBkE`H9D_sXT3k|LiO9CdWSHvGEBv@0ZMCv8B>Ru7OMKJGB&|)K%S3}ly&Tvt2PX+T -z2FCR@5sF1FM`~%Kp4nzX-{hF&?aYF1wU0QFBe~+M(8ivr)3pb4`qOqUw-^oyB~e0x -z^#ru(<=18#@^dCH@pd39{?x<(>!A)Z*PbJ1Ot>#29@Z5?zCo=<^6I7cYobd!fj=e_nQoTf -zkykrcRG1V!Zj+FF*N$e?!R;JZNIZL(GabrJwo_E1&C11JZO`tpy>R(GwVw@NYC~&z -zR{PH(-)J9#e8YpUw1&sHvUMGF)ZW!%&)Gsz(O`p+f;_ac)j@6B7u*iN(h8BNm1%+q -z(rU2n!MFjDZ-?l7ibs^U`>WMkRTySExt;giaKWM($I>OM?GpC`DF2hmQXt-XxS@3r -zFLcrwa)00MH(8SSw0vOH;bKTNT@_&9kB}mr+W;X~z>ZoLu`Y3VUO;|Z5MF^UTr(B@ -z7}4f8c@~o-_yv3#)NXO@F74)ya?o`=MM~tCiD<1DJL5eRYT~d~bTBE=yDP+0x$+ -z8#M=QdEWSpT|7A35JtB4v=gMZOC7bBW7JJl?qJ+H{k%a1xqs88pg2{J5DKPK6P`wh -z79v43K`WiQlB;}-f1PU9ZqDm18l$|ER;MBd27$f| -zCpQzhE0@MEzhOOf{|L@p;?b -zDoRB=1a6l6ib)qGz!FX~6fT^h8A0_t`CQ!jq(0>ROTWM;!!VZg#30q|4yhQk{*k)+ -z&-}9=kFl4i8`mkFlC#Rh41$`W@}jXN!FsudJfYUmdx}h;($GRO6J#_54}vj>QeVW< -zn1}`Yovp23i5`oiCjn%@9e&QO;{O=uCJZHB<_dAaRXS@`SD{Jf=Ig^eX)@b -zYcpXeZT>tdHdElUK;j53ZM8XcfBn`?Ja!_m)2;lx -z)kVUs-U0!rHk*MXqNt~nUdK$1Q1PS4h&-5n?bbFt6Yctk=ZCXrB~&xwL^(``dC%Y0 -zNPf#LSsI#M12vkdDyjB*lVp{@_1c2yZ6dSw;d`4`mW62~;tn1`QsACB0e-b`thA#L -zjxm?mSVvpOsp*PxjQT-gdhvDLvIyi_S9yx_4M_1hCN3_+PX262>`S2h#VpMQ*^65J -zLGv6Oiwh~lphuC;99uq#vC58dP{xpFI;`pBAKeI44rozSq`H!YRijn5Ad$Zy5#?MQ -zN+s@vR|&i9w*3_&uMWs%BcnaSwl~y#lku?rZPi22Q#KCoT*urHhlH^e350GOj -zYj|#>USlTaz*QOlQSzk>(m*Q#dMiqZ@Dd*Tu}Hh+kPDjJ(Z7zjZH-PFzNK(%S^yKK -zr4-q7AyyS53gItNa)tll7(5UJJA0IgYvJq|cj09AQ=m%|8mRt~P*fY7TCqt9DP`-7QJ0XRw=Zi2SoIBqx<(Uyqm5(dcy}7Am;)rITfIGsZt3d=11$v0)w&C8 -zyJvf(bd5i_neUTyJuxW^j2W#fV%CQ6zt|@_Y|Lo_i!kCCLL~UR53a!K=PPOk(R{$0+o$@gK>B -zn824Z9yMxQ7{-Ollbbk0(pkHbzzA8qiE4v785@3n^yEB*i}6TEz8x@VqzA$1`!~f2 -zgluxiftol7TYBX{%rTE1Fs8v;Lxnmz%;b9O&t<)ieL>RixN|Jr&On2ubKP?DD#FZk -z+NRcFcz2~{%)UL(7R6?ikg*KA=m>eCFZ-!90oi2JAYwgq9Gne>nDuC^0k~VH(-0e_ -zW}$|yyTsa5P=`K_9w#PdIi1tCOr}J>p5}f-%)SDlP@}Mls;KQr3UPjh?1AZe955JQ -zz9K%Lt9yh_$VOAu8*g*BYbfpP?4{VV{k}t%Xixb{5A33|&XNk+_nbR%K_&q(#9Xh@ -z2Al|h3qckGxtxn_^jVFok5g$JH67x3tl~#3gcsl2~07{_^vJn1KkUK5$P=RWiItu%jGumH6 -z)ix5nP}mwJ2F|kU1^Cm4j8!8MU_EQIg*Pz6ShJ*pB=vl0Qec>uRc}<`Zo;b!j(ju$ -z`R?-ov1%OeZqs}(g1H>kBvTok2w;=1)D{v>R)7@{u*@N1)rAspM~}WcL>i3PaYHND -zZ=q)BvFG_pq>v1=c#(R?{;J=9WoQn8m*#K?6$(vp978V8U+jGxP^Z8ge3(P&ldghC -zIFZ!c;??zDIOqjpw!6OQ*Hi+pk?$jPtL%WH=2=@faq|V0=29jzxG&}}M}l}sh&j<4 -zFWc>t6vy3MDUsm&=vUQ=2Pf%`7StZjw!M!rJBadA@MXuXOFIzR_uc?d@Q|I!V?i+- -z;3T%;C2K|X`<+{H?B6%NH5#IyLZ3j3mGGJPCc807&x_0|HmMfaFf00yD@(ei^G!=#wAj;@JxfLXg4u+)k5%YRvUnx -zo5%=NR=pqzs#t!!s&;~&i0&m9Z1U)hTL4F61`=7C21BElfY -zC=IxQ11AhqPo~pOxaN@$}|z)5|Y$Jn_`#k -zfg@aUCa_>es9g(WSn9VSbpo5M#4F(}G@Ri7+`W6Aq9>pn9eXXK&P{I?M;JX(=U -z5qw3Wfs#zD7p>`#XraGG=n{G_tOZwqNJ8zh?H)yS$7V`+y+ZDylzzc2)UZH=a6(i} -zQVZ+p6#W1W7cQReDwp-25QE)^m-L&(*I>NA9##1U@=6xoE()&dXC0>! -zGqpRyW%V0%u|?m0!n;6DJUA%PC(!u{1VT`&E8QmTE#QlFrwweFH4t6$MWY*am?(R@ -z|EMQED1j3fc(p?z@cwLT7FW=^wDO_dn4BL=E -zBR1%^SVBK=vm2^f-6vft*DJ)NOH+H0&QfE`Ai)}sD!*|f?HCYF?&tfo^duov{@aA( -z!fn}TZIyfY;ffv=trCqegp>XPT1si@wGemSE>MBVJ2o1&(@kLO;@RZ9jsk6P5Ojij -zj;sDt7XkU}p4bl;h(B+oOp9RA8l{mnHRpuL1aO8)t!^M%ZYK7Mi!54<@(qUH<_i=m -zCxEpe;d4B`wL0H+`~q4e^%_p?W>0%2zLk_|_;nZ=o>DxO4_ttZs7a>f#o{qFVn`&v -z-XMQ-s`6p43%5d>zK{4M_q$;2yV0iB6yiE<=62v^R11WnweCd!+|G2ejeZRPK!?P& -zy=10?QeH5QTWM3WRbjYU{_rW~2^jW9Th`hi{*G1k)_>6lzA9KkK5DLrGdo%MyWIOs -z>XO~@w`~+sfJ2yr!-v;HC@m9%=nM;xl~Jo=-BWnkLMY|(ZQ@J4dAx(Sfe_P_ru?=A -zX);3vc4cqLfhmb}Mg9d3!ojc*z95t=R$8+?YMy&E@3l$cyL#nBIY<&d@xGL{*@bH9 -zgg*vIblA04q~(LU((9V|3qSJSyNz^KUDxNiNOdu%&-Fe^h&*$DP*GV*?X4_7o}rGg -z|1E5*kzKdU%wLoSXgYrZOK72{gT$ExL9j(F_GcFzDH}~#X=QpBR%n(~J&J>JVkDn9 -z^1PeW)Obp)K_rqsntqEk=08N{9%>xE=wcc^RytPMs?6xB##H7xC4E(V*^;teI}mUY -zMiV7nMcSff@D{936KtDY!LUf%j1t7FPr`Gj_;=D;ZAEAzH_*t>AJPOLcv1W4^*J;j -z&%a3krcof|VN{sCZ3agXem`)S(&7zcAk-Nuse}pvSp7t(y=Mmia}5NF6 -z9-CPki`7bsCEa*3Hcs^QH@g-~6&YE68{p&D*Xb>XOyTU-d-~|7`x4@%dD14yR+N*WU)dGRQVXt=X6*$hywlEV8a9Q1lF&;uTH{2(XPn(` -za0IvjLD7P-W?Z-$;94IqknZWHQDcU!m3S+C3yK>wBw>zIA)rK336qK_b$fGqJDVvD -zzSz{s+Yc>}!~U)y{mgNVn$#3|~^(sx_>0o5!@&pI63t!V6CMZL%D325s=IT9w| -zP42Xxx9c1<%54}%75w_a^OnGAF -zXrLT*w4LK!)kG!%!g}OOMG{KKpGD5A;_YSe5I7nlXWN@8UDQ%?7&J{sI|)lSMA4Rj -z*H+0ZpQA%=6 -zE=-+AM1MPN;yiLSk1?Zxs?3GYT#n_=86{zhwwbUxZSM^9|J<`ytg{kPZ#5J|dt!KZ -zV8$@SDLt0fHKNQ2nCM^>IU%r$fk#I^U -ziA+{IQBe}yO^Q@Fs&n>7Ns58bz|MRiJkBcirK$N^AT?deaXs=7?sj{i3 -zFE1uBQ(_uZSuB!6`vG1PWO(&hRl9|G<@E>ydJ@PAFqPsa@&2xO{ubm5H*fJ9p94p9|L$!KI-P@k1c;>r&9<6OBKOO{Qwox7|e@@aWysh7r*!(!P|&DIPYY1 -zV|@e&YTCn7Tw@{2O0`p}xuC@S#pkp(R3-m{#QEvuCk47YRo>V=)Vf)83jOe{P%}QE -zNAxP^93^vEzx}xcW4a-4iYZdFfy@UWf7dmO=~bRdx4A9DK(4}FR@ua+Sxc*fDmqns -z#Y>6@Uwe_%VCHh!pE2PZ&0!72`z8jr=g-hS-7l_?5gi!ONN`Va6;H)TFYOLB-zsF0 -z7;g62qe3sGJfXjGuS!q(IME`(8aA&*ib>_pU-u;Q)WYD{r5Iu6Wmu;!Gwq3&3;D&` -zi7^CFt(EOK!)Aib`EzItr+$n`*zQ!@@g*;S4CKTSua~I8n2(#>*a*2F%qb8Urm=V9 -z%!0hAXPg!2K~#);^rbBpJdH}F-;`&eWlXZ%BU_Dw0)ku;zxj$D+f_wbM`cF#Y>Ubq -zZ9Q|!Xg*sCSc+~$3SG)|-Q6SP0P&QWF|m731QPIbsp6EOHG1DksdbHVFD6Utw^BvZ -zBAizk>O{931KRil;TK3jq@`F(g$oBP6PnFc=y3 -z%ZU{~hnCB(GXUMtHxEhE#Ys3+<5aB<-U<-{LSxvI*6LvEcp*>&B%(pKDX^??UgxbM -za~mqwn^%S9#&-qv;C@KOktM8_LE~KhwXzp_fBzWeB}Lr0_HFzeefP;57TP(2+xSNW -zv5N`14I$=FlnayU#;5!#BUNV?gBDA-4_>9%Zn64V@bz!j)Hn(L8P~txN1~T2hVz5!p+y$95$R9Kmd(OSR2dfrY?}Vwt!s%w;%^DeX9r;(5_5oz -z=K-Y|6n(dsFW49co*03Lm!mMTVG3`&M0N$nd3p|Pa3Bltu#m@cli=re>WZ$YqNy;s -z4CBDG*US#TVV3Hn^4q4i?Zxh_ki0Ea(D!joOx}S_o75@~3KDJxRLDB&QvFQJa*vFI?o!DdA=1Miu%8xPF5Ix&hn -zT~)hBe}Gliz3LiLa#o@$!JZ&X5G2sex}Yh_!ExZY3ch+*CXQnb?+E(y?HeV~b)38x -zqxI0$>~a^tdH>k{klEGwWLDN>N3kLd9REX0uGo%+(|vVg95D7sl*iIndt*Y(dKZ?H -z?N1*SsI*`I)JKool>})F=KPc@N)X1`Skhas-;#<5UN2Zzz%g;$bRy9OVq`$}9)vZr -z{ET%@y*gpYv~i)zyfki8{$^<|+~O73-7oyo4hYn-Rg3;)t&A)8pjMCdIJ*lVux3GO -zcpt#LjoTL^=CeH84>`oo6yDIVn!fN~WWJsCHFH_R3VsS-T1VKRU@`ez&byeV^z)t;(7kZ~JgNb9A -zzZ`16cYg-qMFsyJMXFh+RIB~6KEE&*7=rHhx_&r5ILV26bWbCfww{Kqv)>Oz55C0+ -z1X!J5DYGePqmn4(0p3I&cO(En>_*vEKVI-RFwy6;%6(Qx6Yd@!g&BH$>o|` -zQN}1cVM4SdfSD0<2PW3h^^HKc(bZh4o}Sw%y@TuA?|AH_uV=8*a6vGN%e9sKyrg-1n76asAZtwX!C{ -z28kt#@4R_YGyVcLLzRN5*VlwQvcB3S^AT*<&Z8ZQwbw -z9YAH$R^;6|Z%$>C23wKc-oTRGm7e~UfclT(1ZX~y0%QU$OmU2dj>UWk(q29ppTGKj -zjDP7k2;q>G*A(xvwy_P{s!=rwn?^H=0CCSf{P(rsv1xlydcbAHeWRa*(8rX^*EKQjre_6+=F?mk*tF`A`oLP#NBbtt-$Y=ND -z50Y0rF*apjlff829t~^%{516Ms_+1uw9#lKfyASpj9#J=7*n^_o0Z4)66Qi!mGdUrdJBgfvyKpEOkiwz~UqweoqD7-*J0W -zGJ8?$zkS(T^xWN()fTlwfjBkayQ_k$zutZKH>VQmqQD{i`Gs;q*~Lu*|)su6qbac7^&9&k#lRIyj|(FE;Qyg -z4KjuB+awyb8}d4#qm`rEC2XLkDBOp74DhMgphxQ=$0!*q!;lOU%J~{(^-#ob;{si; -zBwMtXLY@MK~Yf?a=d=U1$O@h^i64gEFvAbF0*0*gzY>d3$(r!LlC4VNK{hrqD{3sJAxz@k`Xo2 -zf4Vab*L=TIvW^Mnp$GsnoSgFS>-wO|C0&USd__=p!9t!j@p0iX3&K>9ybjv!pc>lS}7=>OXS -z2@sKeCjZ(UU&~>aO1`H{q!mQo;y5ppA69*f9L=O%GD=`1Hm(6$ax^fLNsB@|_(S?j -zZ9!wFB21|WpR?OH6<9Bz^@`+thTb!{MI|HmW2N?|piWCZMbZPBnHScpgkmAUthFR- -z3ffJ>r?vaQx&NkHWmPtSR4m5;PH{3ujIr_5UfEO3jCZ7ch?&a^e%dvuPj1b-;N~4P -zLZL1Tta)K~ccZ;p03vIuO(+2jA}DmU7^~XYmEfFA>6jNKQ_LPM2;jzp(@FPF75AhA(!B|m}* -z#-WJ+PyD}h?k%O8f_#mFj+SU3lc>WtbT1FYEi1?qj6+%cxVF2R=PY7P)t=VxL;~>Y -zT)9)m2Jv#?1(vjtMT!Pnhm!_{}tl6*zlatdF$EA -ziGaFbsw2{xbGRsD_bd@BxzS`)?FHK+CP%QnQtezAAE!>`)9%$DZiSi5L$lIFru(5r -z6kI=-cfO%r&Q}0dDwQoIy?*KV9P-PJ)hOOJ3BHU4x!^7o2QONt`tMc9YE2CAeHuU= -z#L3l%npK&N0mUDMce$^orY6;oId8VA62_`Y_o^a`_;SNGHEI7v0__*0I!?G7_JV!2 -z)V6(SytI9{@hL`qOmkZe(s4IwS3N8|t?=!hp$nowD{9m7`pSWGUorZF3$g!EQ=0bE -z+5aHoCti5nk#83Otf@I6^9XofV$_z{y7lGX?>Y_{wEGA^KLD`)bbIa(2NYW`hvXB>AqGbqySbURg;-(}j1X+0?M2A3>H5C98 -zyyC}Ph)Dw@-~P>GM1~NS6gE0N%rsjPy%0yhX4ZRvpInmWC{Be2Jbm=;dikuic!BlT -zeJvhmjKdwZ(Jt+8Jx)G##>|fY1q>&l(Nb)5r1-M1=W;pFzzD+!jd1L3DQb-418V8s -zF(PzOHOxoYHW6)BvJ3Ty@)p_F0Y^Q1hUZ;|5G_>Bk0L1{fd5Ff5!GoU33Ua$P9I4#pfuvjdOxXqAW1TBlrwT*&9G-5mGGVPvA2>YZ6yadqC`O%YV+8u%YWcyx9pes&H -zPisbP4UA;yDq^sumD_Y!9GR%R4v&V=f#% -zeaF(1HOE{-xAK)?kO#P649mb?4>?;ckm2`VK*VjMTeAK-J({9&ZW?VEO){!u?X;_0 -zme6<>UJkZ>GKzP=t#Jw;I8*(r2FI36>+zK?X>KOFyQMa4wR8dBnCHfFo&On-%w!VI -ztx=viO0dN5CSC-zuII}`tmgf_XMnq<8=#(LNuFF9`DFD)*0u3L4$Owy5Q6QhmFpv3}Ap2 -zEMvX(*EFKYSb!U8BYqRV+N)ZtVxp`%JUT(mstw1K)&ij&#qzjP -zFt%2b9Zi}}CZ!yyQIlf*&a}mGAU-g;Q!PF1F`#HjX+Esumlpu(Fh&V#=>XSC47kR>Ma9n{q-(?JY^eUIeuChibwgr!bEf&K{oc -zlhpM8njn$yF-OwaCDxynkuO*-jV}ERslm5)>-w|Xz|)%js`8oqnQ^%Twz1iLDDA|} -zXY;&i7VDAM%(qYCK@|1=^~FJPxH$(b(OItX6s9o76G*&}5QT -zXje85NCAiF==yp2_1++ZFaAw5vvKc19ZLz-_!S=);b8XTv`~4lCHq^49EE=}vxIob -ziTYM(#6Ci3`OTgG5;s-TEkA?MhOEcY@wzxM2J -z@LYl1ccC)1n8fB1FA4xNA)S##ximFrY3-g*L+2utP)D4%B -zYMRlRS4lF7M@7Ql8{{Bsh$A2re7DF~9R*M@TXd -z)xMl3PPsjAHl1r$QRMAeRtd!dy}aV;@D$4abA6rf;S9Yo$IiJX(c{Y29i< -zZOHY%_Sv@sFXDVei>YWLeVxrvjXv?F0D+aqFL!aOE;nD>-T#&0 -zkDM-{%9gnnUofX~9rWXIqAXhKb_(ciQ1X%ePdJ{8_M}WIbp|sV-lR$dSL>rr{Nwa? -zto-&hE7Jn2UVamO))51)WX02Um58)3(>0o9o)dj=;+$hZEu(_CCcBTe-n?lc=DsO? -z8~a6o;o`O1FVXLIS?at~33Ix?RVzrbc=hT7cc-lXxfe#d7S*C=8jI|=Bk;)w#w2$MdpsqB@9rpu*aJM01(NfebGd*4v%f` -z*YXz*thh{1;mj~5{!++M+-LrKKPKxeEXRzE!^tMIA% -zmqKl@Ur5nWm;L*YBrojgk!;I49NwMu<=Ou}K1-H!#NgFF$}Hh$8X=9IZxstdVEj(X -z(hlT1OOC(5VSO!_ORnm3Jo3YmRCG+BGb3JR1imYB0 -zG~frkNbzhR5fS9AHmphycf!PZrRba)_8X3_Ep=ZkAe>kgU==y-`L-D -zPKn_W0lU%+hd`vAN8#2PAjzCue6#=sJCk2`gOJ`maV7hxZs;C_SRIn+Q`PJSHBW2a -z_n#8x2%La`4dS(kK>>J=l5S~@Ir!%NNWIbt_gnmXc%R8>=ThTZ{vq-~cvYy=-c6yG -zW`8hn0o(NStDl2CyRuz50N!FxGOd-O50&QS2u}!b8=48dgUulK&ses*%5eQ){Cn~z -zu)j?{eHcBw|`ZRm@N^+^qYcAv*4-CHurKd-g0y3FS{_0%Ilhi%22a|c8K}+QlFDau;O%8 -z-{{?5@yL}@iz3V+oQ)qgB|pLKWY6l3Lt?IqlQL`2i3eMb!*<$Cf%ir6``!{g;&Rv?V=?CjO -zb-`}!3G=0CQ^>icODDk_v0TD)QWoX>A0WrlnK7_W2jtcyrHr;IUjb#oi%+otFzbiQ -z7y@F0m#$ZPl}BjW8Z%AtZSuj+YELq|ft6_l1E_q&WH9kbAq?-?TGWN{NSRHuO%RV+ -zl+a(f??jg(5jg6>9NbK={Z&0Q|2mVB;xC8G*O4EpCYv%0A+6E8@$t3QBfto{xAK?X -z$t(2Ym*x8LHA5DoIy>J=4wZu13?2oFkz`Qo -z=C-hI)lt<}zjw43@_m`h!kgsbnAw;GT;t9vUZ0l#sLz2fT?kG2F))F6*rF|1wr(yL -zf?XbAKa|O3jBL2~*S(f6&g^vkr*&n$9BwlSO8A3)3BBgg%g1ONFgswVlhLUZ-s!KJhWFb}48kh$$QG}B -zW(iFJy0HEs*}JSu;-nilV8F7;)Iux2yNbZI(RkkjS2Z5XV<7H50xNLRuHDpo@w7+8 -zoJ(qEZlM;)*c`lqXRu -z^)YI`B6;Es#voR)BRtc3RE6I)#%&A-kOmKl?(d`dC}S1#l0C4aZ4WX(_NDGBxCV;^ -zC0CpdemeunnQ(vp&?Hanb;00B{lfYk{LQxJPKZ_{d#a*y_VV(qpKF@3^^kreEa4_O -z)zCJ5OD5#mkd1JRb}_BOD6BurUJ6 -zD{`#>s+jTCA&+f$tZuSsqkRZ=a4L@8r3G6*g+IamOd0vk2*N_><9HbMLp(jEl)G|u -z@DKDd=+%lrpGA09uI#VfNIsJeW^i-);<~iF%8TPiA4`N_6?p3J?N6+iE*ekI->HLQ -z@Ixd#d;i0B@f)$6B>Z0yq88@L0Rg$x(1FWozBG;*Thi_o8{2^dV@BnnrLkqbqvXrK -zC16vU4Q#+2Ya1?|-XZrt@gb(5#=uQ5f@y)zR*y@vQSLT7VNFH3Y#zc4*p&}*Put2k -zD0;tQT(2GCN4XIh@ -zpG1Z|Z;M!uT5gU|hfJc^m^X+4G3*S3a?+udBNFP5Fd#M`j*c;meBF~qnEWgs8m0YG -z_y^_e?8Nz(B^zlnSxMZnc6`5 -ztUysr;=Y2)x=i+gy1A%q(E|l&qiZ-~P=0qD&>f8uc@d($+|x>uOOFs6vjt7K18fv& -zso&AKgSLa(2$pG87KG~B^fED`|K9*j&dIdy>Vm{rybF(t+QlrytxDbHYMUaYco266 -zzhpX^Pu?ON6VC(a-IV%Gzk{Of7V3h2Tcn9!B|97Zqf|JbZx`%s~YC{98)oI0b0wl6mg(pyPz8R+pHQ$ -zSU)y@TF{K`I9W+hu4oMSvwqIFhzP*`^`3Y!76O=xxFPtJnvcNpR|oO>Q^*fMqYpx1 -zQ?pbF4HcZG@ClI{i-I9bDmAi8t*z07FXnNu`+lkLq8nO2>6olQdJ=L*T7Y<+r9ac354LFM{Q5Fl&~Y-%JumSq$KNQM%C9{KM%Fl=jR(jh+f*;F^B -zn~bGS)VqOAk;tj?q~fEw)SuyP(iN23sfda%bm#{6#y4)Tysk6f)U)fzBVGrZOz5El -zen>O}!y+g^E~1L~Rp8_ObA#DQy>#~-@Bh}&NUy=t%u%4R3}@^>o8-5GHGs744rlTO -z(*?tgtQ|$-5U_SmJ&hL0tV8q;#TJn+tf}Wx%=x0v4G3q>dRU(K+UKBG+qHsRH-DFFR1 -z&r`KjH4@ajMIDG(U?BkWYl6R!&!lkhM@R%wfZzQ3SEIxge0yr-&~uV%pKM$Ei+OBHZxv*!>88RIIPj{RCyhu7Iv21+Lkk}**Sz>SEN*!x- -zF9i!Ji(#5+`$!N7M@_RZf*kt+6&FY8QpDt_zyAl8gOu+iL^xRgJ)}`FPO+p{hyNH$ -zlY7uw8A4k@XyV_(hMXNnr3=!s^&Q%=6TaW-1fGMgL6Bv~T$|{+nt_`AZ};PfHJoO@ -zyD8RZVW^JfEcSsOf-~LLf>)+|qbPiIVUP6qDgsW)1rpjWk6jHkqxSIt8DGe+DS4A(L=f&B12LrTSDYlAYNabpMXus)(OJos_LN_$ -zx~?8}jnkuwdM5mD52U5vSVBjDU3BR&mq9tWpDR799%c#CGLv}7f}Jv2!C -ziRF)x#FEd-v&1=qX^irmd4O$MHMt85%ALk@yJo~%orCt&x=T}fD53k6Ew;I9|4)R^ -zz(0{3PLljv@A>61*`2L*;e7j^4VqZV63Z{*5`G`(^maEmQ_cBZ5+-e!Bxd6Ue%yUgUG?H(B%9Fr$ehcok5J4UhyE#C|)I -z&S|65{B{}cLQIr+#ey&;50Xlw^?5KWSe%JdCHvO8eR^%4UO_^?I{yTJsEZNB-@t(e -z>kT)r)T%W(lIl7ae(($w(;fR$$)|*n8PxlZpf;a9gKc8|V_nW$Hp6Jj?XOKqo+9d} -zm8oYr_ukO!>RzZ*N3I#sVpT(-OxunFkDHuB0KpBJ9|V5mfsl{8fIv}hdl0tfyxkuy -z0qgxCOHwqKEpL&?h6j>h6#z67fne_@#}c#IkS^VS?@%Q@hcj1b`C1l#pcSznhmisO -zZG{bu-mYqSbE>Vs;GA%%%L(0Tp0DRdqYW5EQ%_kx{3)k*5SS$LBmG?9?zBtspVu4) -zMPqX2h*VgG;B*FiSl*lEUS`}DRDhk{JnNv+^ItqiK@2B?v5aW@NQdwb|1r{QbrR-96qwgd?g{w=BX$O>|7LW-u|=qiXd7uCeh~V8 -ztmLDMn|}%ZM9?BE8JWMHojUVhh{7DBoI59&Xj0&KVFVp@?H}Uj8MIaEM6D!dB_8(P -z9XZiU8+thD{KQV@C%#TtAE5p!vjT51>3ThHpEYkVUn{g|5dP_U9{SK#MyB*2$L_(b -zsb8NIsl*~Q9h>U|6H7* -z6R0Vvwu6HH&uYUh1~cX>cslDvx;|EdjJvj0ZK2ex>*m_r7(N~5K7=-@x*_NtZzdvU -z=G^AR!&J+hvp@3Y-8mB)#MbL`Qb5Z!7jM9h#dd3A!2Y -z*rWDAbjQ3%OvAi8lUWg$SLcV}b|b$62FmeKwzP|fgBr73EzFZiZ9DYs2rGQHNDmV{ -z2JAz!4upOsFrD(?hZqGgZ(sY4R8#+VeaoLmjo2}KE9CRme2Mea_3{WwD7YyAqp5?J -zjHBib#e#=z+bEyOn8L~23&h*SaEG&>#B_PZ+`qOm7u`PdiQXvCI=^yNzUN|5A%m5c -zbXX@kxAJF|#GHXHPUdlB;Aj9U{)tqHWDzV>;l&Lpa-|!xJZX%!qp?@72QQrf-7q%B -z6x0!#sW&Y1foc3RG;!@)LA-m0P^+%=W3GsP++q;A=O3UAf=~L(ycy5dq66AdViVS{CE=LUYnwG*)huYi#MWY<4Z%htb)5^KJ)j1_r>2FnQ2NF3+Oxcjo%h?ng}GA*?Jte -zEDm|!C_XUf~R@xuBnr~VcP5PAlGb6j*GO7=N2C?$Lh0EERyW>tx{(YFUTB(YSFh58Y(v$( -z+FrXu;>I$GLZ@DhyYi{!!n}VpkObDmda?gR5_A;c?4`BQXb%yitJyK2{pX;=jcROP -zOKBZDrUdSX8Qa+L>If0<)7`V@Ox7mj`Hm^DTj{t;7ayhJh1SIw^W6;;LXXjig}X=& -zgD2dQynAV%?RS}qcHgo283<6koqSaPqv%Z)L1>&32v5-U`Na>EBrIA|iuU>Rvf(VC%xk9MQYmW2ry$ -zdBhe#tWP#bdR6}x&sP9_As*Dn9wc?;`fV}1{;^UKQ-{`v9pgluef=6K)b1x3hWq~ -z*7=`2rx5>_lmRrZ4hS^X{nL<4zl8)2&wPqmX8qz*ns!Bc`A9XPI76F3`NqiY>xo68 -zvps48LmPo9fK!e5>c<1y|BI|6%^+`qJ_h3Rn~MU9642T{wRe|%(WIfO9cm+@zqSF+ -zMeDX&)vgJdu!TeFtFyj;vo^4hEmv!zsKOx_0XC~A?)XH@P~xD(pwwdm(>7q^jO@1| -zixYgc{q3oi7CE1F_e5R#3VkXA<_*JOMmbO!B9n0$3vCPoAOMnU;#wV*lGqnlqQ{4n -zX3xMNCX85cLj+ywVi-9nh|eFFBPG}O2Cw)Xw7k%O|LBWI@bJtzSDGpT&EI)P!eU`KI -zvH<=6ea_}%;>95M?y0WR)*4Lt4r-SBkF~bO*P|(~Jq3#?tCQ8llmZAXe+I(Urzxny -z5lF>`@GSV%u;=mDgb)DmQDCoKIq;$rU -zlT&!|vYQvV6YXvm=5hwQOL?2N1R5YnO%K&$bZz?Pz -z(|M}6aEk*R#%C0BO#wO>=l4YU%#dS57=$Oqfa^i~p`hw~>r^%dpprhSjlOBDAcBYB -zdjeY6*Yx+DKhu5FW#|xPn0aczKydH!u(0s?_b_?Gp2ymg714$EnHoKik0MWhZ0)Mn) -zToj$3ZPK+%J-EyMtc=M-k2FhcV*}vy&_c1s?Twxic~$%8ZHlZ`+$@%`@-o#8?HE{e -zeIS3oh3*`$Us3f?)e%&4srgN;%zIyJgbN#2IK&J#@+N=AA1}YDY>xev1`?`xq9ZH9MqzvERkO -zP?8AD>m(cp%-Vb9?QzlM0h^#lCqSN^^8E?SWM9u!%IpDVd^_!?NDXVaxqa`@(6aFx -zSF&b-FTUZm -zQ@Ccez0a~*X%QE{28Y7g%I)&9(^^~=;Zz-0R-KW{V-UQ6W|1%AxQkqP1%J^!xd1Z- -z(d`PBS8DmkDoh-Tf2C-+JWcl#J{kjQRE6}w-Hz+5Ghd*qDx#byxp2J*E5X>IOaY#I -zT3d1-(1bwL%#q&`In%9eNFJsIbe1w(ujm{ld#GpESi+iEBo5Z#s|L{BFn43pycAia -z5KA9&nhd*rGMHDWhyKu#20h*Y~zFN@)(vZT%KU@f5sNv}bKnF7D0@us8(?dpw=qHMn -zx2xa!CJJ8{DzrE@4n*urY78^3?vbySU+hcGg3o69f=oK95tPy^IQUT{pN*E0-?1j> -zhAL&k_J$g*qs7R7D)eg3O+h3Y)_Z@C+<2M^O87zhdoJoGoh>G{I|*<8V)2By;{qf& -z1AQ5lT<}2pWjA9q9X2WPp}NDmV~J%H)33gM_?my0-!y4j7sv|nTjw5N%! -z%mLHGx)gpSCx`_cW?}Id2&4@g3V_Z``ky9h%h8ZTOc@Fp0y9 -zqz^c#f>bRRoh(%2#uH+rsrq{6qOS>61{d(OCMGZK6@R(ecAqP#FqogaeEeLLBcbnY -zb*6%VU#z!?#NQxnc}ff@m`LSLJVFED<)1VPHTftL$8=h%sQ -z9dfBP%euxT#yfJRby~JG`mThOkchop*&@c{|2}NRNt4y8)OuyW$Vl3Pz^B(P2sXF* -zM7ChOn5y0 -zAr`IzM4em1g!8AC?tI0Wsnw1RX@(4Notg6^z$vgLt8nR2kZ6k*!`$958BR -zFR)T67xY>`TyVy?r->|QAXcrt&CZaN8V`(7!N -zrb1{6E!bh$BsyzG4U+{&MhaEI*t$y;U?pY@1mUYl -z`sc{W+KO3eiPl1S2jlO~rr7*kRCcFS9wGGixb{|)jE4@&uYQ(1y5nST1-BZ -zzv@JOdCFqXysD;3Pf@Kx-y$&{pS$_(s%ICR$<3r;;Y!%3;!U~`+CrfmgB{QC5>7y^ -z>AZq>mk`X*AIwK~){l}+IrM@UK<#c_cAeC-C>y?7?J`6QUe<;y<8;u5S_(66af!O@ -zgz9f=K$9XSQ9@O{3jEMp)Ww!I!%DGa>zp3CqbaXg4AiQ62q+cKP&14bQ{#;O0JI$R -zKVure;_OGjW~uj$p@uyqHk^Nk-x4&_c%sreTm@_JC4W70ZyMuc?Q2uN9pFJ)>cxoz -zW!Lmm1Nl}-GufT4zSXzK;C{;F*b#E+B8<()udcE5TWlUo6@|?|n)QDF@Qr;|d-DC~ -zaWSoriz7sB0!R|WvQpg|{nD3CZUXK^I@VWV8EF6U`7WwC0lO+{DiQ6e0_KWE$3ZlP -zJkI4~*ktO|G!Fq`Pz!xH+EBz()m-Iu=IU^c=~q~TZ>?2qUb)(+TU -zoq+>3;|ulLlg9!s6}!qYC05-8^}ptt{K*myz#2{~f}w)6qMLrmB~lChf_mdoi)r)N -z1Uv*FHe1p{_^BIj+57A*F|E=6%kqNL#)s>+DI&)+p`#7kT*Q!`#Hw4#;E7rEDuHbp -z&71^|2HUFZ!Z!6dce<9ZX=r)X3cfYsuwPNK!26jZK2Yc*Y+aU1WA{Fx2pQAgiCgF- -z>{0qyCXRuEukjz^HjK1R$ank;_`?SA^~KkT(gJ&ws@lJR>APH#@3-2awzU&BYLWfw -z+k3a8*f=1tS1bW&Lf$Rcb_;tkmI1<$sN|zbm9V5UuR6Z>^mj2V2xQ401OI&1aAt7! -zuCJWp-`O<0`Ag!&$$mEF5Dm_`NG1<7&JjSL%;@#cu}QZ^NpJ+VmJ*Sd)3DtnCa#2? -zRx5zmZ~8X3(MT=g7nLHQQ#La}QC2RF0+A`QcGv0j{0gVtr&-W|qGo)K(AaABhD;*! -z_SGQU9ux@zE5Mi~(8||Ucub%)55FDr;&0)i#qu;&X -zv%!KA#K1e*{9I5%#4{Gst!^^ -zs{Y&F@`uS&;W-eW5nN0vAOl`)omV4T*%8B8G|(;A?PCJ3&^d@b8x!xt-%OOCZ{eq; -zx~44`J>*<^KSd2{I<2(MPnc}q>GA7fFpMbl8SyAD&2DEE^v;4%Mjl|PawNm*WXsTA -zGp{W2S2l!*d?*(z4AWfD@Z2MAL1tWK48{Rd&@TL)bM=I>BY(lLm -z%2XqL+q*tLyX;I5(*zS7MzjLqY(#36wuvD2QvL+6D9bR*v>m^Y3+!%+NGI#~V$L4s -zWHbV^s?enr{kl4C+*SryXOX)_G#S2&c9^HNrb2OAA+!YmG3w$wxBtaF89~EwKKyKw -ze(Y(yZmqJhMCjrN@HNJZLBpX{5Apz$$u5<7^p@hj@UIDY4yK|a<0lOE_jzcTSD -zoQ-TL)>}f;BtpdiApUdhv6X7B<|6K*n(`9^x5E6 -z3OU?-l9Pr4e4HaGu42}PZ#KsAH?H6jdf~#aUjxpn>{!&P&(hj2*`rD$o4WW}&khB; -z?|h6cT}1u2nISbx#U7N0&dR|Q(qnc?xCvBa2y7y2kLUu6uJapH44#vt9awIm=IA+0 -zv}JeHRM{~Rjx4)N@eCt8qJrHKx;*MD7vE@9BUX{(fxY{*l4U?N?i5t$7FQ_;-xjOv -zH}=?ct1%LQ0XqYWEN-=&W?lv20Sr(Ky55J_>Z94(-)Uw+6n>`uK__HJVbT%1ht2uS -zn?5snItW4GYy3@YxZXbW$yQgGd!=LbOpI=M3it|MwuH7U5$Z>y9Y; -z=nJB#MP-G-QDc}X77dg$IJN}N<|rD!w|3+&*$M?fx7Z|}kcx=30Tk{rL)<ct! -z44DpvLiv`YA7J=6BFJe#KMf`Kase++;iw68s48&Q^l1O9uYLLuJ9=rasD)%^PoD3N -zj}EqnB83wL3Mp1NYAb`Lee?$JXJL;p5;LK(-L|O(SH;=>P--Sjdr-u|D0h)`br)sl7lLu -z_riE#I#J}INx?RMYO3<3N!8xcE>I+nwReUdW@ -zDR@4aRudQr@uh(u%-OCbMKM5jQ!V?uY{O74-lNs)FZC{8Nea-q!vTh}tfm2`BZQMl -zXri(48A%#WUMfDp6vr|Hb?~5aThgon2(rt8ydz!ot2#2e3=%%xO4NMi>V(*e&y8WO -zAQ-&nmb5q@IZ~Lnt%#mQuU$J2+nkdpi$kb -z0$SYv-!7}=I`N-RHaUKenZs0aN%#t;4`?wH+Fg_E_sSS^vtQj=sOH1ip -zchVI_c@SGsmlf>&MhKU$+nGyFPBynwyE#A)2N6Kj#Kt5>nUllIp;bKXTt1o=%v -z7dxxt;KUE&WIy{>9j`D?`q7*d*q9(-DtA;@LOU#dAjXI5F8Yuje0pMS&fp=(7gUZX#9mqb-I`%@^N-`{{Z+SJ2Qo{0ZfrB~M~7$Y+s!u9uw -z?sJ)M^|KH`SI43RgGDaP$R5kZ^&dEcfIkfIq_m2hUfsB(Z}3KAti;By>{-L1vd~C$ -zXMONe+!E7?_&-dhHg|63)HxEp;~!EkFtFW7Pd4bp6SHNh3AP}g{60+oP!MPOJSDWu -ze+^A(`(?_i3aMGMsaQ}ybUhRlo%l{A=I24-b#|P;tQy<44Afgxpv*n9pxJt-HIFek -zIE(T~Rn&A}>JQ&U4Kt4O9$ro&mAQO9m}$?Wjh{%me;9s@AKe>Pj@HZXD4}gp4szDv|p|bf9Jjx)-Owj~tCC05{fx3G4 -zJROLf6tVw)wFK;58SPevfx`SxUg6IC8YfbfqtNsnKE{(hk!r%pfeyGSgbf$0aof3n -z)WKzyXocRArs@nq`V?%I)TwAkAZLXQ#@|~JXL|zi$Sf0Ey@Uz7#%t()flA -zb{djkX3juCPZJSY8|?KHm4=lQn2IvF!@UKx13U7QN=YWsd;MV{AEd=^I -z^hM$%trwXngQsqM#V0lul%0fBS`?VbSWSyTKS=A2hv5tv-kWAjbs^^7{V0Ba9CqMZ -zLO*B5Nep_KVj8-2y6#zhK56N_SrLu01oFR7g7TvPxe5!`w3~a^cX@)@B8junwb12) -zJ_0K|-iOgqn`Ir2s`7L){xbv+yZU}mK7vJPa9S|VxU&!h^OBW188Hv(Ml;UbQyg_2 -zl!M;-y6wMZcH7>KE$``iC2E#WfH2<~zh5oDK9@Y$>g^m!q%sGq(TG3#0-zcj)ZE`y -z1cjUaLzbDQ$zLM$_pxw*XV_FEcatoWY!t*RV9uQZz54Zj{v4Ch@Zj_vz0cW4`W-dm -zjkF~q{FZa6^0H3YH09L6Evxs{>U3T{#XTx|B26pN)uS_nL?n7#ZC%_c->ol_jx7Iz -z_xBBu=JjtAHsX?7yERez=#lPI5+!t?_)=r=Vl2%-vJwFd#~khcFQK#p?2^2mi`*!D -z6-#&I5r!`G<5phRe^a0?3xjj547@hV6rJDl7~3mkHWRy~-d3NCKst`IW{a{-w1ZXA -zE;bgCkCawhIa~IVq>UG{WbF;GF_5^Nt$c*EJNf9Pp9Pixrq_I1zWi-0`=txq4btZbrfnmc+YR4llQ%3T! -z)69-lXVF|sLMje350al}`>1$IgQ#)$SK%kZe^CH4Eveb_+yMJMF)-vY+RqbU=qa{` -zE(FiDyqkZP4zC3G{%xDFW!~oTp2kkYKW# -zRIyi5t9lT#V>sPX-y@)ebd(BJDm}*^IP{s24bSAYghHhUTrN=dGcDxNA4dpYR?xuM -z)QK;Mdst)8F6J^~>UrqvMLBsmok#S4)xPB&Z99^=#j{a?5Rb_PY&y8u_Q}j`a9nQ2AER(>z*Yz%OB{t0L%0paDZ0zlfROk4z249$?Q+B}v!*nl0O^ -zblbu!6@1^MSpUK(o5DJ8BFgVJ9X!d$|;-0(wr9 -z=NpJ9-A4jyh=gUcEqaiI^4~_fx?mH-i%R4M3I;G1Ei%Evs+L^XWQ}qtYj7L@@Uke& -zq#ykxotKz@mkv#C6VIAoKXK<%A!+zv1Fco`0N4JjuAK=hMDKES;x=Jih;h*9Kv<>< -z>4KOvi6Cd&V$zzFrIF6s&zrq -zfhhFn6;0?|!TkdY4iv=QZw*ZIyPRH6*YplBEXRv-5GXEtiEf=Q{*&n=a53v}oZRG0;8K?ESoKuDXDLvg3gSDO$s{&MPqwG!5K -zhsH_ID$U_@c>^rXsk4<_EvWpjP5&uOkn)Y0*jnPFtw80I<;n7Lwo&qe!M$=y4v-rF}$)k@!;RgqlqcA3;S&k1!mevBV8Q)P4Y(ARmaAR%4HrU9O -z8V>*Luw@`BLsW0ZsQ~Z|S9Z7!0Ajn}4GF>J*s;I9|s)cHvTC}IZ9nbT+R#O-DPAXzUBlrk+Io?beZCoJ*s=YSW%#B6+$ZQp-=);(n+kf&$ESK3Ve#p`=s+vfM^`u4!bJ^?_R& -z8xI?hvrE~doqyk}P>D%?Pyo28t&C+lWR$Aj4I&f4-Y-%*LHB!k4O<*|tf?Tea{RM9 -zb5`gUbR2mA&Dtffp$|Rttb=jJKTN?u;aA=Ph9UF8clVqnkg$PKV#Kk~)Fi&+6lJD8 -z1N$r`=ySvY#{t%!;Z<6=v*S{kuG+Lfd?u?-FZ4eaaj()*@FG^;u}JM+eVzJwPVWES -z>`V^Js7VMS_`^qcG9bXHS}KMqU+)M(sLBMQzL -zTY0oShyklO2V%DSmP?4sDC8?PrHn{s0COMpp?r>uX(E?{i6kuZgQ3}+AE>KTqW>_q -z!@ordhUTv5z#R;g(nSXLqoJ?|cm^=TmCxV^tD>}d*A{UMk2C3T4J>0!mZIuA>_6Bm -zCCIE3fX~-UfLA|L^{@Y%uFNRwK@v=#PY%4}Ck1Zr(Dw2^XDIxx3$K>DYirN02ynI| -zLYn}Fw>Ud6<;lbT5P3~V2m5S;wmlzdQ}}C@U-@w)=<+?ZWESyI4Q-ul&bUdk_9cE}&oq%OJvAGs}CEmn*w?jPUA8~_$i{%;}{Vzfyk@S2!IG^9$A -zUvICaoNhMfIT_B1!i>H>w^)cMtcN-3eUmHsu0>hm_8x3=ez%faS{Z1pdwOgR&ByT@ -z)zZ9Z4P@1QAn$&`*g})uRzcn_?;$=Bvg$6!BDMGbEQ%uC#@_jqv!xT9sV#vIwaFdF -zavCRSC3%=w=9t*;BAfmkRzl^e99jI}2xo4@hy%pSe=>#33PdCx#hWbl%Y79tex?x5 -zP4LOoL9^BxApf~X?jdwyhlg+_2s3w2bca!^Q(0p64#1I*c@_~A!78aPje*$OD!jZ& -z2qbJXzxMI}b9BlGLuh6|gB^GeCNFVS=bdx2_tIX`#b& -z4$9u0o`t(H5>gNKe^S!YUGYGjP!=*1LwtU5Uqm>E@Y~rq(3~hqe2ff0X?uK7NPl2h -zbF;>J#*5>7VBkdIw-=kml9v!k%9^5bE^waEQ-{^Y$`&q|jM;B(sH1^Iesy(v)+tTO -z9|e~iWNd4qX~!b`LGKi?h{_6jSe1lRs{m=cX%>xR9WbpbF;++{(lmvHAFpf&oC@oj -z)pz0!ND-LvmDW-B5fc5O`l)3bSkJ?4*nbH)^AG{`K%oBBNw_60k$`{X-+(=yf8bhG -z$gi|bE$8+@tSIMC$c#YpeaZ^ST823i_yQf+4_#tNBYLPzYU(vT5<`r}xe&)m@^(nh -zuyl%I_n`;0Ww-@B}C+_n$< -zNtN!A_{sW0i@6wws)uK+ChcwU;JOLI(1H5-AhQ9)^8?wNRez*m0AwLnAw0;ZDfLdY485ntM+ -zwnc8a+R7##yA^D*n6Jk+i=k$%0p%cRDa01mPu1A*hEkIEj_|yVn2~n5u)>y(HlrlM -z;4`-V9`sJW`bh3L_$c+=Xf`S1YD^7^#Dh)ZU3$a{Ch3L0O`LrEW;gy9M5p$ExXkkq -zkFBzk_#W`6wJ<<2x~)YgsqabD^n8skrL6QVJH&BJVSXz#Q>*WXbcS6!1l!A}kUgd+ -zbH5LcJrhXS!O*9|;51~T%9_^UAK>*>N6gn3c$TU($BB5T+4c+>K()HOj^`$s&@qh_ -zo*T9%l!{t^(QFN@3JIYi{05NEu{_KA$N!<)JdYOqQVovh!8&#pXate4a~k7EQf`N~ -z)r3g*oWwENMz=$K_AVTOW*fR`T@@f*8{`4jZXaC4pm|%#jw_+9J{}r4@syBVeFmKC -z&xKT>^1z9ZZTrCU2Nzd#$css!0M9b#t4EoIq5w>VjkaqNSpTw3?O6@J&6HYcB=zJx -z7u(XyWyu`Z;e{fFij{i!HSHL)%Cbus5CKE#$b&<9j4Kb{hT_wRQ_U_dh9z0ocr7H4 -zU|<^@Njrq^+&!Q~!t~(9)MlhuT#}RmZOLvYa0xGJhbHk@lPu#1yZ}VHfc`2Fq*r=1 -zNVzAY@fd`(72ZQN>fi~$@kbC=s+mhbp2j`X5hdHcVat@Tw$bV@98(M4F{e_NU7OZL -zs203;d=Pa1jt+o^w41&ChEf~!L6y3075jBE0be`wuOR9_2%4tA8XJ*gz=CVrc95SD -z@Bak4kk^5CphLZM$z*~_V`KO!#7Zd{1`9~=m1N=J!!cD<|EQ3kb~o%EbqEheG`M=t -z_*ig~gdinZ*ixK_mYE?K(?WA#Z1*t&OkUj}#EfrdZryZ!zOP!F@iTQ_iH;kOO-x!~ -z_*e0NaYY)f*GPH=5J3i(M&U=z$MPjzYp>`83^U@LDAV(cuxzT0v-Jt*8(59V^tD=H -zS4XWX4Ul?SePeLn;WX|$u0^HULj#pwPv#%UvIB1Q41AoN7o|tKgset4P6u -z<{z!iA+3%p#BP4GE_~j1M8|XFi{dtnGga0(0I~_r5Y4VcMd%W -zR4ES_^(_X61kbD85p1Yp^JAe~@EhXtvf3As1wRjN{;vFNLcJ^#>-<##z*BIh`kfTz -z?biUBprEYV2Ns1vS^pV^Wq6)>UnKyU7GU2uQUwqmSPaUdxP4{j^Ki@CgLBmO^|OfX -zdOZP++?B36CdKmP5Ac-SW@BX((z#{?L9B~BHk`*Irccx1n1<;&Y>{(y;ZJ{T18dCj -zNGVeju&PMX^Qn#7E5?}S>kk?;Z1JkPX5r|+;)h=3_25VJlg4rw2H5t9GGY(ba*=*T -zJ%7Dd>1{N*i@EHu;zHn>B#of?CBcC_k4!q*I-`*m=6~r$rA%UqH)_*ZjEfD;d$d`Z -zKmRL5OOi6l&>kOngZ&48EF!JQZAcc%?&i2^F;V&9OTyLL*w2GB08RpxW<8UVW4Z?V -z$xR;t{W=$Hv{QE*o$1HL$xQY}dXpU%-GQ-yRTvc_?=C2EYomtzZXsbBtNcu^G~+%* -zY6vUZBTm9i1Vlvc#?J`QnHuCML{ -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 -z;rA01ED93qgx^Zw+u -zc~cn-`z{q|l2g_RVnRXo3BrnR>vC*suIVjswe^!sy5r4=`0#=T5!#Ek8GWDP9c;&E?cq+&ZQYR -zgGYoQX|TroR_AH9@YLS_N=)Rx+>6o-1@=9X*A5RZ{jl~dYo4@cp7**6z-9|1F*xz_ -z<+B@_5xox}82nT8y3y@0 -z4(6vmM$Rqt?F#wds;IirKF}jp=ntpfxYnnD(MGpz9j~S)fX3DG|*d3Dhhw2a&;2`$6i2dMzu -zB|Bc-SEqEzQV#2Kq{(F&3#Ql&3;5YWFw%)u*(^rQWW#kwS9vX4sGoa{o!ZJPK!p^e -zn)z`BhqIEHs^F&f=PpPC8UI1}OWo)%+Jw43@~`i6M~Y#rX(pBTyOH3-hjZq31!K=| -z*)Pj#0Pak&t_wc((oVpMJr$7AwAMbm_A(|cZeQBiQMcoNOH1^!s!vn>oH=7iFJ~I& -z_T*xUMUbczCl$0DZQYiS`8&Jh|9eSEc1&hG#B#}K%`535E<|xj-Pv_-+yi4zfc*&9 -zWapY;dzC{>jUcFc&y$0yX!P8hr@84zUs1~)P@M~+Y<)qs?}lyG*ga8D2Q$GISE5Qt -zgWAMX&-+Uhd~F0F5Qk=7qy(I0;c_Zl-bfZg&Yf!*KUaez;=VIVe_Bcdy=k -zTM^5jaA(bETT%Xq6knpCG6>H6k6zpWlVHYacAt-neiBZ7p$b8LB`&?{)CT^4c~%ttdSv -z-ps{Mm<5-HdV)tSFCY`x-6gfKsF!JUezQs*Xuvnu6B4L03>l2oI1ULNd9&Z&8RKuW -zMFyr~f}*CYytaM9HkciMLiTkYPD<1-MmacTaIZN*`DC#%HaAqsCVsd#ez+X9f{8Yj -z5AwA^IO}tG%pM)}5%Qk;PJx7RpE;ah(-ub{EYBzm#g%MSHK%S5mC7wd6Nzr=()h$h -z&5tV#Nrk>^)k;D^t%qWZ1RU2HURd^+;wv;OOqUSgbxts0EN -zN_IH1*!#ab#X%3A5Y&d{5i#DI)K@vpo0hqO6ZJ%&AAYmr3R?Uv?PsU8dGoIm9m?XA -zZqayC)~EwvRz-D{F1CxtT6WnYeYD_OqR||G^6P^#id|0+YAwI#OPC%|Tcai$J -z#^v*;+zbW0ZME;m9o?e;*{STGf&KwzQVA^}pmTsPyYAp(20=#$Uo!{7qq&6JH}u!e -z`}!dkuR`Khn-rn{^;u~{=~vVE^k5qiZNaR}g<_$qr22cM{OkVFs#IsL@zhFvogd&( -z0cq~lIoPq8>=`lXV{NQ*QDgK5lhyBd#)+~n3_`aOtueG;*up~KG{iCoA&Pj_v=R(N -z2WZ=-EhTTgFSBq=IV=VLEZ^M-4V;{kW`wWbmsgi$Y!-;ib&s_J(Yh{Et<)msemt=U -z$5w+f_j_#>b`Wa|?Ky8Oj?q#`owBrYNK7$B*HKAj1Zo|j0>s`_lp|=>NPcTvaGdhy -zC3{7T9IBP=h031+9_E!ajPN7w;NQQD({}W;|4RrD?gc2Gh!1f% -zJI}eU>!YsTO&~id;A=r>ypf>$XnA>DmstxSzAJ2KKxzt5L-iKAAWP@kl@RB_z^UZ8 -z67FayZ2cOz{Q#F+U}WIz^;80Z*Sfp1t+A1fvuF;+B`{wf>{Q4mA22}3GZL9GsAw~e -z6?te5f}x -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 -zxZ;1y=zY>=oXSohYxzu7~)_WhWtfbyLXzW -z=L#5nn_<=C!d!rNRreASP9}GpLGQ8?tckgK!_jy_M9=hEY2V;=wTy$ -zQ-0X-srKbAn1`6RGR<#)f=daPXBv(O<7;4Q8QAUKC6^FyM{i_I`-A0~koxZ#gvdAA -zDt||LA>NfDPV-QC=@O(P=u`ges{eN?@nM_@A(S$ZPsu-gF_DfC?xeB$ShA9wh65Zr -z#mKwMFhh0x6?G=?YUdr#mvOAn9jcThVYKs1nrU^VO9;XF7b6&0mJ -z5D5_A*2M^?27s_?6D7fz)`8#ZY1qj^6RvvwjA`eP&G4s8_G|2tqZg5PA6nb^k*U9% -zifF6QYDm%s8LsVGf$Nofy5B4teY82{1m_fDe1c~QhGRARqUHkGq|&6*m>&^V!_JKw -zJ0wWGIgvU=bor|ukU1Li0tg(iE=tiYOxh`i_5%|A<-WG1X||0T;f|JShK{=P^*zDB -z_X6xp#d&@j08GM!ki~aB;-3v73Cdo^ZF=^c9(W0yWrW@>a1SD!a$Tc+0fh(()BI~! -z@CXQMU{P@ae1Yb;-k_sTPCpV;`epZC4B3S^Bb5I;{d#e3JeC66nbnuS6HETtN3n?U -zOfY6~uG|ly>*Cv&9NlPf!(>ryw6E7Si050Oci6_=afV)FIRtIBGbL0HiriD$g?kHk -z{^}MK+C+Of_%zTLrx+z@fofy1gRlwp;%gsk;?Ur*`92uCLb+8})uZsXQbbh%33De! -zL-$RL&wTqG(SGN-<91_+#5f_sS%%ZsGPX&i!CMI_toU?q0iLm~?y=!#F-8~~Hw>Tc -z*jTuo#ltmaXU@}Ra$#{_oAilsn6wDWdI%fMDh0-EyTf -zHivWbN(B}x;kXEhaHJaaSK|DxLm9a3<}W=-`ggHYf~XoBciS0|nZYVOz3F(Lt)F7b -ztP5Y+J(?!Yz>lDYpYo?Y8r7UYYS}xCUxZV#J&`b)Iw#@ZQJ2AKgU*H+zh4@VX_Sz) -ziy#OY)SgF1gE(Zx1G0u7k6QhFzc)xG4(GQ@GpQR_M$X;$-Q!$i7S+1u9W&hAv{UM) -z?!-?Zm_~C#Vx={j5VzhyGcw_2-n!l}Hr2~)cgpx|t8h^n0S%;0GdCDfQxcAJL0skz -zwxLpjuZ8x{TXosynkDGwQHY)?+WOsqM$(}mT^bVLw@SJG`sApJq(kc{CdaZ8O~Wr_ -zhtW#-^nIpV$*fAblc+sw?O{E~s?{T?@L -zDN~-iRvy2JJtMX3`MHX6p6?tMDg0zFk191eXFCX%_=}NT#FUiR;wzLu%4Jj}@VL7c -zK{DWrjlCHAa$kBNG?>MO@^M;V*$=qSdsK(xSy`_UAm%wm!53PR*3< -zLWO!&PHl)hnfsrxeDg#c)=NDDtjEjAYJSyAZ`|PTQ;Zc|W%#Ey-sovy5BG6Hv#a{Xty|5|%(?h4 -zzO#)H-1$o;iTFzEtd*jX+W@YZ8_u@eW36%dl?Pj~qt8&&G -z2K_ILK%U}d%ub6r*+sEE8uin4vge@ay>u6SWWFts=`;_mx&W2MYPBQeoT5MzX^SjZ -z${wm7_t^ZN4C0#dRkGr8gP9=OGE72S -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 -z{y0rxn|IPO#-O3{NttHGL(@;=b3m#5a77yTLD -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 -zKC`-ZRpnSeBr%LYlnn<(f`Fu -zRuu!AW8Z-S@x6vlj&Y`?-SzFei|x|=w=f?#{yGY-Kd;Bkv-#|-SS;v)SH0Ot1h{?i -zB;KVu$2kce2C~o9A~$nLW^4kXsHA5S4fmA-8huaw2C-bh&P-&^HzukJ2!%!ulcsfN -zfCKFzvmPyl0tCMwhPNA+6&-rpE#L~o)<_4NehZti`@!YQG^#9<8P=YL!Pjmyr(U+V -zaU+yL{4%hM)O?e~y4~+-@*xsq?+0m@3vEYkPSVxO2FemL5>LmbW%gwK64EyS0|Q@6Es^C!^Rd2K?qK4;(`YdG -zRhl{D1Pewds?<_Gf7z{olP?Ayb~=7lp1EV$EHqS3Muz##S3`e)xTuJad)0TekZsM5 -zZ8_h6XwtIjnd3}-76F!0(byjqE%@Egvx@VXWeBo{rJE!QiUzrz#xOS%y{rVWO`SvZ -zR7C&+dI&va?`L!3asEgw8!fcD74YGGWupTjVSt{AZFfDWnQJ~gvEms*wH_cf-Dg>a -z9K7!o6@W(V&+vO9e8>|5;eTu+`Gf%3+mc-_<5qoT!BrE>9hJSZpr5U=ah&HZeo3pp -z@?5-@Kz~|&f%Rm320e2Db18Q4ku}u_FLM%ENL9xu>*QURH -zB$=$+Vu9>H1z*KW4hhiZugZThM_S_;)4n=Fyhw+9&#RjP_(-HR#c}7!g-BMkdNCJN -zZwrIRx(4pp|DCfdio%r?#Z6!XcLJI2BXLgu<5w^s%jzcLa5NX|?ScdZ=+AEJ3AQKD -z3T>wBb5b25 -z!<`4cm)aguQ6Qx^!Yw1dCBSw(ub0sT?$5nt&nO^4V6YG!FixvbX$^ChW?OW$(D56g -z$UQ1WfC{jT=Iw|w -zcSBJc1Xf|bi*rO~)_8At -z5^Y_iBSEdrko5v~+cfyObbpldjv*#ebPO1FQkCMcemnJPf+dOYdB4#5=uRg}pN-wi -zPuEi2{r$>v6#61?D$KN?fr`I++~Z)W+*Afs;&7$quB`V2`BaT1i2r?8 -zk6ko9E%oURNgOVyX5CsyC^ySRck$B6SEm$GPKn0(`VMYHBu%~nx;UR -ze1tShsjv;Hhzl9KYrB#S?H@5a;n4qh?sE~bgk#O^bZ(Z0OM$`-AL -z3!FtsydAFIZ39Q)wfX-?<-vNy)9>`#q2Oo?*L-N=aJ?eKa%tYzBxYiEvB9M$nJx6K -z73J*rV)+ox*hIKexdmkT`Yi_4VtQeV>(e#xJ|8G!OI*byg!+m|&PcJNqlDw{%Q2lH -zfi}Ypqiu7IAh;W9oLb^*%t$D)H|yp+Y)k2k8(#k#w&%#=);0;H_?cQ|!oUcrv|$jL -z);97h^^I3X@naywV#yPhW{EHPFVmuZ)lVbMF3~Ac+lw>g^q6j?2`eq$71+_p{ug~5 -zJk!*EziC6)GBOAPQc{L6X=FRr#ieG!a^XFQ4PKkhg1E6Xo!O=FdlF$4(D4yo3FC91 -zflG0|vzl*Yt!I~-F&QFR^8~T2lM@wc<7SGo(UC8x@yLX?jqQ$~Hsc$q(&*E%Q0?K3 -zH}mQKBei9cH;Y{)!@Rcxeqh90UR@}%V<_)RX5S-RSwDN_7eIsN)x(SLQZLA?ss-h? -z^9}#}`gW;)l*@;~?1wNP$!`g*`r+H{lCT57y)AlHM3+Q8mTxtwgfe$_IiNaz3jsKI -zm*u7XJ*Iw{VByEc;Eqb@9COJ=Lmpc)fEm3&qb&z{u4H`w6JE|}kgxs@3BwwvkdN0R -z+j8ktAqk#qf)KBMs^R*)6~tHq1W -z#8-i3(RfA}$mX{BNst|z(|yu3X;*DW=qV3(ew2`fIF_{~i8g|tC7nsZ%vqh;7rIw9 -zGo1EJb)V--`YT?tzt#cj&y(&yhVZ}d3};~=@8UArFA24&_lp`2i;U4ToJ(=Tb5p4L -zjWA4^<9eX6uGqX}nOufCv&BQ;YzxM9gOiC2=PNzwqi|K2i-+>%1Uy^a<$5w4%o@+E -zMf(XzxFf}1(r4Tvo=sq6YqZ9SEu62-Z^fxY-@qbFi7?m&Wh6Q9Uh8^LOI8qNwm+qy -zWs9k=DXa;}1yG`K;biy&FDaV6+8g%opsn`7>O!w^rjY*;yvt1qi-_5-$vd-&e%;pp -z{>W-X!5yV-nq(L_bbOC`q9X7i7q9Hl;^T#eTYLIlaayv4ot1nDlltt_iB$oidy)RzLO9pVrBsO0Jaw}qTjQ0SGv3iOi^2kd -z@@kq?7AjmYihg?UJfuI#xR1|2z~vImaBrp*S55-5VJD`29pZ%On>7tmEq9c|FWOuY -zpQ`Ff)tZ)#CuX&2V(f<62ZdGlouc3S7Be-$G530`Bf9h>3OvNF%c?YO3f=*aMh%1b -ztSl&`Sn~pbx9d2=y+SqfQ`s8KP*aA(koM$A;<3G)n8%L90`Wy#&zJDmqi+_}aE$*cyw9U9~=*NM?oV(TkS -z0Jmp@*>TFLA^EUoV!UB1ht$;dx^Ki2`x5x6pIIvRB)JNy{vT;_ytks?!`Yvz+7ci5 -zp8-L26N)(i$%&Hu`8dvyrJCbMgu76Bg)}0YIrK1PV+C|P -z-!=Ox2=drIl9r1xAdFb400{bB^dra3O*;6>Pek$$T;RBm!hz;z>M<9S_vWZ;W&aQ! -z?2W36G+*#bnCZCqFLW|nlu4yKg*m$n#{Z>eRnJn;hkd8p^}c)

#G?rWT2@cGdaN -z;YKX}JU9;Go6RgI-3o_Tn6MXijm~)f#heqcBU1qRq=Vz=$6|n!Q_#^Qbg~l&sMIsJ -zyw65+=L#jAD$hBbuBH-S$V2d2D@0&M$AvNX)`zWi{Z9uT?M233ZP9;!-suOfA -zSJgoZI%9;?Q#;5P%(6=)uUPF)n}ZDo05jAx_i4)#W5RA^UbpFF3)HL2&M6VdXtZsv -zd4&3=ND -z%EuFdt$ndzc2brDf#co4BhpdU9vCL4H;`zS^6N&a24_v|A5fN)D+=YrU$#Te%-rGD -ze6wZj_xI1xXH>yZ9(J0;weJwIf#UQ_%Vf@nDjfFqEH_LCbpRGsrvRxxIFIEh!-R@?)C5oarF+TW|@$6*9`+V|vCI9pJV5VO6HOuHWhX=Mgw -z2~Iv=${F1X>3kNZWBiq%6(IY%T+w1+V!L8Kq>L) -z;B=vPS7mFSazy!yfGwiZV4#)1_6(j-Yf}Vmv4_dU-~pADA&rF1j{iUuq^#D3RRn?x -zT7#kgdW^PVH!rp=A&Ht9x;Q4>=gM36Gjn31RUR-pQ@zXQ#CNF8BKN`O*t(GcB>$Ft -zLhzT@`<6q!LZ!RYF6OMv3DT2$7np7_7YCWgv=QIl4?48BUE8D`a&^aTfsqfgyN@qlw -z5Qr7_+|rH!1Ia04LA4O+wc`&`rSq5dp1wN#8PZ8z?qoLW5cBB?o!&h+OtI+hav^u9 -z%Sln0k#1Ij*o&lLE~8cHy4Jf`JXpT%C^Hu9UWFQ@*PQb$7V)>Mk9n%vQi7?WgCFjG -z)c1aVt{ZP|$(fX>C(TeK%)$H%u!W1Co_QC{VI -zv`klr&7C2m&Gw-fjx1pU+}MA<@oXkC$&A{s{jr1A_N0;A@|win4f8&r#pdAf=s+)@ -z1O0(C0sS;)*zxt99z+=5KfP{-Mg;{H=l8_3(|{MF>?e0!O6ATc<8-KoxJi}K{Z1PM -z0*NeOzx0QLdn6B%YGoQ@;0X1G|Iunna6FkWj8n(8(5_9Kpxl^cD%R?XMJoaxYFJTD -z>H2>rq22erdizob{w+A%n08PxhUvd=`U&vn`!~(69(M@P--k -z)3gDCE)au@{wC(7Aad)b*aLYc^|QWkD*W}+6%M$OddcU+-w+CV>2=BrORnq;wO?=+ -zh30o&OIwd(eTEA+r24;K7a_)bsAXMzC(;hh^yU^pK_kENnxTu7*SnExz6+rGN*;{q -zpevvtKTn$8Q7NSz8`lYHs+;LH^NwmfcMLI>tiQx*P?HI94L0Cl;e9k%XmH^}FWLvn -z6v0U+a6Hym@L&TYSlfeG+z(+b#hz_0EWJr-Zs9E#Vy$r(5CIsV9bQ>%-nC&|Rd-W1 -z%V%j;dRIl?o=4mu&7&T-OE;T2*x1U8n%R(n*C6@YsgBu6IsYg0e#g7y1_P2~+C;DS -zsO`+@r5kBPfmgE16ce5|wqs*IJAMB?078zZdLB+P?-%CG9A@?oToj@LG2Q^*Szs9X&8Cf_^DX%grJ3kS3vjy*z)+Ac}FKubA1s2 -zJwU?0p96cUO~4aHRpJWw$HJ(X-y<*WcaP1VAem;VA_BNQz?eNcJwrtI;bcUo<7O;| -zIm5f~DTd}lf7a1=$tnNHDa04Lov-Ia>O?1=R3f4qniks_yU4C)`^T6tMn;0{&R3Ve -zDOBJYTlr2EYOlE=r=J=>5HEx`jk8q68zB}Qjm&W2-~UxfS!~LnLxh&R`vkEk5H92P -z!+}Lexf4J5yUQgvnprM~`32*Ealr5^G37UbrbYOLcO|OTjcvH5=!tiC?wJ+y!Rfm3 -zh-)O5mqG9btruK$kdq)50t_JQb*+J=qE5!wkvl7ZlfqdJI~R=R2^)l_;^BHz5@xb5 -z04G7rM61~*uNpvtk@EpV+x%AAnc9*C_*1{0=S!##%n%k{)a;JVX;w2`em|J0NOE7D -z>s=Cu+)g5a31Nq~zOYFLZ6{rHo8_c(#O{aVXI8pyC+&PWJJKxZNJnl;c}Xn*8BH`K -zhDhm?P0hE+m2+dE_@^epF~ZJ?yT{c3Y2=^%6bg9*;00>h5i;dtefA9O$uWq7NMtao -z<=h@R{N@0{Ufc(HCrs=@QTVFg(cc|-)6BaMEo=)yBSZy)(E_O}C3uk}EW0_j1Wr0x -zpS=0Cua4MLA?(6@{c -zC?v|6)GT&b5>#@J8P9JioS5SMuT!L~>Q6tWI8QQDHL#JaCIu_x!1gEYXqwG7VCh>! -z7vIGxC3BcIGEeG;3%@;f+&koi7g&GGF4@AU!b2y7IHLHhIE8fLKo{=w*@Qu%Ijtjb -zfxTM!o{i3^u~qOg5MBf;)Fw>`2DLkfgz=BQ3x3D2e -zlgcdtE)FU^>%ac133Af_;8nxVi~kErqEqid;$Y@g%W -z?%1bW6-Ynhf~{~+UjnSeu;xF1mx-oN6{ -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 -zqH@GI0rUQ|xceQe09~Krb1ZBj6L_(w -z$@3vq3Kyc!Uzp^4L#Z+1j&UJePawE3wEjBf4fcA0DUyidP<@foji=5l&s9PDK53BPu%T%LXA-=lAb3E5z5u_c%|TU=eygclxkuY&b%|myJ@C8DHas -zi8`=lX$1v^b9xH`7-{jZ+G%fF==7%!s>-FjyUx@QtC!Owjus-C6o(>gZTe*KV|h#^ -zDs9rbGwwaF9ml%;t2x1xmd-gR-(VkofHKg2+!aubS-%Km>lK(oijv}XARobWF%0zK -z^jGII!Sl`Q$vtBU<(zE^;@+j3;>;a;J@Ar1d;2laDxfk+mM<$GV#CErmcUzy+Wa$Z -zYUfWj1B?fVN447z1)?m+f}EkBU720bDKLd#rlV$C!XL?0-eq|@)+kKxKf=uWTo-@7 -z@DxjX9x>;K=9c5|(9@ZMGd8y;x|~D%_NL?EUt})XB^1ct`2Nd4t8aF&KE39{O=~7j -z`TUEheGa+1mW^L^YNKZ4;h0EV)|p}y3=ixq@pOsaA$9^mY5sCa6=Ub}`D{)kHGclNS5zvgF{LFCA2x(ULZQ_9;E*H10)ei{zr6Rx+KFEg&agH1SD -zDKdLXchoXii{a%bk5YYFIFYY=zfd##1e-2hxxS#HzNcL9tR%sPQkp~bfKxWtIy8Sm -zJpw-dvk9f_0EiExhO25j)ihx(d?`85>2BqF-27Bk`JFU!UKOF2xZ+nyjE3=mXRw3{ -zz#2RsUP>O3pq$0i!6Q-P*@LPCU#pzBJ8?#%jEN3Ww=}e*?_jj-zGHuC6rglA_&f7^ -zKs)RDgG3fmj&|BOW^}y>z>F^bM$TMIyZa%-<^&u!Rev&lYevIzRFt)?FyQ$^4)hfF80g -zXoV2?YEFoSh2`SbTMEINd5 -zO33Sb)q`GcM`g|S3#O#Wfp**|ql9Rp<%fs`0Xx&0(zOum#C3mo_WJ -zsWOep>80&Bo_dULogmH&T-FS+$XN{?X9S3cyM1ImMLn>F8kw_)vICa`AODQ=p-+4a -zM$R9b`JO29>E)2pa6!S*1x|um(Ik3?zMB=Kr*`%JvaMPm)TXdazxO!3-5xxp5O#6b -z=q6+gg(dZkB!B&IQ_AAv{6+WOLNI-VEN!aJFN9cQ-}a&*GIbLH=kZZ6YB!bE>v{FS -z(gi+V|JeRD@-b_LH_?|d-66u1l3?)FVdp*5(e*7h(*OXgwR*&-J5DM0(P -zOWju3L=Sc{U;%~td8>7kLqvQ40%cMs=_rn$uN)()BIX2E8X9_t>Eq4Z>cXJ{p9}$H -zYb%9Fra@QsEw?+u4W@>d1)UOD;kPW1KjdN6u(EpI^xb-u-8ITE+u{Yb(Khqx^UrQ{ -z-xWv05x?zZT_6`uL$Sray)xJX@Mr?MN-|20RX~W&;WUY<;?GR#sz-#$wGXy#!f`h% -zYoH)aHC+&TrZrSYKOR_HRSyx9gY{%-Fe=N{4fuBJ!c(3`C!8+{zF|U3xBuPDx>9gr -z43&2}&(zm?BAO}rkRdr6HFWG%1FcB0>fQI^lr^4#Ew^zmzj@P}jDlTy2H5kj32YwD -zWYD|UrWs`-n`x5#xY%N%JN!>P$TwY}Qmwd!&y53irY!qDkfpQ%B{ZX%G!rLf2IqN& -ziE1FbXIKgV`kHGljOmNr7_DMA(moRZ)a*UAbjYUl$yPuTrWy^Ape*Jj_w_vUs;uzF -zS$OA*SYmU^U%Zi+9+Pzaxdp#GXVi4&{)oRBJ0z+UFtc? -zT&QYh@2|7GuydVDiuwM2D8bqyqhBkQoDj##7k2slvD~%F7ILHsB7FbvAC2130rv}};-$aRLECiK+?+qG7IVlRMDN6$tZ?WSCzI~N5)T6j^ZO!cb -zZ(fwRLi$(SgI_n*BYfz2E^xRz_aE}$Ax{Ye#bxNye^~Yptq#+cEFSFWD_21a6acy| -z63B-Balp4A1~X|xZHBZ4d`<*N?XzF5I;a=YJpPk#vuk>^+bar7dKBvFMsT00?_iH^ -zTAzl<4plbcAB*5ht=h~|s3M+#;g)>69}_19d#Xfep+zs!86y{PFjymVyL@>B65Q&B -za1Py9aa}>Tb2@<~KUkv7rYwPfsne8gToH$h#19^tOW9JFYGC+w#$Vw)6fYQqxpvjC -zNDAM{`A47TfY*shj#95|JWgS(t(POw8Y!TlBpdb0m_6y#*Mmum9sxF+udCKO0h@WP -z<#p;vGjQ1#T{?wM@f8tdCx8|-Z6#f^=n#d#lZ8;HXq|gb?MN}@UA=`s>gfgOlxW1h -zw_s;&2R*^T -zwVU8qIJX>%f~~SbV=P>Yh=g9Yw(FWe*pr!HdU@OKke9Gi~~68#s@hd(-^reZ?DXUXI%F -z3Z4@kr2bBz4C{yT8Q5{NLr?^u)*#Zr0wyR5Fs>r{8I?vU)e=73ETqPEL$Vg>Gdg4? -z4-#jFIE0SXoLT5S@*6^8g{tC*0h-C;y-7=T2ip#EcwV#7n` -zxt!Gfe1wRt+M30WqcX=^U8xN*GG-`3M@`~4D>bHJauX^R$(x^;%)JNL8SR}t)QGtC -zN1y;Ex{6@(5gV*Uvd5JqBCqm%%di&rW_kqnykPC2HoxL&5A2K4uv-pk7fCDt9J*N%R5dsMXAd&jw?i2X0%wvo4~SM9*rs2^XCT -z99J9yrH^`x?%;KL3bFG+#kCpf`c4^>3ID$EXj=PXl%$?(4nf;3Y>O^Qs2b~27HU -zeL>-yL~M#E#MrQ6Rs4VAiMUFPh7({p(d)>ik*-zgK*5W@+HI{$h1vJE9Q4hy3lB7M -zlQ4Jz8q{ID54#F)m$xwbBmklR@vjNc6}N!ZJ6|yW%0m&oH>@DEwrAGc)=Qv2w1&Ga -z0T-*ch$aOGsE890rMo#acs^F3F@!?w((emf>-Hg?%W`u?-T@qL{nK`f2r -zHb#r^WCbNqiH6fyc0PU+54ucbO36ku6Lx3qOXAfv*gm1EypLU;ia&IJVhn6|YnD@# -z%LZro%DN$TuZiBQ_QII~$X27GNG<+A*`y*KGcNVP&WIaMW8Rj6UvxVXGPQ>dow<#q -z6qPWiZ$XEyUU4uuL2YZ=IF)%XfYklA5O6GLBP7iw3gRIp?iO4efb?M|i2SKDaJ<4N -z)$%G6_Aot|{4is)lXU9MnnAqbIXE~8exsQ*Th1=>s! -zOh^eT4B_qDIx+CJRS?Zncgi++B{9q*ZB76`>}K^%N(>Ew-#jYw;U51Fd#acMXQy(F -z&30Wnn7aUQllv=QHbIrI76YaOE+V`t#auRBI{kvBA|P<~`%L(U`-|NG(w}q%;~ZP9>o;I}6?jE!2XN>9B?4LZ#cPPTo0nLC{MJ|_7#oigiHwAhqz03H6)g# -zw*Fda9}S%%FXti>p3#aC=Q0TQf3>%V -zkAH1Jf5*wX6%ZM|5D1B2cR1{Q14#hJ5CoY?6Kn&xE%GgM%w{fOVND_At>TI=*!l~* -zjyNH>_E0a!vE~PqJ`s$&=?p5pc>era7Bgh+F}~6MKg!y>IRCiIB7iXNR>2y&^o&3| -z9+d|o0-PFIr6{RgBE0yn(;5SH8ZwaVSqP^cz8?oi~tT%>0&<#H{TCt;pm1Auyu!uuF -z2-BX82j`SuyGsGCDksABR)BCk&D1VyQk;t!UyA``S)p9t^bw~LppqDXfzzxnAG+JtmA6D)898UqxgpArSM5!a)wtEh|)MU`M`)}6oNXTppQ0m)g(lyYl)AY -z8*xh~j>F<8JGwi23yD$yxmk2Fd5-A*+jO3z -zLoDnb7wO{;ZyW!Va0ZbciMbZl;X -zF=C{KMPBp@!TtQ3sHYjzOQtnj3pzOnV%YJ!G7(LC_V!@v@g3^vW5C0`-Dt$BLRQ+n -z?i}Su{PU<@m=-8WZHX`fYTsqRKRI;_kqPwMKMkk?V7OkxJNIuvFD&0BCfP`ow-*+r(hpl~+MuQ!a!O -z?9#CNdpj$6*2bwpp`%IM{t;0sag+dG#B|xEX -zk(92_nX&++i>?qpd;y9n$hX!8pe)41k}Hp|b{)z;{8yU!G~_e# -z)Y!~H!K^pRD|Y%AJ!WBROLMfDwC)#t*XTW|3Ims&^Toz{F84sZAL7%E%L1oiabzjp -zWX6U9%-3&x88JOfrc*?-0*W(e -zd+8#6>40zIu>!b%(C0tBHF51~)-^Urx$1DcR+a`yKYz2bgYZ2Eu{u|W99T(D45`rJ -z7G72}V&uj^^d{9dgGXn0pWQEtOUeh{f4*sS@L~>XN&Tm45Zj$5g~0Ng+`T*pB9Y -zMoU!Tm8*@7&s{TV2!@}Sd4z&XN7~;fjtg4*35=`UHp~f4kVeZqnB%ZEa{K{G>3&2l -z8df<1P1fr!2TIKI7)D*sleR&p+jDsujVjogyK>CYs1zR{?;F;ZdCZ$%yC@E(XCiRq_!3)Wu(u@$Pa@#F0-35`Z`aibU{x#7Vys!nMJ}Odjb)4_YuykrQ^H?=^?JlaX3h -zW|2$QEy3*}5Um(T-+}yx1rD&r6!C_k`qXFhUkJQ52hc>m`q*O8F6j0OSb#I=UD|Mh -z -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 -zwcQ#Th72uU^tZ~Izwr-0J5r8qho -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 -z9@?wA_L+lXAi#Eik|)>dKT8 -z{$4>oChiC8gU>2^Cc=?lBI%OgF-eH-cNG8PU?25@so!YOH)3hQM`b9ZkY6a -zZ1a&hbeA+ewgC{_y5iXo<02ZqxxU9aQQVY1txi^1NrMhF7>2OQe4y9ADJZGwgq@<= -zB#bE}QjB{zeD!DRwW_xx78Y8%69gu8g)CO+(S6~lv)2RvFRSW1+1}q5{&=<=8fX{n -zJ*)CDMRuQD?~F=Ny&g%^Z~nBE2&_ZD?^p1T?h(;}zbq35HqzrJ -z{R=XWcnHaJC*k38A=wE2-ZpCh(VtX*yUZ@u*OA{aH7alwIDXVcQ`DAT_qzH+@(l&a -zdA5~!2l?3#uko)H5vhl?)Os}K^_uCOChEPHX1m_jpc;_p70;cr3Iiyv`xazU*bW_7 -zR0fLsbI63LBf=twHe*!vPK_Q#Ql6mftU4}kzv~x5T|L6 -z+?q?`BA<*D&jqYpg~+L5KB%nG?Knl)tfrsA@(z2n=!14qg&}nu{9Rr87i2(koo2&U -z`N4-sN>V82i>$41WdLc@q1jV~DiFU^WPIq^Wvjle3X6i`_5!l1EtEqU6isGYuK9~T -zi-QZ@ZeBxP@2rm|d{MS{&bLo}hNw76ahFG7xKD%OHq@^{Lo2X=1dvT1L)8nGKBj8e -zBwOx?mKS7!xo84ms@#MQjuw?ZH`7xHQL}Dl-hYj`k|}YKW;LidBveVE;LTv4904hd6`00Xwr6uV -zt5%t0EtX}TW6ogfB~34rrXp!*vkAWYQ&H#!rdDk-wAE|)= -z#^m2zv+&Yd;j=G~w7SIma#9}&gWl!C*@b=!KU_4LKgl%?5kAUB`*H-sy5n1;Bv;fV -zw_9m=SnLm6-+kGB>IZ)f@~Zh(Z295h9tcL@WtS8$vubaCpd>Z&RV*alZzUnXTgCIF -zc%u)pfV=E5PL6T?r^wdXJ5ndTVzHc+jH2M#&2_Xuw@BGOvq08__{us*UWirpy^Y|0>paPx#{!ir^7h_j0wJFCE0_654r>}F#OWm}nxDs274 -zy=_M+q9UgQ^bOLP>Z})18=jBx@(dJkB>-hOw|;OnP=<_Q(X>Q4rV;)doEG%2qcw2N -zJ?S508G0fE?yDHu&B5))jMM*n88T=C&5)^0{^UJS2-h|V6tJ}Wv_%fm{U+Cd923%J -zScR;?Z}x`qQPHW+^m7iL1*aL|BP%XjAi}qeV(b-r=k|~VslS*u_*163)`}HDt!gYo -z+JIS`t(f_yti(YinHhQz5hR*!7pN2bc|sD=XJUw$Dys#t>PDxa+p|gfko&H*c7yR& -z1GfS)FhemCKLS;z76T -znYkiI&%@e?VWUy`o*2XY!iD7@MnNn5^T(f-9~$6!E6k20AL`Z%D8Z96>h^?n1*A{&==Rx?@q$etVM*?z~I^9pMS7Qr*S#H!)8V$Wcp -zfCRPYXUZwdhKsBC)^R=22CP!H;U_SyWRvKGI7T)j+Mx97#KXIm!1@}&S!;*H(3%)v -z=ra^dek{(d{8wf{nLmpXPE1+xEOYjx{j{V;8?v{2%mPRR%<$qbZQiN!$|R_AYB`(0 -zfrVzZo&~jFmk@>V6qj1rV*)gYh2lpr!Hx2vHXt7$TIxw=;CJkKx03*HY^aywmI+Jk5B|)x+MoqKij=poL%(d8&Qk -zq;wi9Xt%h2Sy!A6CQ{Hd&X7=d)P|_f--mslBeXLqE0L|P2j3_A4=5xudJV&zsNtd1 -zd&nJpaHGALv@UId&ufy}bh-6Rl;0edpxAR4;313V{0P+7K=@~j83csn2z4)lDS?=t -zh&}?m#D9L?cGC6QWrru1h&aHV7^^|e%-2ehNOqky(W$L(X}Hv}iHYTfR}`S#!c&FG -zWJYt(*WBP*Zrx;q5)Kp7zyk_}XTbN)b8*v61*~#lH8kK69(O|D4=m#he!;X|7+r|6 -zIu-b9!%om((jq!BjQYe>lQuN%z;)XWD|NTi)t&O)6Ll>%X^j)`?;u8A2CvS}MpBw! -z-#XX@b!@JO;s}4hj7mKrD>4Kli$nqbeI!;jI2xDHwL5g()W9jj1~2u(EfbBpeR`q( -z@gZD^H__%{w}H&t7dA8%@1nLN5wvZU8&q7X&S%lr^knD_^QDk9yYcZVkXWr3v!7rH -zz-XGJn?&o6%dj;%NwW&QE{pu}S5ZQ7dFo&L{)ouz6hnt2k$JT11FCH6wt-U?o9>|e -z+3nL6=B>vuop!?|qk^|R*SCG>**!AWB=lC)KeG@OC0zqK=g&DykuEAt4hK#IA6tc; -z#`vW&)CF=4kuM6*C3zhwqJucM)|OLq4S}M-#a^7)r5V4btFnC34WMC)YND7-qy&d% -z4NC|gGVuhm;@%z?|?d7%U1X6Lt|BgWFgL -zv><{?Ym05uDc?(In<1Zu>UJ{=8svi*HxbS3so9dYdR5QC&PDIT13nnG4k3vAuzJT1~27Lf^|E~Y?AcQ~)zFG`S?!UhT^#W2Vw96WZ -zt_+Aq3OGCW6Lv5|lCp1ccY{aI)tsMeHa@WxxuHELt|^XB9E17a8l4`Kz4#bo9t1TI -zCJmAE&D&5KB6>xjX(Z&jm=okL$2aL8ucyvD%2|*rNx%~j9^JJ5Npt}L&0F%^H=Cpbun@w@}PJ)Vr%cnDa@sI{c-^O1%JvbLo -ztbYM(G5ovW{MY2rW+w~&Gc~*sfb)PDmp9K|#rph0@~KO588z8=Gw^;Nr!udaBR&5g -zOieVsh{Cp(M5}xSe^eZAa|M--3pPh>i)s57bc*%fM9is4l0IaWWZo~|&@>_tSJsI} -zp(J{?UnYNEF=!8--*fhXowq{8*-W48=g8+=K5^7RRj9=W5>;$L~og&e;4t;bmRz -z{ZpQwGMgt!OjRHZklD0(5FDn^*TyJO69xt~t6$IU!eo2@iy`G@P#~UM7WFm?&ELt6 -z*T}i1cBBIn0=OPj=h7kaaXwk(9yaTP5mCi}leLw53Fs?VCw=jstWF%6iMP^{)-aL_TXb7cbub%%8bIcbEFiP1!=bW|Z4}Zrw -z(!X1R)lJ<3!o_t=fCRik#K``a&ABx&Z4)t&g7;Zc&lnoaspERty6(PuT81{M;0%|f -z>B6~R&Jb!F)M*_BPCJE3{x(>0xxj&N0;Dxj#3R*wSIG$upGK?|5`%4Z -zHo#Qu8Z!nA)XAy5gGhz>oemd~Jb>=j#w$*a%1++IYb&TY)AG>JY&LXk3q;xfG_JFY -zVPA+CglRQMi|Pp90k{O~p`*(QHLv#M4d^x|av^y|PH5)4abY1^(PheMu6`tNv=7=- -zxv7{lJ+L7-=*cS-&s^eoRy!o1;a!ZbN+VbzvMUqzs41wjH|pUr#kd)Nv{5-mRigI{ -zKot0QkMsvQ4JYE5#UnA0M3`7q%hBe3ke9W2{<04*phTgtZ+pM!-+#_o&oQyiY9yt; -zAPG8JS*!w71vREr0N5QLRh}B3aa!o^hku{d6{l?OvGj;d3K$(~}cu`<-Egsyk8G!;K*?cl&sA>p@ -z8e}8lfFFV5)>`aOon=%pe`+X0VAx1eLQ?D|P~EN=-`~n^@S%qKx$o|OyONbnmn7q4 -zjJ#_!!>Hi4GkZZyssdG5e8eVk7{2np?dgxKGH?-K$X>~%wG&r8R3^x)&|fY7KD1&X -zUjRD{Bl>qbn&LguSt0}I#51t7%ToRm0=>vZCoY{Wte%hEC9IIluH-TNEnmg6TW|pcW?D -zFvF#%vaWPxFY%bSe($<=SDrkIo<7zPf+2d0R^3CKcE-4>+GTYBDxdegW(qr^TLfMM -zegToT>eO{9WgX|7?^VwIA$|6_&ecA6IMdCp35oI_`~L+22~`L2#6XjtBJTQ|E+cPt -z{xC8ak~nC~XKp+}v9{xAMpq67=r5A^sE(X9B* -zkvEDXLo(m^#DwAvDrBTUKSWlx3?pLF)`hl9jJhhynwY7zd$6e+CVb?qv>6`W@oWrmeBH1ER4NG9Z=7IfF6SJyrdEptn;NX3#>6JEE!gwK3{uX$e| -zu>qO);l2=MUUcDDkleWysBg!CsWM}Gwr#kt#ab!SuCjO)QTZLOp)xGg>46g0{=uP!Lp;{lnmiq -zd?~HZfP8@9O_J0sS*X -zc+Odm)#FNo5XbzgQ0y8(T>E)VqW1I3#w#ObEA -zy6l36ZhN&98TF3h)VAwcYFDBs+V_0^g%d?eFAkS>~+j;S2ti7s+8b|+ -z?*{QVSFXAu36>LBNyMKjn*8HY!6J7D^@Hb|(?{IK=HOQ8F@+8=kx~k4Lioy(y&*{F -ztXtiZ!TM%~_a5V~7niEJrEZw&oT9t^{_Gu~XnFn(nb(KtrEPM2!q}srvkA70jKJ>p -z=3#%j1!&kk+@R{F`zL0WSxWylv{DdoF&S?9k7ZwY&W#T)bdhKKsOQ1I@`iO`UC1Fmbv^YA3To@g2oS)om*ioZbw;z*m -z91=3wB__3LkK6s#4D=zz*|_WSy7_c#on!8kwV6DzKk1)cjVsMG%7Ao1u5^Jh4TiCp -z78D`m*Xjt@Lq=z*QhOeI_yeu^CC4HLdXf1wHT!Xwa?4>bS+8k*2Wd>bO1V&=K8~`k -zkfcT4K0{E@nMS-~7nVt>hIQvu3vA28m}#l9J=&Leo~~#g8ez=gszhoOW3BN&*!-o^ -z1>=sLtyU|m_wI7}DN@Xy6vR}Unqb)ITX0?I(iUiDs0T;z9Sa%m-1THvkX8ldoaClnb -z#qt2@MsSS9R5eF$m2^0_4aVJRk|Sn#Gw`X4zpqWZ?w_HBdO!CXsj4EEP6?{i2LULE -zx}U(D{1g>5B~8hbG_W%b>R?bc?52NU`%TRG_m-HGI>qSNs(6txH^tw>{+MTtm2Nnb%i -zPaKbPj~hyY{<~NM#zzURDzb=+;eRa;{BmCETs7ZUQI -z3=8REGMit`NJF=a(+0SQm2~I8k^_(W2P>l+u31KZXXAn#PtU_P_ejncVo6=eFb$$6=>Ifi -zhpz-~s$6j#J-IG>`jNdt+U_^oO$e)iT9SLm{87o_cjkk~RcIw;DJygo!zUw(Sbx67 -zdK^^5ZJZv6L;L{L=$E!)bo?dZKoWmbH6U4h@d;65_WAdWID;G#firIDp=N|kQz{|4 -zg@o^E0w?RfwifNd#@ut&vEIbZy022k1>gFhYp-O<_W_hVTeH(6gWJY!02mY)H#WKN -z`@*sn&|S)hBKtPgkura*NJq+$GvhJ@&hdvB_)Uih^IbE_pi_q}_p%zi?{W{B> -zwY9mSxRU@Da%?7K?{h9FC5MC#xr%6J6AxkSP@z)>-IhWyqKh2Bx(ZdSkM&TQo{d}h -z(_2XvQA2+yVQ-!h@wmqz4VB`nV>nDTPfd|$#99bUzxV-{_G3u`AXDW1D^+ihO*sQz -z4oMFqH7!+EpUvAIP3blIo -z@6jd{`cnhESXx@+Gs&S;UJ|!xqql=ffcmI~WJT|P4AwI&4dEOa$2D_)G -zxuV==TUD#0g!0lYf1qIdDfn~HUw@Xj=#W19=Pzrj0g77I@+I_3)84KK~D(_kZ$YL1b`n*pd3hefIr%7j@i& -z4%20KcF!7R>V)rYkl{XN!A-tw(9Q%@L|)(2V}180As#4}Id&^D7;Q|X^vQ`=6)rN-z9*i9WaX>!=AYH+^cNbs-R+tDAg)xLvf;( -zoq1jWV>2;l1RBujHRlPF8wvcBpGd$lv#49=J#cp>=F55Md~S -zMgHGid<(AL#_t4h%cDuUs~s`na0QU#A*;c_g2#U{v>${2X6@4rv%ay5bIWzx9wZ(^ -zH-Df5Q{hz0dtG3fzv(X^IWv&{l}}XbBdd$T_xFI=Z4H*`Ubdiwm^;oH@a6l-D7vGv -zRzLDUbkCH&A?Wvuct}E -zks)om!IpH`{_4*H=-*dP#iW^;%NOK_pSp8bt|SybY#dyE6P`kYWL)v&%|&AKDRrjx -z)};>Ib-3tyua{&YOCn26Z`Y^#=#Q=V#~D*b|DVlhG!6%~WXVY^O`Kx^!@@N=il><8 -zaM-)DZj!F&u*G>p#~BA6+tDIcni>S?fYy#Cf){9?48Bz~#av -zRuRyL9qe*9rNEH|Hlu8wm4xee+CFnvkl{ZBTuV8A{)3<_f#hHCta7Z{?-Kq3D-(DC -zTt5{r?b>eLCCNQ$)aP76FY0AaFwB_6W?!UYa+Zf2T9e^Gd8fj|?&Zu!tce2NEO*lM -zX3%+OehJC1qlz)=1vdiK*}n!)^ozYda4EuIIb9QPtYgVbN2M?5IAeo8YC;xngaP+> -z&K9D-{jG_A&8i90l{M2=_8;&3Z`cJ&xg6Icn4shDx$tjs6i*U7ixSu{sJnPYOtmM$T-wew4k*k8%V9 -z9-I{9eumxepqn2FiKPmod^))p;13|x53@1V!O<{32HAa!TYZyJd!U>1*zs=4)P$8b -zX1|in=lHWnWHf(;bqpm@sEYq6vNQcxz;`W7!|)^6IibOe?P)kc2M9L{9^<-V3Rzbm -zJ~*Jcf7)>vkFC~cOzXt`hFkWdBI=&2y8o*=VgL#{_d#JXKQ!<$E6eO>abOBi<(TMH -zveU4Ag;vNoEqEN^)Ap$p@V3FTQ3! -z7;LbAhW&~<2B%9iWUZj;ToGbaW#btiCYl_m+Kr{A&cKI5?H` -z>6C?k-7q?v11xxJm268xI%a4!5=pdWkZTe!Z0ug6z=2Ec8r*^n71jb7mbUCse?M+x -z*W?;10*2|G#JcWypv~_Q@hGkC@`WS;Sb=IM@e=q5nlD#?CCmVc4M|bki0{HXu=*4@ -zKB0gEB>B=g{1oEUH`wZ;y4FYpz0wQ?6FHk`7S7`M-cgnLg#ZXXsR<&iJz%AO -z#-YE~18$G(YBm1y|GoOzz^yQeK>AsDT(T#9doOmlwWC`{>5M;@x)d@7;3{h2i(=~9 -z&5W0_5liPq_R5PQN94C2;nQ~GOjhqm)-?4$g`5fnVFh)n;l5lS(h*pRnCGD6?es>uC0 -z7$!nisx8NSBTu89M}2(KhAgUT1rhz1%9nbrfaf(Fv^Z|B@{o+;w(jvpg({6mIMnvo -zHT&;60=AvtV+NI5ip2wUsZha+1kh2`9})LlhTG -zA8K?C@#PVU9O!KSh&BdE3i8H)hbMbf$S)xUQuw{!9xYx-W*AN>gJnEh=*x{DOFvLs -z4V9v~x3#$JSqxK2)YKBemrX9+=^uaFJ)_l8Cm|dT%6FDmd1;>DC3(^=ADsaH95kDJ -zz~t8EV_C7#X*N|rej(XoGm=?}B-s+(!)r|Ilb&eL6fbdkwCKS_%XcRHoHPB!TcYLA2G; -z!?_iRi$C70{)Ivar+Ih&K)3eKKy1hXEkY}N&QX6@Xz2p}FgLF`e9Z}F>w$Ufo~K!D -zmmB673{=nUc+MYK3;0O`)XB5eaVp^Kqn~_)HM69S!ns6isW1VV>~F -zp0z*s5eXUh0iq&BaHbIJaCja%`vUxYjaoTjX)S6)1mHT(!`)@u6ERk{yZ~1Fvkb=U -zBO@n;d#B5ANQd}S*25`r0nqAwx*}sm6L2P70H-7_3FUgc%`jpL+@VgEkNTTzwYH86 -z*Ke(mX#0Dp)4@_a^e&@;QwJ}%6OV_|fzl5ce9?&h9~0`EweWoMe!-=TCIeBHrb7wP -zQ|uk2<275Q2O&EE71_P@+a`5stx7Q8BS}fiDEmBumb<<}(7)kBlTtJSaT*IQF`RxZ -z$7JhY9cUiodi0%LU!__mJr0HO9`1jvd46;^#`I|YUIQ#WbWWS7+LenAYB3YIo4yGU -z=*IO;3Kz2H9 -zNnlYi^ZDa>_tuaS1b(lqjrOzqOEM{fSL -z^d&J{UsO4qPr4iUmMy}QR8CfJ?UC9cR7B?R&ive~_WCHEeHuQf|D3q;9|AKc!n(s^ -zkdeItr(%e|OuUqQ`eje{-6~(9Ll{{K;X^3~nvM#J??%;(fQ(*szC7%*e=Jf){t-Fh -zS>VU&REyai`7~5VL`!=EG+KX%Wu)kq=rCJ^ -zBQ>|G>`(wcnSiM5&{dy3`rvM|0-o)3q`#}v7VL5u3mJ8<$GTsnrNIQqX7x}x>1h0@ -z(|k7jDNOXJWB_WXzc;{dTr>`B{!SRd{(-G)p -zr?}bDDNl1Tw$U0LR3tYFGCm!Vi)6M4f70uMirw4Lbb3(%C^C;=H&_-9HKv`(c>i9) -z>q=1TZp-v;M~(F!m(rrLSeskT4*TzZ1Y{U<>}9430kQOs@%4~(AXceTIe -z9mq4AoWeEclbrCd1YKiQwJ@3>&h)R)E)66cXkaNBX~N?K`_ni?)}NE%5g-Oi46*P4 -z%U@G>joqE4>9rPXU=1)_lDtUn -z^~8&YMm5fnlJZ~1`Z_9ydB0WhVwZL74OZxDAtGrin#G%sii6QkU-~)Km4z)cqLD$9 -z&RL&kWO_rhOXHrE5%mon8zGmJB}k@F(R_fy#GR%@sMVo -z1xL`tpY)FG33#o`gWn~#Q!u@o^mI-9&8EQ7i}(P*i?I^V*q1%CKYg*46(?A -zJJG24zK3W?efVmPd#Lqc{^3Jy>w6a7Qa6t!8St4@RaEG9Ol5)HrKTBjJ&O?Z+q*At -znVFdvx}JFD8|abSzV!tz>nLcE=)(4BDD2zh=r`||+|{+pQ^WbSF!pSresN2!Uysp2 -zCbi2q8(@gK7r~l2Q8^0Knx>ozA`~n3S&F@nUq_F+;T?h30;yu@LEIb?5<+jM(7p{A -zWcdJ~!k^$D8E2%hww`D2`8{a_z -zb`1F*%%caWs=bn4aKK#YYUPL>E*(%+R>&dA1sW>Td5e=Efpd5EV*++S5o%jG|Vw=}Woo{e~6!7=Ym{3Mo|FZE1K0BU?+pI`sslHs~MI;oi(FCxDy7bPYB^#Kw@Sm%T2^pSI}} -z>EoQ?aYnn%O%2&2-WPKR&u|(VDPzX%;SO6M&<<9E=1%?F2bTcwxSgB|MD-HuC#@}; -zUJbixw_o^@O42(fY)e4frY{eY8g$vaDl4AE}Gz38(L*(qWez^6eT0%+G}P>(;<1_i(21bvXAa}3c*4B`8RhL@|o_-7&g}pVpv-EhheB5dcAMedx=ynzRUpV(;5F1DBp3FkBI{dQ45A7nSZN -z-EhCZ!MRZH2xHY78%_>c`Yv|m{F%%7!&Cv#W{8smN(ZT<;6Dm{5zquSi}m8EH(Tn% -zDZ$iNEsm^o!KKpN4;IBAJl5Rxh9huB-3iXx`HPXe`uu1%!0yCMeko%6PY9jbPg+3` -z(P!VfO)t_#Y0RJ4KnywD+LvKisCD5u-|$|2x*64Rr%c>0vNYr~Z28YWAHbV96d!?2HFLSn6}#YP?5aB4<1-J( -zygAfqrETKF$P*|QrH+sC>4O5Mx{LLSKRbGUypi!_l>=Pj<9Vv0XhL|plj7zVo@L8S -zehkSg^#(C>cfg34GH(m@@yQej^fX+IEY;CPO358ROILmG=D)|kDGOU5FlLFCOiFLP -z=AvyN^VUNjb`apyS?|HT9G{~4eV#GU6fI5XucE6Q)kv-3d_hiq_uO3F71QfM2#2Mp -zGLrgy_lYrC@=E8z)hW9mqG^!GNZF$chp#&`_*@Zs(Se`sRf*@}43{G$t!&E^F+#P5)eV&v%&V8kMpVF!p2}H{}9Un&X9`UI(kg)*aSp$k%n=%E3ijI|( -zwei+fX3^?FwCmM7i|Ihv91mYC`+N8ZSmQL5$Jf(j)ucdmNf};0*}h{*$98CC5s1@0 -z5RGX<;=Eh!KmZWNY)7*f0U;iE8zdLTOi5NJ-MF3f`rZ&mxgmDlUFd3D%P=WLAF!pV -z>9fYD*zV<6+mC(px$bFxJ~o>&SkX7_mhjB%YW-)A%?74fY5F|t>T|!X=T%p7`-ou& -z&4Lw?LKD@aj@gC0Hg)Ce@ogI1^J%|6?5f<(vYV5u&xWn41Ab-igdt2urEoKeqO-m) -zyH+!}sD!(SqoICLqv!;AhO`4Krbse%m=cWJ+%NDj=8>1{EXqg!sjDrAwh@=HU+JOa -z+TZg$QU+DA7)1uw_BuAmRv&%o1C8c)|vyFg291ruHaQRymEhv@si7fKw( -zzEJ$7RjO*ZxIg0qJz@oeB-z2O7TZumP_!!pxl5;N+Bj=K;W|76Ix5_`pZ#Xxz9KK# -z6LtG5*zIN$6%n-IPIpc!fIpC=eTTw5qk;v=r|KPN$z)bQa}EWw8~IBsdS&;#FcZ5^ -zjtf1vR-G@irT -z#3h8v3cJa8;LYoQpeTIJ#!mzW@cBh4_}-e3rDl|v1)z5`041i#Uw0M&z-kM?U)<6< -zqSrgfIpMM_-`bChebo`cnu+)8voRZ?%qhCKLyN#!pi3ZSpgty?A?^PoTPAA^W;lWi -zo08sQ7QcL7fZKA)O5G_edZ_lXg7u4>#xXDE0}E4EzRq{de7ljTXDY~ws??U6*uaq! -z#N#`lQ9+usorwJNL9vIZ6%6uXZ|1`##4LkfJ7ZbL?1tXGHA;MwT?Ela0AkC$9WbG( -zuR51qh?L0?0RH6Efzh7MbrSD=c7Eo_EuhGbQ08%FGqO&yXLORx*m>vO -zSk1!t%2!))PFfhTrT(K4|BgFS^J;@>)Xqi -zwJ(P*LV4vT_;s<*Pqeb5Ds8V1PBSfEM@1-6Mq{us-0R5<$)Z&>L5bfC5%fx2eq23R -zI1pVdN&Vof^ML$?xnreUy0MHrWiqSCH(wN^sfm?wC3)Ekl3vS*SIkq3DfRsxdOM#f -z6=23E904R$-jbGC#}Vn*dNU0AeJ)DCpW5g~@|Z!{3^^)zmtmk_F9SN@Z2b93YtY8SIvo`j2XE0&F(8w4S$2y$lWQJ1(GVPjB-eLN# -z_vXSJVK%Y4drk%{J~ -zR+i#p4H!=O+#$Y4iF@@RBPTJ%t4O{(Ieuk&;Z){Ntyl5Ej$ICe60ID)fEHKjOc*W) -zK$fnxjOY*Aoco_a{}z%cz`V3LJg#8*fqF0j8H8wnXjrfkxNAhvZG>nC&pf3b -z8%s1&<{;whYs>P5hh9l_M{XTgsU{X2S6?pb -zK7Pr5k!;_Zi`WemHK?+)(|-K5!TW@3C9&wXSVa1$^f68UCkM~)X8~3EH1MkCNE+uk -zP&v(>GqEB2(jsqLu+Iu+Rf?NBDyPN>1YeEZtHFW;phg79qhc72c0q)NH-4=$V!?WDv3}bc8CcfS~9Iqq5k+F_PH{>G%ZTKXLXyU -z$J)v+dZc7Z_lp6$x~24&J$NkgqQh$0G_2>I63_^XnMMHA*bJQ*KQz&qoh7(PfFzQc -zp$w~XiJEQ0Duq&Q9ZPaO7Lk5SzYc_S+xXoM=AqxD`KaFLP+~`;r$b?=sAm`oQ9TFon -zjnTl|@SbhZ+boYaw9}d=L$`b~F1J%k)tz(v26)B>mBjDja0lW>om_~9f4U<$yQI== -zR5xZ8`OzBudo~2$Ds!tV5AG{o`&@o`aKX95dv3-yp2FKen!w+5F?GKCuNA1L19cmW -z8E>v?%R-6pl@g^#Wnp6}AZLYvxq7SdP@_!*zYBY3u>)H+qaJgVjC-Xh_&@1%#o4 -z;lF-XD9y01mUhNyN~`nczPM(C7J=cY6r9efMA40!e`in!x}AYS?z9+-YSx0pOYdf< -zD6;M~@T+##Ek*lwS_Bg;&_d6h?S|L46TWSTkKn=$Z;}rS*a~3UZ4qJ_3E`@i3`%`& -zGp`wU#lR{r@TjV(3)ON++rJ(!Cq(m-nu{wq0StWCnr~=pTB5-g0s>gf^f)Bc&UBrj -z9y}I|02ib`oCPmlW)CttTva};h3dqQ1_<1=g~ZAWiKiT7iOyh1IFHow_^CblUF|5ZSK?IqIZ4jg0Txl7Kw3Z7@H&c8)*CuLRz$qI~Qx{T2sR-YR5;>Jb -zs+X!L>paKY=+>1zOA?(Qz{(7hV};0~rVC`H@%)5a;@_4UrIb%n@KB~bwyC3b{Y -z7EC1M| -zEQ=8@Aa1qhp$%EBAIoQ#OAP?+E{dZ4LrA-*zUmm-EM!MXcGL-EDb~a}1Gfcb6uJxk -zBsqLui5=y18k|Bm6<=+?U|Hcgfmw;ptb%kEz)8sfy>y#hd0vJFoJ`UIfn)+biiPU> -z4>@cQA;~PILxJHi+8K3celdhDxJTQhqTqwrNj>Rz_-reui{2IjC8H{`T#OfHc2}?K -zw^1XV`>x-r18%8k&0+YhCx2iz+8Z1;>hEMW2=x!E&qy!C0@mEzCPRN0wOCZCPOd(r -z!@@okh?MY#>9He%N(yWbbWNP+u{vPb$|sefUI|{>O|eA*aMt!35(GMEGbFi^1*KDy -zxqmTx@E=ubUilT)#PSrTwF1DYaFA4KE2Vvhm3cYCxJQ$i#GE5mlbU&~{Q$0Y`1B+h -zO`Pn0Wq@WyUYI@cX*+Een6AG$gsC0_cdJ6oy@_0}S!F=)RC(#u1L%(+J`0Y|hg~z2 -z?L{_8TUDMfgwSd=EyB7SKPKQi7KkrC^ -zgaF)apna3JioHwQIj6>=k1SM`*+P5<*3R1Z03)FRj>k|q*xAThnkQRjQudvh`}rsy -zLiWKu5nKtz^-L@Gx`l);6_|Rw^4EE#Hb`m#N)~|f#HL7xver5JBo0l*q(Mc<|G!!r -zZx1)rS^W*xl*VvBL|n77&Os&qnoq8;m{?iy!uhY1?mekyr8OuQRM)M|?XVGOh#A4M -zk@6QC+9)$AvyV6o@!<0V{LAGed -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 -zMCvP`1M4jMJJ%rQY{RDIV&%49yTK3?2cwPW~O -z#4^7L)|KTI*NCV|8!`a6k#C34k&Nj8@f*DLK-jZ?(|?DQNcC+FKh*cpP%H9hNjhE= -z4Nqw!_=SeHu#{7rv^ib14N^y0!#X%DwTy-x8$4ZugUxlqOJEw*UrX77<5d9w|Ho*Kd%SmfSDi{-=DznRa65Zm8~nC -zHz-OrKyG{RH=6~|wBAL@=A0Zts-_XetGRSORMyy6r+%Onk*bTB&F(8{rPUEX!(U#f -z`orvv1WJ|Fj}Fg;hK!gN5HEUs^tnBR>T@Byp=)y5BQ*&xU -z8nWDSvfDlY$3Eng)ZuGz&Hq&WS#~B)NgWmOC`UDTZhehre2i^u -z#o|c#(th-WYjm<*C#}h?1_3&1&phNSAvZga`{T^7a5zDStBxIrD_RORs#~es0@;!Z -zzjbrl3+e#w3cmMb+YQY*)H#-)5SUwXEH!O$(@Aw2{fbZV2J$d6W^E5R-=z6aoN2@Y -z%vbq?=b?0W!Mz8jNs#FqA@^{1rFvF*l4u@y&eR&FYd?MgibBE16gGJTWxm=efOxo@ -zwNriKM5x0cWn;c`d|cQ)Ju`}R5TaJhJZK`x(tp2^7%w<79p< -zv~a|&P9R?TvW4Xwf1)Nhkyc1be^iAdX@u3)0N^404^6^ORAL-ISZC0oKkF|13ioD{ -zriBN}7bNsq9vnRZP;ZQaY1Ch&n>t1`3jx;9KZ@&a(a=$H);U&8vavnjm8&crt+ -z2F$&l$;dt$=onGjf(ku_G -zQ*9l1S713g{h21xnrDZDz1y%FTNKR(n&^nph4z==pA?kLOy`IRB@5X92R~<|E-^~b -z*%SSq?HjpFoY$xQwV(!7VAH{I+VfCC|1oa -zx#pN2{c}N6pKWtUniY?|A*La;%xwv7rU;e@$we{zx3ifhZX_p1rD{N`i+d|UPJ&$; -zph^)l9jkd5AO(SOk-lXEl@?^eHU;$eXRxvqkX{lCx1_BUcP{PZMdzA<`> -z_cm}?oE&c5J~AJ~2JtCm3|sclJm=qb|BtcVUZGKd0rz_3oC~hz8|*bj7S)F9Iaq1* -z{Qi#Yq{A1*3`wN*4+8|!JO}Xb{QQXneV=LNur-cHheDZo7vITiPMOT*E0|ZOJR7JV%{8S$np#@XWp_Z?$6Pg|Jj}b#_r^)fn}P -z*CnTC@<_O?{&U2vQvVXmb&77wWI6-~9!z~K%|~*yNWj}3%Nfxqo|wFa*ymqUJLxGf -z1Ri;dzbYolEBL`j_@}(X}rZ``1Kc -zUzp7%#NaL-d@VFVB%O)PDk5bv0dRX_2nQ}NUXWs$5qKY_J-+_b63%Goz=b(>6DC^^ -zp;zW`nZ#Pc6HHi>;jYdxozc|x8ghB(<2^GplkW1_d$G_k`_)uOW=^K|9md7!KZFXD -zIr}7PDD!tl@4!`~(zx$sOxCV}bx+!(=+>p}dbZhuB3*VvKgL14l8;(+;LyeRk_#GY -zEhDPeKeJY2k!rJgDiMs?<)AEn?FB{nJUMVQk|@oXwQ&P04}QQSI0C6K!bT41;s{9W -zC=P0Dxe)&D&(YWiL;ef -z!)HtQ!9GH=mFSJaAOot3ZP)2PyO2K0p=~P2iTUi}M+a16%&e?f9_4G#p-bGjw*P^W -zcbR!?edCY5KBz*FN}0*@hM;UgF~Q^9^Nkmy31D^q$@uvsPG^+ffxjHCL6JD?^3HaT -zlbX4a$zF^0ce%ydPF^6T#E1v#bEtEQ#tsB~8-So=-JGBQFAIFF(xeR`JOrU8@{w(4 -zDwh9ianPD(a@-5-8NL)N!$d5H@PdwPT>ZM9`}j|&i@7gj5EWgnmgbk27e~nt!W3RC -z`Q_Gn$hwBQuj`#5$Mcnl3Jclk0XNSgM4PSPdjVKx3Qh1xP^Q+&KA6=9XUn$MN_8Wl -zItmX5u@ft)R4O;f{d*6XrZ1bV2ICDQjzMDQuDz -z2UC++Yer>{O}ut_ur*=XU{)ywug*aoi5_;B$*gH5SxHmRMSqnwB;#)x#iTC0>+znF -z3NwT?xe@Mi(c@kct%?O6Jm}=PPi7;@XOX-?k-V&1vJe%?r -zXCYwBBn4NIXp@-trx89CAt|Ym$h!`_qECay;NdX{HkMHp(@!k}hQL!*iXw>aZ-+{} -z+rLQ#l|#z@6;`L<6XXjEKrv^&br_-4phxQ`+Ljyh16Gx_ -z%(4Fu{;jZdTsR>DJ>h -z`c2z<@@9Hpd&`lgn}dL3%Ps&Nv+p*l!tq2^YLr&ttWS#3@!#i!@XMAfw>jL2D8z_1 -zX=x1jGT(liRrjWne?x2C`ZRYQ^FI8i5lnX*OG?!1c$=|dRL4z0!TkW+VF)a&; -z%x}|U&mDDG;~XUrmoI&x0NfOXODuJE8gGNfNgVDma{R`)nBEoi9=JyRzH{9Tj7%Hi -z^T7LNR#u)Q0|5UHti9aYvXpBrvWX5vJx>hv6tEN+krOl{DwVK2mUttoPac%^1w)!{!!m}mbNgEq8ER|yte6=R*B|?8l*yD^X#h`##2#|Hr|930DSGdraEUQK -zgxp2m}rItyuaWC(!9X0TuJ8n}ug0FsuKb6v> -z_Pauio-JJJI!YFA&pN;3toOAoXD|dQMI}v0NM38oOvn3LDwp3;Hwk-r_49c7Ywgy= -zFIcz_tRL?%1{fzNG+5U;pdzb8qQJ*iwm4X5@YL9Z?wGym;SBe8ym`p-_4(lCmvvWv -z0%JdeBFf5oIXUA`yV@O|N9)vSCSQCtzFr+yZU>rfc1BQZXvj6Hc_@(4oNwj`2Ju@Hh^Kf=zaZAc66io -zve0A1GgOX15kC`wpFW;cCeMsyW>8paL}+m}d^NM9@&_LEsplQ#{;t~k^x8p^N<;6_ -ztOMLtv!)rx6;!31ZoJo(N>o1FIbPtH4$-NgCg3f+CTqYpJwJP#1iR(LBC0Fq=bC4f -z8p;fH61JomgfuzUI8G`8aKwkb5!{JsY6^xgiv9&TJ0p5%d+wt@2|^B_g_5hn?ZcIc -zM0-kec!8krxB~+0QLtc6<%sya-+6hKajz%;+mbu^pX$HXha(cQraG7dYsE&0s5h_i -zvPd|!PU8YxgcTjd*HF-l>?E0pW$OaytwUXp9LKW+7||ikaK&t{RLX;tZd85VCd675 -z(_F;O@~=nCT(wQ5B$u4{ILfmc`wWN1lI?RWp(7%OT%SWuW$<8OLskKW5Zw$8Z-J4< -z^lSbmx5ahQ@{mhdj)?ap9IVsJr*$Gy+-V}kK>FezG76&7oC25vJfEb{7}gU+1il;8 -zkaN$NJVJ<(`JMK-mC1JIw#*cJQ5)D>XjjFBIYC4EbG5YP5v$6AJe$6oR5HrJ`pHdu -zr>`YyBxPcBaUSDx$>SA;o|l_HCbwTTyh4IK%?@fkO%ffTgV*v{Xv}fK>|C>o)LJTV -z-t4ck_MHqVJ_;9~G<@sp&?9^(T&Q+42>aHcvEm6gCAu{p?)9jD9OWxp(~sLPf{~4g -zgXFy17FyfeOR3!Q3ZlB*E2wm#gwy*2zK -znKR<<)5pZEEs!D4GLunKw#O=QR>~+@4ig484g;Ts`*UZFC_ncq9WQ*?ZLXQ~2I!=! -z!yC+kiI$?t)9(YX){$YJbYre?b#%4~pp@!f9pUH_Z3EX^x9fg=W+DWxGPJ)nI)c`V -zb;^aR_Y3!@E{usN%w~QZ^I0wMnQ6lyxIx$~&O5@duVmWojvtJlajz&_JB!KeMBP>n -zQBae?E6j%mQL_l=K?AgiUtE((8E7dmY3V@TGF&f56^={rzLz*0BBB99W6*{oxb;Xf -zWupr_4HPEvy56m@i*GG>4LNn`LYii^&Q*Q3ZdNGfWy1Se#F@R*iT}+vU8ov@u{%5Y -z=`&;I0j{h&&fRiJswLW~oK&akn+HGd{}8N_lS^A{(VNNZO3x1HG*0K7fkNT|KG#bJ -zk^+5=8EIRME3ACV3*S8d6CNcUA%{#K<$fm(jWJ_V6@)ZZM(FA$B36m7pFN(L!3$0% -zie9ZuXY6qCiaExss3yyv={hQsXW9{jIka>*J6F8@21X)vtI9<+?xE~{kR-n-Zr*hi -za4u-iDGp>yX$gwYH6wh>i>dk9BD6X-1yFBR!W}d%r*^!z7QRL1Mr@@gJP+PwdeLjK -za@!^fn?mta2fV7Lff8om*_#T8BG)m2Z6Jq8jZT -zietyWr=eqpQ%{qPlx2zj1>dS79C_BtJAz^z=J{;~l|;5C^y7EW=Q25tO-LS@B2DGN -zNv_^$Q~KJCFClS|n3@V5xd9U-1;MLolkWt;(I#eClxKOdZ4mZBiMD<`d8`%86wUVka#hmjg$63a(~20w8nb0FroFi6?D)R*WFM@7&ZdtfI6o( -zK!QYiM-v;z5X~jsN?lbbRM6*;-j<(-Z=82!PTCdJI|aK>B4G<^X@A_{uRNVzd`^Js -z;RSlMVUpL;%VZ~N@c!4b;LhZ!uXA?hWg3V$x5jbJF957dwgWrdgW|e>#Ncx#FmxIb8X-LndxtdF0d6* -zAlx_i)EX~aFcU8{&) -z4exc(F2g!M)tqW7vK1B(Yi{d1CE$b$<=X~Ed_jphq_p29rai=M;njzEGPZI43x%r% -zF)!O}tEG^`=Rg^3*vv&4fF~M^W5JllkX83B`*HT>L&`pIOKDKmXW`Qs_A38d1o+P& -z=8)U5i2rSITxtuLK&aK11H#C=rMp8OyRK-vMvPq^lY}ftiraL9Ltc&OndfX*o6>D} -zmG!DMcgyMhQCdA9a3GE8fAb;Fx)*k1jfz3H*~G>-4{+%b7ZGS4?fyTD41n-ZBdsw!|$f)tdxi!_pS -zn-P6gCe$o_d~Q(!R=d^hcd8TWP#c -zW%9FKe9|dbqcH8sQ^>+La8wY%=8io|?)!LOlreROFzohz?kPJOGB(9xDqkjN@O_|9 -zw!uE4v9z7yrlXXtekb<-m!#WYQMWBqs2DC15XlkNfEZL*NnE}XwZ5gai7LFYdFcu# -z3nFbL`xw1X*Y%Rr6FZE|6%>Q -zhjqB8{r3i;>OT_WuY0jkFd|Ob1vDV^Y55O?T8kspOW$qCUlrj`|K$6FBKmNT7xKGz -zYmSPv2P`4E%hsv0oQ&KegBpWp*ovrD -z!!M-{;uRR&BQar(m031f4CUfk!XqM@`H?;PzSdM01TFXXn~hXtv$=@OeXa@LLY({i -zu>zT)s3l{xj$Y_8)uYU)AKmXmUl`B7W);`nadl3c21lRR#tXk0udIrFECbL8l8Y$_ -zQBjy|Q?}(5TZYzDJxv17hesxjZd7tW;_z7)njX^$4~S)?o-JI*^5f`8JRMNxs%h>5T|np`^XC;3XOL%#r%BZr0PKdiuM6w3V*#RLy1H)sNMFxsnmJ=yZWuV^nk -z^L)7Qw2#q8Mj!4rD3>^a9Z4<>3l+MC{6Z>N0WxdKFW}R6zt?ff%l||*PX*S$SZ3bJ -z`B4BgtO^bO-R%3YVGoF})d3Z$)-H16Wh5iwg4{+hm2BMphj9y7JJrF#ymqF&Pmbv^ -zOZlYDEoth=E~xJXqUZ#NaUb6}5pw^!)s}}m`i%U&ZnI8K?%sABL3|Hxw9$fiZ-7Q@ -z|4*vb3Ophq57e*mzNnjpE|WpdUuOl8!f;>ms>hwqb}p^_e>o1N1q7Xw1=!`@{qCAj -zlm~s*@+4X(ynJSO+j-GyYqGpSzNw;i9z{fe5PDV0HL>v<5>!ye&Ia9B^b^6O-GUU~ -z*8YiIs9MV_TB0#g)^(qZp#RqLnMuqfdk#V<&>tzd9t`e0K{xmsipJeQ4&2Vt#W(QK -zC*uMUvp7N28t)vkY=0+D+n}wxz@emmqZy4b2U3QGOG4>KMNSMU_aQ0&f#At~+ZHfg -z{tF{(D@Xlj{3*kBqnOGH;>7#=JVtE2zWm%P*;QGY&v$L= -zU~fbbL}Y+qvR$XzVj;9$uN}kGn+*s9hq$fqDBq)iH(&n`-c&3s0TA3^(NuQ)K-W0r -z03B7AP27L>_8?^IVg89-;5GjLz=G0BWLPIvn=z~~== -zyzzXoSFxog>c9J3>1%b|uc(SQ{qkeZt~A5xfB5juqIQ~($;P49{mX8~A&7jfEe{Bu -zDwedL+^g~OX+x}>mBd?Sq75XT5EA{kZN?R%doatx0oHd!G_?f$eSo{ay-AZ39B*2N -z7h&DzO%7nbs3}im+%Iuo7L?BHy)JLqJXGyKI~@tdgDE#C@$aa1qJUk&orG^pmMV9@ -zKuZ7pK+ocVce=GziYw(IG1C5Fd?34%4jrnxq$GisOIKQ{vFr8cgtxf&kHK2jieq%+ -z+!YiYsXOpOvgsC;Yp@eOI2X}$bdyncrgHK0H*`_{11EMz>W+t;c(B;-=j>T_F1Z@= -zW1;3bssW!y_O9}D05?TGxapN)5f)=t^;N{$|t`5Z=ot>5UL;V>q5{ -zS+uY~w7F`1w(70yx(XJFJz;Lj#QbB$oKNPw-LQgvE -zVwKpj{#c!kGvtf7g+d~M4pqa$QMHMls=e{WcJs!*+kRjC<8;yj^NGL -zzy$!GT_FZg)!35FwB5&^o}<=e4-6EAsWxrlOx_*(%cC4euc#=nlYg~&Li=i;APy6_ -zu9c@q?IKe1e$cZ@pqQ&NB|}nJWHcPz3F+*-BFfAz05v4g-bd0n7w5MhLWsFt(|>Bp -zX$AQ#9TOsg7}|d)-$QZL9qQ)4u}#B^8JE?NjStw@B9m@?gqsvWv~QHO=uzx5WChH? -zg4QD$(44wjp6%Ap1xU#t$XjHW{lzwo9>G&KDYqll+Qmak^Tj9~Nt-^}NA2JU$DZZ_qqpvjG -zfM9fxNGOE*QT>O5Q*h^>Y?Kz_-0BCf(ar26fiK;z(N}J<#hqV6rUgsn^Z|xpNjtNI -zBAEb*Maq3qdzJ`d3cCt<1b!)yhFSIjqo -zj5QN?>%eT*2Fhmfo$2IE?Nj@%hL$Q_bib@)GmGW(psBaPVi>b%dz+0V{Z@~r7XZJu -z{9ZmR^}L)V!U&a$?7Gj5QHP!*@}kMB&gIc?lfLfMjSbcm8vZ`W=L=?ROeod0PCYJ( -zQBv%sgA*@TDi$eH=FC2TkTY~YKn|9#=ee3Q!+AD^inLv`SOZWQ%z1dqq@vAATB7dQ -zJ0AoSI2ui1W`Sa$s4kyt0|gNbi-APuYQz&|Uhe=h`!I;$;jxJHP42BgP+sS=im&{2 -zy;>2)=-n^$bJ$u3u7skrMb)BLMzJsvGYH!ve52O$+s>?iiA^W&wYzMMBgNk6HtUbT -zsH0WFFzeUiPViVt!@9vcpJl7;I)%eD!4pz$YixT9Ul-}$J&=XxP`Ck%$~CsbOk{gB -z)OM{5>o4mT!*CkDPlsj?nfA>Nz^_nDX8T}C!v>m%Pm+yR-yLk4PKzykrj7RSOccO3 -z>DK=E61GD*aVFJfnD=>|7klS=uYJRAD@~(ZRBL8(TO`px%Jnh>ck;MaiGgKJQNFp& -zn|Zgxy|ejU3maUNTVt!JMChD35FnzyeMvYzy5*a*O8})nzH0i?0hjK*4Ww7l6fd8q -zUNPss4xoL_bxcd8dLLrPd7F0<9vGwOT^qc8iiZ&#>{w*R==P8Uqw|$^}=gN)(k#;y;8rh$=fXue%FciBj!{`Kyi(x`Y^ZLI_k@GH^`FfnttuYDvpi!-zVL -zW#5d04XU9D6u6&I=V2JeqhW6&dwE&_B<{w1xWi)$+F&d8(+vH#RuLKKMfsunv^u`QYto>km) -zXb~*dgmF1A4>6zFrtpT2Nh&^vZ!}kF*^c(=lN6s(KIkU1ja1LXiWkRJjQG$g0IG3c -za3@oU>2zN#`KxjJ{K*d|yzqI(Nqq_0xz!f$Q7CCA@>rl3mo)Qzlw{#fZ40>3p>T%& -zB)tvY{)fQAgTnFIOd|q|ype1xtzDMz($#VIyOS0h_NQMr(y5T-Eq(VPl=hB4S4jj% -z6V!T+2SYov77~y}@4$&U0%8%~NGsDzVc;fP6$yRw-57dR9!>V8)ZmQ|^7%Pm_hBEa -zf!9Wnh8`K2TqO+!VYE(k>igDTKWgxG)H0BXdvjF~)i%4=eX@O%x!XqMUner5>>-j` -zgEhvgMMJUYC1KuXjenU&{(q!X@C4RY4|Pzb4^df2kNzLvnP>E0zOBpC=LaD -zRL_j&gTPicJ9*D|%%hb37e~&vy$^ZHG5+8rvXwO2UZo{6{Cyd+G1A42MlC0*hyPM= -zsR&3})%_>uu@7$X%N|!=#)l?XkPGR5Oq^$ -z*tzZr5VRcH528?pT!B1qbl75!6M6)qLE)}P%L^PkqaVgo7+@7WGxb?V!JWWz*Y1wJ -zaQJGlIFL*7|M{#Ny2zCUruSN+l5rvV=50!@?!gxI6!Wy}-SG=>PWCVX>iWq4)?K?W -zVxpgDG0+iqx)OJCIlea6S;QJbhaA}1ycs`^%DRhKgFJm#xq6-k5vqsV5HEl#FALzt -z%PMKUK{lGrEO!uwK`6m763ewXKBT@fS#+nPF*Wd935Q#?Zi!(wX)qKlpqBR3NDAQq -zAu`D~y;9wx$)f9t{ByY;I^_wO4(Ds=nMa`kNAaOxSMp6TxS$+Hq{R~~$}7+7>>qhh -z1qYTUNoD6>0>u~f7hsyo?4t`Ps=*z(+jnS+^KLfAL(u0|S$JAeW?`|66|=-)4sgF~ -zE8}$;{Uf4~k}*BnOps00&2bJ`K8oXbb_qAA&Yi?|<+H3q=^9%h$6utn`G#-MeXP`- -z&a)S<1pJah-|v&wAhiR?nb2!MdP+W{bG>7q6q=WKlyy925H$RL8n0G(=G-k)1J@rP -z{n3m|vs4N&q?T)H&Z1w{pKjLe$f@Ji`za02gg-TmU7v6z6hz*{oi-Y&{R` -z=pJ-7V=@^G{R}|cDt`|c_jjD0nVfO2!m5xR6j2XXaPI`RiS4;ZN~8EMrz$}O%Q&Pp -zkc@axi~_C&-QG4nds6-{y{>65jszXK-K9NCS(9Z5v$I#smA~cs-HplC>)1LsHC%@BANk|xmwd@LXQtQfud0v53kyAb-a7wSN}(Y -zCOMA*j_2Yj>(E|QWXlSh0nru`kc%}q4<~`WntBiI^h-j6gu#0jN{;AJsHp7iaU97C -zHF>Ct8~ysm>yB817g7r6PBnAnOb -z?7-f?f2+skD@8Z6@2d1z8}70WI!D`LSA;?|6|DFo -zYB;p{D9I8&JQC3XX$^iVC;0NdcV$=`c%EB9-g0+nH<<0ZqOunZi|$~6*blMpdqrg$ -zr?k_)_R?~&R-O(iwlE6%s)$7D7SJz0!I -z4_~cMCJt6d7^}`J*lF=0G}+HEVoB9b-FDWuIOu+zT&rCBl;e*jBh67X*lWap#<8wyh7J^O!{>|jW -z_s3~7DtM;QGH-6lx5d|4g74NaRyB^TaZVhi4rU;p02hsgD68wR*MPjxp@?pktq2sE -z{~P*ix|O>0>H$+Y=U)z^F*B#_0QbHn02fBT=?)QlR)`%(bVbI_p$wMRdEouG|DwQZ -zxDFCFIU$y%%eJYy8K#$XzseDY-XI0{nik~z`7SfKQyjpxqRxzViK#sG#g0@heO`9Y -zRy2gd)uE!f3x_e=_p5ufz+CyJN{@!EC}(*NzbYOt(WaP_fU;$d-OJ$lnbwkz;SMNu -z#&%ZmgyB9_chkX2>tt5!w=@lUAGmIIYLWhlrq2hAKmjr1!;LNO*S;EvV7bS1SH -zz7U3zkq_j4_4Wz1`j{%>7OMkZaa+UPJ2&YS4FsM$H7y6q$|kl4ER!!EB8{UemPhj; -zp?026Ur{xyyj%f)?G-%z$=lGC6A`N?E)WOdB{4eXDr -z-Ow9Ej`>7w*{`;UwstRKdxh9(<}urj`tSLlr##!0wkBSRDt*JB=uZ(0f_ -zqHvR{lxM0O9<+07CkZ#Ce|=EAXmem38NCl7GLbo{BArHkQ_2fDm;!b|k{!3!kTh3M -za5|!5;xm#FMdD5BY`M^*_3I-~ZG%&$RETFgygpJ=-Q;UlEN6- -z&vbm6tLc2-j=fGLg;2%Op%+?~$HeO5G%dF{>pW4o3Y?Y+Q_y(bu$aqkw>l&wFo$Bi -zBlRfpj@?9xp9D4J`WLjO#*a(#OI+i|5Cz^}1Qv?nMP1?({gBc3FZ^QL#ck|<9MVGv -zDy}iPB$?Y-aLGKwD-4M`hV2r9F3u*;DayS}Iz_epWLJELSdTEm1a1!`INzhUpaqd~ -ztNawiVpe?RI-Y)xIx-Th<&UbM7WTjNyfB|q`MGLQ#L}(SPZA3evGR9Ql(Wjks}8gc -zn@Lw$O?nW~3##4OC;?hEXKccsWTNPaE-z2MdNy;6e-4=2%!f -z@8C5ZzaPkin))|GAQCCF^Vmyn%9oMpg}N!qJ+XvcEA$7_JBm8=AQZz|ni$GPT-72Y -zsCzxhXIu%QFg_iP3af9nk!hI9;-%qZ!jEwYaxA-gCCo^ym$bpXOve0IuWxm-BC>?j -z^jkXw3Os!Ewv(xX7bvghB*UvLPkEZa@P1>i?=bd!H&+Q@Hj>J6ipe+VweO(HmB~vX -z;%}(sk}@Z6xQe?S{(+O8?;dHlZrc@uIX`-eljD8d;bE&>2D8v$ufK!DUV{v11||&l -zV7l?dG?yQjH6bINL& -z^y}ekYUi`nx+e1A_mtvei@Krk=r4a= -zzigH_xZ*x@nF>p4t|A&XJ40SXP4Nh8+aD;Q(ZZDoOFVkKPGLIMelf_20!$=sQ{}bX -zGZQW+Z06u08kBAY3PM(sAb9(nZBWKVJ@fe9oj<=?FzbMbL`w3@V%q?7OqItFxmS$5 -z1&)&>@dIY^Lr7z_ze<)m{4nP$@7^z}XpIWcS}*D=euA9Q4BMGnsw+W^S#&uY2|^E) -zC5}C6vCQ5d#5fRUpgq`hs>%ob7);^}sA+tf-$D;as%x0G10hxK`F9)j@WZGf!q@05 -z*-nC*Y0=QLZSX*KA1P%o$erAi#gYrux=94K+}$C(XJ2|N=XTN^MFhaDwt9=~QXzLA -zeV$$^s)1_NOVIa8pKTb_j~R*7kDme|okX4>of1(33xT}$b*X|JqNl?Qm20c-{s1rH -zu*58l<<}qnk&Tv1{ZIJ)bwyxb6t}?&VXU$7I6N~eYDqI~;s2#wh~afPK+|T=Vp##Kj;J+e|JD7-YeUVM -zN`XGU`uV}#OYtmri9VFW(HZ+8Dcdssqpk?|qxFd0ks-gll2J2mB9vm)JaLnCvPtz>I3bF&k*v; -z>JaGTQ6o=QsEv|k3QI}CnxMM2p|TLKj@omW -zDVcLE3Z4gi9gQ^)t-qtCoumVbP_ -z@UVcB_o)-NMo^u^cr>+qajg5FNlSG$`bMjwf#*l&2`Jp6P%$QU#E+03MVv02V1BYw -z3qkyl5LF(bK5s?*2X(S02j+SAO*bs~?<2!O3iTJuUK~Z7dBuk(!lz!^_ose{Y}|3g -zDXpAN*8r?*Reb&~!vmKcX`u1pj~I$LZ>?Q`1`3LWM!`NktBMh$1AkC6$<>xQ`mU@D -z697@&fn%S?h-htBdG_&ri`Xph(pm>LEQlo;5yL{F;^ih@vXKqy&`$CurcsCK5tr*? -zDQHGWk&`j~KXUchBLhcTQju -z7@rG>PPQoEoL6!3Y@~~b0;(TWGw)=Z@ws&cXG|Wh^4MXL;ej_gNTcQVj@-$=Bc6Xt -z@-OHJ=Ez~0_1()_PIDFP8?&L7$~cJUsC*RBws1PJt`Y#gw+sbUy0gIBE~`9zwzW1p -zJivKdnol~yr@iv1u0Ykn^|}~!jbYW-beC5X(0TFjYxt&SjHrT`x;$yI<(v -z+~Iw>oyD=D&Cp@0%AnxB%xCWC`Ba*c&@R)$el+wH#o)xd8UL)Hv5g`+W@9_UlARFp -z8dA_2g$<-4Fb}WYCvp5i2@~c`DDQkN<9heu-XHA`G(}i+K*Qx_j2!CgJ1#QclZGx9 -z{?0`9xptbk09As^7k!Z1V5Xadhg5%hrM{+bK^-1f?^2n$yiqf^=yug}1(x?!x{uD` -zf@vWpPq(0AV~-YyVSm?-m7J1}ch!V<(Cp5ToQtOgHL -zxpXU5GgqtDzSS?vAD|mO-L5# -z3>Br3?WralM7tv3@9P|ga~TK6HG!0v`zH_onmuXo&8Ql8xO^@qp3qRnZpU)NQNaO9 -z-n4!I9b=>oWH%xq_}xAbUec9V)q -z?Pd`xB0E^N*2=tb*1)&|yGC&r4XW5#Z^6`?FKeTCx30x%N^$H4rTjGYVRSoP@1yus -zN@uhBZij%|abYQGltw*4Xz;yk<5VpdWEDi!`dWHY1%N(cR=y}LS&#dYjIyP@8Fm@o -zN6|`sHqS6}^3*3kdKH7RddGE#e7SacM8(Y472rMTlKj%_LHFiKMPY*cF#IFvfQW*a -z;V?9i+)*~sWv+FamQ>Y!=yoaI5f_errug=*2NrnTK@OSoy>0nLj1|SN^F@LrEDt$g -zNHo($uz|0Kx|X5H+@0>H4KoLC0Or`z9vaT#8sUR0%YDs>pBPBLua?DLVo7*%Z{VU@ -z&=BGmn#PUF3}#_N$V%XchSLxnhUj>DegPXm74DbGydlDWgRT6FhRgb*me*ioQGdK4r=)TH -zv9BtE9EZlDw67{jHh#y#UFt^bvynA>+07aTNFt4?PeRTkmaqkEZ_PJZ1TFl{^Vrar -zBL2|x|K6jR?wZ|N+}*4QkaP^eLQ)x9KG7tm?!&{}^<)JRbbd_6G=_KnXkNJbw8KcI -z&hf3sK>1ORlRJ2c$7u3=`)C}Uq$!G&d%HXyuMoWr8mvq;MWzH+MJF@(DWwP61=yf! -z#U@W+!qD-;O9$mE8!?yPxZ>^xFhM#jCJ^0rUduC=j#a^}h`|sp^;zGsqQV@h1Njn- -zbel#c<_t~6{Wkgk$=qLtH}c$IXMHj`@j+8Dve77j(hR=6QIZju6IM`3EkFhEGjF~A -z+Mp9S<{x3Dx09VXf#;r{yoiV7=j}b@fVk-03gVneor+AP#wh*HKGaCIuJpM>;vu-E -zKAhZ(^vm}WkO?i)aPnxG+jxsGO+je2#_UidOh -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 -zQeGTis@@PBLm{<_2aG;^DYMr8)`IXr -zfPGZ`M5=(=0N{Qm$xZW`#6MYU5<6B5TIMI2%pEE(=)n2yIJD4wRN}QTe0}`vJ89|S -z*1WE#qRmoUpJ0YvJQl7s_M_)C;R4kNpTlYz*X1N!M~gV*$ks3K)nC^DCaSed+wN> -zY_w*MiaiLP!tnt?xZ|3v=eb!6CuGp@Lvk%8hs^rbZQIQWaPmjVK8ernq!qPNtC*G1 -zER~o1C5iN&y( -z``b5MVb(BdF$b?6-EC^HuwuZFXVzS6L&9@|VIt90(Au{WI5*EI=Zc)+5zzJ<#*ysz -zhp#V -zVymfw^|p|1v-J1JUk#w{qN{%>yPlaL_I(1GJ`301-I`FD;PbHH?R{kyZ7SLEQ`i0} -zRXnlAw?U~%J!c?lxR|~T*7Bcau>9jOM-W(GM`Lw=D%j!|kyf+4j;?P&DD@1Mu8>Syk^X4haiqd|r>#mhhN;_QXMWZBvB6N^*co$gDaFCCW`DBR -zE|7pTx!Gv>?up328r$i(F10isIX7<)a9ZegS`Tp0lil4x=k4U%HJ;z6v~_Rj70p%W -z{L<&96llL0q$GJ{=s=8=ow&s_=CF9a?)3p8n|@9_5RFF -zH)wb-jAKX7ndNXE6-t49B|s3%^hw<@PkgbCV}w!L5XzROKZW2hTqv{6)7u7t1>9=@ -zaXsUdGGoHC;oyLYx^ueYM0%$;@~+7m8+)kYoQy}^R;>S|%P4N`uvXmtjuTA;gVAG; -z+m{jywPQW}ay*&oO8RO8QAY36YPq7i7ng35T_!teTE~jD4nNu`ln*{Ef|UDgs_8nk -zUgIq?ScB|h58=kq{oI@cFJXo?Jm1MUU)u0mi?zqrZG#$vh;qO{CK-9h^AOLPoZSkd -zs0x2l4Vf_Lz_1l9ZkC+Bp>G+_OAMO$*;0AuCIrdI -zOQlf2z!}VW*$Hbp?@+F>NK1n}~{DWmaeVT--wdygaDX09Di&-c^oQTgCxN-Gyz- -zKZ@q(LAWb3nAX~U^FViOz%usjo7!l++@Rx^k53AOixR(A -zaGmI1nfKGNoc~#Ni;xN&ntD*(-oF8&D%Mn`4((aC0jRv2skkP3BP-hyU9s+6Skbhb -z;$E}%M|WWo-(ip#DIIsWefQ_3tB- -zY^G?^Qc3S_)~=Y6mx2QCO^Iw@q)LJ9osJc0rDI35C`1%Hk|I%mHkwJKr}Pu8Q%qd+ -zUY};ChR_CY==3mlHZ%{LjiDQl9OI93ir(F}!vHQR{D~~j@bt8EK555m38|vno{2kl -zLAOv#Uy_KsXXQDMDxXNIdl}2Izb~>aqY1)S!FAhKpBf9XBt?I7rHfXV)cd@8+3m@5 -zhqDMJENiEslOn?VmyEzY9t=vbozBU3EJZVq&?( -zRtc69{rgx>t$0aaj@1YV87kE-3u+Z9crl9vVOyQX69CleFnRU+%c*_bFP7~rnx?2& -z0_wT>T#jz^i=K{j6*Z-hRbP(pw|V%ML+j -z&3NY-4SBBJ)^pY{TlbIYY}Ri){3=TtpM5KvLV4eZTg{rR|EX|2P%JL9tag)x{Z${< -z0E+Bg3zya?t~W0n5NLly`a!bSqmG&dH_p=jnucSyrlgXAGN0KHGMn&&4Id+TTj*>~ -zNE=T70wd(vulh@CI@X*;^1iyN14{*lWY}uCmg3j_Ix**O4ALgTsa6mx~!=Lb>+0?c%%vwNGmJHiSve4^j=#sIN*T10^ -zHl6nywWY?<^PvR4bf-iQ3GTMzmE#p`_q?@2IG?8GOXxaclzM7f_$%boNVI0`C~OD{86 -z7OWRegKA<=i7VeKwlipuvhV`C!mX;Z)3dH%+XrMz*M=7k3aq;|O -z7UT|@*)$wkpP|=vI%xz!^9HQwTB+tPY?zYw_}G7Ae)XuNl+)4G59Bv)gl)bO;IT96 -z9PWt2oMARrHx5RJvb#q!{#5Sydz3%iIj%Tj7ar@U3|%Ah}mh`a&gj5}kJ -z+?ROaZP(fi?uYu)*ct6<3;PMvZMe{hG~FCaYhNh@Gv#=~gaPap9W0(?*COjiL*8Nk -z4pw3f?lF?JnP)OXRRbyQTPRPEC9tpsYE}ziKyVQ%{D*x}vh6xH_jopOzZdY~`%3-K -zo+3~Y*30RSzETblY9z6GY94&*!#qg$QwWdEIAJN$!Aj(V$$(vr4l9fbdFkK|0~EAm -zBQpQz@Q7flsa7?%g@pG#gOjh{_y)|pw-(^R#d|$)m0B4^xCcquQI2;JEvmA~+~@7+ -z5_@n|a$e9KX*G*sacDGmxy7XKEqy&B2uw?Lny?o}B>KprcVNZUZ?kM&ghhxL9uYyu -zHpt2F|3UJXJiIv<#F}IG9`YDq2pE-;0=au67L-PD7?VZ%QHY@}3#u)_O=SU(MqR$)K!NhX4*nV(x#XoLjhv$z!! -zDtkbZKJ6vH -zXp81SFM9RYYkym0E|!99@4$GEY$%J#Y1@iZwlpGMW -z?;2~$YBcNu$JAnR+XbRyueTOWrAgn?*EJ#JPkj$Uj?GwQkgK(VGP{@;8~_@TknCBt -zW5qxY{ECoiW0W%Ai2gUblOD_nnrtrc+|*qN&x5w84{S8rf(@~69WHPO$NU9!bRR?p -zA*Ok0a+DDfj5xLlo?Eo~Vsg?#v?vl@N)g&Mdw#O=RLjGg1A+o8A2$$!Xp8i -z%aks_k+gyghGvNvMv)$oS#?V8N{#^t4Eg%o!RcOE#9R*%34d~W5`7Mct9`w@p4_UA -zTN`MLb%A0~J?Nm>6fJ4sm;jhnvU6HpDF*c7T3YC2Y2FaWRY}rBmKKwyxFD=O?&(c1 -zvAWWl+`n=8t9yhi!;4#@b3+UinhvZfvc~g{y6yL~*-8+(w)71m2k0l+ohT%M-eAv= -z0rI@#sBEQYrd7BZPHTQnS9n|&Iqt8U)=3Yf&jOw#yW)n$7Ja -z^L2*r$p0ix4{!qw$((MiWOi9 -zLphHYH*4}{4R=pf1ioQ6zMn0ll*t~53XCbb((WX?t~7t;|5SIn;A2wxFe=mzPWC&v -z1mnmpp&DV|On0db#Xxrhq0g-h0V*4-?zSLI%sc*79J+=pKtP|NaBMI -zTSHZCcy<^&eRykyS_o*f2Y+!7G32hNF+1VuKCi9GtbOIa*UIEJJ&|`5ADwGbkB)=Z -z>zI%CNU@P@Or@V(Is1kflNU!x9vxa#J55u@forXO)VfQn7FYcon0&4@JK67YDNF$7#(@WI -zr^YL+@o@o^&$+Dm+wc^fmxxlS_ZM4_~FWuySZuzlGRsPJeE!8qCVM?NwUI -zT&jcti#y(jJi8)?ZvxGcO!@a`c@XY7CA>e7$ZcC2pDt1G*TC4*Yc1|Mv6@UrR{?K4 -zzh9VFQ>aaDqU;-x0T|)6M?OEuH*(~GmF617?W!cZ&a31(ZDe|F5-I2>r(Xfg7_;+q -zf8v$t|NYkl02^0#c~OAzin*wv+E`eeX;2Hudfc;)1uc?~ykRfTc{jQbJPjkjB{mOD -z`HyIyme~dT<1?0S6W4rb??bWC2DBB4vE?LF -zgSIzyY15}nbD#}uI8)h|hMV^9utw4&A_v&0Fo((`J>ke|tzq!uzHaBtbh;}@zRj&y -zP?ddJw!ZxNdw1@%diCZocGEZ -z?vG*VszKHL@25X#VrCAN?PMQA=}C%|s3Ahsa|IEWmp%p44u)uXNdkFNxJeB64kIKG -zgYu!2t|#^OR1_NNICuThaX9Npt3kecL!9;>}tvHx#5y#&8agkXh7Ih<#-Dz1!M!L__1hl^mZTwu} -z>;i(K>#Ss%->lCSU^Y(VY>A6CY#BNl=wwq{dqYMWGR+GgVG{OHt=u8}hFYw12MOI%B02-aP$j -z3_}dDsL`Mmvak(1oBPlczo^b91iPHC9U<>Gxo?xk*0rQZfzQvmI$`*3cJy)@s&PIl -zO^jKS3+F0yy1hpd3CA41itqc3sw>esXPXAy*<#Qi$Et#me4|82f7G5Y$sgLuDOm-aXT}L9kA+ZXoG`{}4JtHqMuR#)m -z@i%B7ZP1RO=edoV%?Ug-OkH@AgtY=2b`W+;o1Ui`QS1Mf1HCmDUy{X>xkwA>L6e>w -zgL@{N`1bmjCBk?|{|$4I3Zh~q~+b$?#&`(Y}233-tkL1Nn&??7#A9cbE$ -zVr}T0P1Ic}gRqm08i3lb?ZS4{Fp6;8$pS85)en?TbN -zUyaueR0AxE-96x1QPfn-50%r5rKw3CEOwl=t -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 -zZTFhc-eFv`!R|*d?v-{hW5ovvK8KKblF|7 -zeJX}e1|!lVdR$WT6F^~Kgvw>pRUU5>%M|zv2DdJW&+B==^#=h*c{8HekL>@su!i&M -zePHqi36lwAvNhL!Xj!&+C2~dA$U@=C7tA3-xOdiGu{H$_A8>DdzGu;?C0&g9&Eu4D -zcJ&u>d%(-Uu7WK&O1?!v?wwBNl=Z$5T>YUtO^(xS;~X(C>|%n`m1F|L1#wx;ZIG6f -z|DZ*LJRU@^jbxT0%He!#*6hk5z1I%Enm$kMTkYVwPZt?r -zNPqzCl1<;9zG!p?WMcOnE%>e_|C{q_rqSYv4eB -z*zePRHuML)X@~S>gezW!c~6}e2G?+B{1?zV0l;hYjjC#)*Oqz$nu|>3mvfQz>GsoE -zkZ#A3+JNu`d-Q^H%DX1r -zVLrD_h~)jP=KGX_6JjgTMY;R(&^7LM08b3U4YHKBVz$PZz}UXd)vp9yov?I@OZTkH -z;Ma5a{mpSt_lx*Bqe<1jd*=4xd#;`_lievriBF|lUeE$h@f63brWVGM-w;`PMcI_& -zif$Z?NJz0-xP?pcQ)O%_t(1_9?R^^ -zi!nF1pKce`rcy!69xJxg@_0tQISK0|aQ!>8XUD -z=n|PasxOF$0< -z0m_bK;Vi8XLTWCsRfMmp*du9MurD36LKN!>Zb_tsP|Y_Hy-v^|p@QHR8CG^ypp5sy -zW+HaZJ|(K@+kR2!^0{80rnJg8WRh_`V@c*2pepi9@=2xov1ui!Wx&9SDHzRSO%=@E -z=GFhuopNGMSo$Bx5M6Q*ql){Yg$Yt%i#V~Gpma(fOM7VBg`Cm0>lS3*%*0Xz`;0%c -z;Vm(<#`P^V?k&0H2k-ycNeV-{Bb*(m%k0aL=m+P*gd{)s9>*SB`CYbRw -z?`(QxS@3KyQSjqHp;Q}jNEaa6X=2*(Q}v77{33JAv^2mcI^I!}a;@u1fIpaR7xKz1 -zY?U)~TsdjBcQYFq{gMLd$PqXXo|3E9O*c6BF*74Do^eP5)Fl|McK*i#x2=@EkhmUw -zH{^`W9H;JfQW2inQ)fFx_M~r(N1$sdTV1ZVlJ+r7juBC_@^q0d-=@~c_GWSu0K&!p -zteZMpLau$l2bQ$8qnYauS6&rT3gf0iv8gy72Yl4!Yd!97>`mNQyw=6l0NDLrvB>hm -z!#JigaMErjE~aN(OPh!)N-kB;RAQAB!6j7xM?1h!!AUNE<$!n01Xe+I|2*g5)G=`M -zt$*8qc-Hxyo;a5LU|*sHUaSMH4bhk-Ag~pYavS@u@NiQxn&5_K!jP57UpZbG)k*2> -zeb$qEZ1J`5bfi#_qT!G7XR`@8iy12%8bDDcl87igFDy=^Ait0(zlKO)xk(aFe`6Mv -z^GiRVZj!>Usp#GSH$ce07b@Qm>*PXA(k-gzu*)EqUD7_WZ2=oste}!BW~tKcVA}l| -z)cDe#Rt_Hm{cGE~(>-Ra&wfHrz>RMbCY{py?XKp29xlR1A&pV-op;1j5ap~zNeS=D -z>HZ}RlzaI7?)q;mxY#oJILAzzotk-OV(~MGQn?ECTM13)VcLbIkG;gu6@Oil4yC94 -zioEi&n6kK*Hg7M6jmE>70#{Mel`^ciyVdCpK+`i&7TOwMq~K^u=t?3bUi=-zuImhW -z0uU-Ik5<-A^bRExa!v?i+&dT}laiDN8>~LK*ux^YBy=p5GvEs$@PqoqC)H0c-Jb6t -zHs}CUtf(pM)O*AV?<&pljs3p^U9OIw?ul?hiBsoJ*;ko#Hcf)8k{KfCy&hW&$?f;! -zt1W$x2c1H6Lubo;^hKH_V^FGlv>nH)DJ&v5;if0gUKjum}SpC99k{!vQkp{Het -z^KSe_J++zxtdOl2ZAA4l%H1ouc-iwAMAO_3vs<2|J2?xtzzvFu>@;h+CjKyaDMfAJ -z-ci(bz>jKfDOISZIC4&$zy0AmrW*M$MZD8x^Tt5iag|0X&QTS0Kx -zQR4hSv!asfb*e1Ix3t*v@BxYMZK{>IF>uw&C~=JJ!I|U??v4LqwWQc-iGultcP!Vk -z6GkWcT8mH+D7opU?9Y)~@lwpW{L3S&Sy{=16VKaYs}SGmts-ry@XoBboA;;lSFC(z -zJW@6*k|VL{jWVSh@W)==&|1l$Asj;(U4pipSy2Whu>Ze5aW&>X08svDn?jLs!ANzN -zp3IY7wc?4XRM-3-U!5G#?hoCKCQydSWczL~r=IYWhS*f|`e20e;uO!i1!4Q>hPfb1 -zLHF0_CkKe!o@*^C-kTga!GPPQZD}JL7`0KwxCM#1BfQCs-g402z1?Da9$&$Fa6vp? -zte!-fKA8hpO@_p2uP22&`_mUXsOqcb=^Q#k!QBN(uk~Y&O;!$av@=DJWSlx>fKek6T^z;^^!|nwc-^pI_r2u -z8s1_}BM`cL%ST^aW5nU# -zgiyvTH4Tt+)ztk!Odg>ZP)(yPMu#IGt2<2X{HjC0@kA}?S1_HCU+v&iTf+kl8Ads( -zdcB)DHyc-k9cwd{h!?cH+PaWm1RIT5_U^x}!`R29*^4BcQJpO1IPygn(4-L4w^rjj -zd~HncF~Be2mXD}FTe26c!y`m$%^%zS#Xc!Ohof+n+ZRCWEM@ -zOHn!+1!E2u#}cO1fwF0`oYhI&Ixc6aJE8Csnp_a?NG85~yHXgewr|=*mWg>Xet|s8 -z?@vY>U3Xd0*Pk_TVYQ|Y2w3_}A(48>af?%1wj~q{ys8Tt+OB~izgB8Bl=@LybPXQw -zyD{3)>DoR9&B9jJOqQ4ASSA_teND|Ev8))U2AxhxL53lWi%=OQ-!J#@QW}LX9j{1 -zs`#3)cBl<0IX-?BjOR-{`7~0S;9T)BS;(cJBiNMm}Bk;~lf3R-w~_@j)yu?N#a7kp5~2eG|Xv -zgfdta*t(NYqu6IM%UlNqq$XMqYNcq3p|&jNS>WF*PTT+%XSyU@V`>Bls~L5;8#4DC -zQ=+0RFUFQTN24{k=4vkC<{(rNEU`HyuUDP&d7D>Rj5*hO{^tXx%vRbj7Grh|k7u#s -z?XHRhz`MSuG4$agNGe&+!=}AAR9tMgQ`CG`KFiRTOI*j7S -zy6nrl4%qKus8=B@TUeoMYrG6bn4)!HaYvYIX@VjpKfX>f{cAs!3c@ -z3FfNz-&FwEvPnK{(@U99%c(7T8TBXW(miF3ktXbeyq3UjNKz(ezYX=hJ(&X5Es^oO -z$dLw~SVl%PU>B>ZSbQNTn(zp#zMQL#n;d(yVMdR==c6JnhSlmjAOn1_bxf_rq?RQ# -zX9d|SlyG5)4>szWa*OJoL;xN`Q9aN!SN&>0pVBirTyQUuy#Lu`0biJrDB`Vl3n3;2 -zHp1XxMT&>--OQl0Qb2C-x&f)HkIXL7gNGf4?vmaj@2r+vFXn4bjQ#csK<~i2A<)#N -z^PF7=b_Cd*1?N4btWeqR%90-W>h>FS3BQg0Xe8;vsg!uc4khj|v1UFX6&7-&Sn@6W -z{MC;oATZ03N0psiP7YD5`5*^t5Gs*4g4^7D`!xLkh@k~GuF5uIli)Z@Ku#wa$m;$% -z%de@dsi8E*Y!O0LiuB*g0dhxP(z&tU*T67UefEww;;&R6B5-9b+D07SsbeMUUy7Lxk`UD -zojfWA-RSRa(y0O9s9-)8&tNg2CT^5wTnRbxUs+LTn0_?>?HZFCyd -zRXS -zZkTXA4Ctl2gkVEWsE0)l*nhUZDNPN>GN~n=f{u_g0GnhcX7~8P$kR^!YyP?DVqO3K -z%VD$~Ek&fFFXJUmS!|W}tkcN?yu*=WFiTMRQZo%WMpOhgIikC_LNVGDz$6}uh-D!S -zby({6qboUw@RTuM_2Qpra({-eQh6fNnbDTtw&u2ghgTxFEA#28!<%#e4(N^5LPRT~ -zTip_U#Wtn=RiJ@OcKZJr52IwyLw$sJ6YxBi22t@{gO(shK)(a>4@QsA*vb9JU8jx6 -zPK+Le?YZNNIZLS`yQj5_ACbOC+1sP9{=8ZRA5moQ>JT+793Gqg^^({|@66vdqP+IHN2$w>fMONjI^47p+nW?@Y)gn+XBry@dkmt6Cu-c%@ -z0|IVqGn$fLV@sI_4%R~}4kdRe@Tjgr;GwE;cNsf}AU|b7OGWYM58PHEg8)LUw55qV -zP0Y`>BS5Ky2}(!0laPaLaCB$-%@j=uL}t(SU?iSWbyTSxOa&daT2?<1-{k$c1+s;% -zWsS2kb)8pmkP-u}A+e0TrpKa<$D68J&l1H4{uch=HDrk|$FYb~Bx5o@b85GAfJKr1 -z2~}7&?Rg6ZyRz;8GD4qI*}Y-$QtjEV#W09jFo-i4I}(C9o@6H~2`@)%cXOTo+%c^5 -zfnf;5Of7ymz#YXby>htbLM}l00?gAREr(}oseF0RFZ~%MME*gNs+Jk@nwSQpPW5N` -z(^`l}4_w;rlOau-m1q$RU6rlnT^-SqB7^ZSqA1Xb{3c!{pR5C=qxn`5ojq7Jy@F6I -zBV4W#iUn9z6k9V{YvnJ$iRnDbbe94a{Cg&gj9rLrOG#<_?V@J${WBk1B;pMy{Zk;@ -z!t(5R;A%UmNxLs61xBv*V~I)u?&%+VlmQ(8iK91nXK38^dCtO;poSWblDw!!23osS -zE$byKwx&LELMfe`Sw6U`Jz8_L=JCWx^-yX)NEXzT5?tZzOHHQEe#Ug1(NH~d5;W#XIhlZ3mQGkOnMzGlxHjE_R?bp`i! -zX+<0Mh+Go*YrknZSBVoqy7~EtVAqmb8RreSt--d`F34n763d>T0vSIGh|*-1e%{k- -z(XSe4(H6&&8?7&Y%qiHWJRbDcItx>ue7mLBe7hd96weI^COfSsSt4z^EFvr^M7}Z? -z=92ZDYzSKf(B(ONP@LCA!+7TTfWkfM@f`x@&PzY$hm^G(pzy*2n_!lK)5A4G?{dAE -za}M^vzqkZI3{n*ig}D!uA+vb};Q_9DKK=046vgy<3b+GQ?w)CbJ?>}3G+ogi&sexMsIkDhzl0}@K;`R}y -zl(7_oD;crU3?=ccYfC6 -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 -z9V4h^f}eiF#i4&VToL!7%iKn-G -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 -zKqTB+UBgY0nk_q|Z3Yk-l$ -z=}+WYYoP@JP(T~k0Fu`Cd}3m#rZhvT3$*;wn81XJTr6dLr!%?zH`AXP*KIeu%viN| -znb?n`@;C4-g+-pZ+@N{D+LhVIL!BMGT^h+{n5`wEl1qVhl?^BdTt+m*C5o9r^iCNH -z%s6$W2>6*3=H?aHXM@18K*)}W`2@j+hn2IGY>RWJ@efo%5u!7CURqT)BjtBwVwZa5 -zIBN9U!g7G}`Y=fxqz&0xQG^^(Z7|_Xo$>(+0CcfPrpKI67@~3suG-Ux?88kt2hcWy -z0L&;QOaH@bv;+HL9S{dpy*AL11JWr&z!X*7)S#zu1eds(%M`rSe!93{7plnI4|*({ -zDLGj#ZOS;nr1g$2p2wSCTV>!U(sQ(Q#@Wxk?xjb=^Oy<47;Y+G{GaX^ZXsp^PMau15r87ev~Y9L4#O9?>KeJ3G047+od48^0_QX -zNPE<5r*$=)9d6S#=2jnl-{d)%NL72BGSlWwLWqIm(M!mF2fdV@b5bnTr49^j -z=`-m5%o%YQzADYQilet*Q0jE$)FhZIYY#&GA*;^P6o}+?)P*C>6Mi}T%TuGXY{bJ= -z4n7i?X9@B1+EM^(Cb`Ue_dG4dRQC=1$Sc|P!i#T3i~^aa|IF}cMr}tYZurPeI$Xz! -zsAMAuFcIh~KAv-OOZ@D)_&OKJJ|;}@;my8ozM%|YXfYz~6QTRJEJfGff^yNr -zGM@1!%@7kVS&*6&&%y&ZWOtSMC$0V3v-%$C&#Y&#pBSxUBd2$_D!T2!QcN?vz-q`( -zDghIgGj}dUHMD6{qBCm+rQYAdSm%2leKC2n;e)qHaEP<{Pk{=oBuZBK&}`l&$V)YL -zE+d{w?y}Ce(u(|WJM3egVUqMR*FndI(KwNvF|{L|Ez0V>WZ!Z{p2$x9no;1T=)<`U -z%OK*=90(eCPUM_r#ZwmbC-Fze4)?juvrQ$7a?o4ijtugbl`fKr2FegJiW!N7R;~X& -z(HiRL)zP%7+se -zU?J?m|BJaC=wIRDgq*QgAFF0T_Llgw!J4EtLTa+Y7IXNbJ=5C=noiJGi3GYj``dJs -z8FYRm*_=S&2hSREbUY!Ks=c)4W!D~X -zy-Plh3WT1ul?yU|HY=SEeUSgx!CW-C@5(f1aL@X*2$V0+#Cc^g!Rc3$mZWLD0R4Q+ -z8*CHld~mxfbZ-B5WW5a3{7yLIv$sXcXxK7kOb+)ujI%Vea9$BkBd+k~=rW3+0>j=z -zD`1EeR;JY?|#UR~ITuk`Rrx_yvJku79Rqf#9gFme}~*~E)VxyAf2W|zY+ -zgj0u*04f9&D*G<&7E=wG3sAnhbv}lQJNde9e6?s1bDEan#f+C7)k<23 -zKi8a~l4YICHUu~HQwZS}Lh^Jj=r+RNK%MhNj|@*ebP0AEgeh%YEiVpP`-Gvnf0(TT -zN<4Y<49SJ-G!9%VX$K>z=cg~%2|Y~JdffC}#1`8?!f4mqVsCLilh5EI?`RXOT -z729R#x+jLA4);npd91K@)d2QyaLJ-vA$~}W!}x8`*S1q -z_;>GJQY*1t`W=I=`ge)FrTCXn=NpJ9AHT|L`C#kpW>K7;k% -z!zInH#?ts+5gmTvC|-kX#hVa(G7xP}Vp$8#Dsy?i0O2Z=%Ud_j5ewqPdgF(?BNKdh -zemq#@Lh(1c($!_1>VvTYhbB3#Rw_k0(cY@_IEx;Ec&ev9k~3@Os9$+kKtta4?2qN% -zH7clCSHyAD<4XKtHm*Cpe((1|*&_%ok(w1x;0mEU-021}GdiHGgK<_Ep^3i%Kj;Q% -z4F-JC>SaUstH=&E<%Y -zAf5F5Nvq6GRbqd{k}=e;G^F~?0=p6a;0(2 -zhe7yBg&kgrk_gSF1_TyOlmtS)(wtn-O1x(BD@Y!>FEEtxktm6{VK&VDY)6?SsEO -zZjKbD8g_V_ZMAzFqp8xFW^U(qI}8iV+D4%8D9&#&2VbjrMcTyX%oAdl6+z?8GllNs+L4P2P;M;BDz%rfgv2zg+v4aegs*r5&?^q=|7`kpOi38q -zEw}ZRi_n9zH2?sjRj3u9+Ma7O(_B0mdx&ZV7u7|shd&4?6 -z<^pdLsU$&D%2bk57T~z2UV&YX7ULj{9_j+98U#|jIuDLerA`o~|9itSI;$z*!plr> -z;rYefr+GXiFI-F_o{<}22fofh6TzJZjC7(8u^<`_VYrS|_N5DoCciD5I%t1vEhq8g -za8KWspLw((SSDPysR$rpx+=*`pkrtocpnNIbX#yq{v@-3Xfh82$(U3mE`usSTerrq -z0Sa;JV5gW#Q82~WISo~5mBRR>N!-0uR)!{)Q?iWj%6JzyGH`X|oVZ$hT}}d&)FS2+ -zHvsGh8s;6Zo{4E4n?1u1=|Ia8~gmxUyjEKEt<5LhTy!6m#ex_1?R9%UxKYTa2 -zy_gdwnbOhzW8#o&O3W;D{obO%-(B?ySj0|Rt4lXy!f@M%eNP(GHeoD!`!>=^!Wb3F -z{wk%C;@S4X!wip&v;ShYIH6>>AQ1=A)_Lx~vuq?r5F|0OQGd4X;PuNQeGVg_S~5hu -zz@sR*5$5gF`w(1X{&_f8YX5Pl*OE6W$J&4mQake4lhRza*G^s~GHi?l -zeJrQ3ue^Rz$i-!d)R!IhJ-wWSA+HmobZ+*^C^}BRzae$W2}+) -zVfB8GRZUO!bM%`~uO&oxqk?SIOOPFr(LjCY>IYH%CCdQg4o>tklksacB}&;Qv$!T2 -z4hu==b2CmMGrQYJ8xj)oNwz(YQ0FDZAg4VJ^Ash9i1ORu-=`Zz+WxQ5*CYG0&=m?BH^hBlkk^o=AM893t -zk(aAY#YK&7?3ki&wj@dB65aZXsx>2GhDCh5T9tMeEBey%$6O-&U5gkEESzbQOFgVx -zFS>_!rv(Ioz%Q+z!qJ{^IVF3VOY?Cr=2{GsXSENWIQ5k6ERpfX}+-FdSY((^kdsG3bEE>y1Ee2^kXa70ypCjrluQjP<1u!f1WZKRz$# -zj!xF10V(|%bb}gr)r@=OPmFNN`!xzr~)Za~Y1%72N14w1 -z!ZJ_s+DaFdQxWWr5=34&#b~@!N1-x0ZxGmORyE##6Wbd5!c9! -z9$0_^+1B=;SW}`OkC26t8(M&|2H7miO1o|yq8Ct)q{YYF{fz|Gb6{v4&zSCW&IvG| -zP14w#ChG6MC-_QxLmj%5GMGWNhf6``Lj=~#^yyw9qepJDjGu2#ZnU7S+p5Gi1PV%? -zaR;r`XRiJEox|oGAUK44T$-DiXPi;d1n@>;P>n5_v7jRa>mLHWW-W~fyKZnyE|E7> -zMC`DnXJc2HwQw1Ls0IT8otwBWk^!BhI*OJg4qa4xfwAZv1w+xsL8P7Hn6$DgS!nS% -z2Uz=M%Xe^4yZ1?=Cr*P4YPIzI2zDOf{ZFT5&kEyPpFH=^9FsBH4J*nOTC%|UGYV+(vbCja)$#@LazXRC#?ZFfJ?*3$-EZU#hZ2V%f8)A&WTD9 -z2qpJ{S57zlgsG>do+gonNddH^m|b6BvqBw+CFod0iqRD9gw|F^`j#nEb?BM`>DJOzAPwkp+0zaU~l -zt2X4_u*QtKs6w_+6)FiVODPC -z8GCC|uVk`?#nRiCC*{X(_(;i5B^g0xF5~8QUfg)D#fjdOTXnT)0gq!@j+ozZmB2=w -z@%T0eQHTSx{9NI+y)T9tH_DEQI(^K}yS&FVn8n>jG^8$Mdt6iS<+i8hur(eM`OD&V -z4;1-iyatID2I;||tp!4R-+O3>^$TGRS#?L(;0Jp`d)6x#GmbRpi3ZUHUl$FntC2C{ -z07s967$wGb_9-YZKlTn|F}Do_$goh|CQjN}8CcWK%Pu@?6?7c>9}nkJ#jRX~|1v*d -za{$f179UDEXUlq~!T3rV-?F&UaN=fa?K*A^!TcGFvPgts+~eCcxc!YNz1&10J_0r7 -zkqeFlH8maT))$w?de*odxSQHhSM&opr;|t+auu`kx*_dy0lTg8T7?}A_sZETB6=gx -zky-s;MuTj7tJbM*C;6PXnofaSr~0p1{$`!7!1un=(?u6Kau4YA^W@0Y-We<9Iy -z>V&dR6?yGpTO&LdQ_gsp!QCL3tIg>_#Zm2-i7-mBGI;6kXmMgGFpYafFKizqxUGTx -zioU(C{&3QF-~lWfW*xEu$sTxfETdrnKtR902*|z_7Z9UAgSY^owdiJ#U}ne-OM$W; -zo*Wd~Sp}?T1z;?w=xE@_-mh}Km&u<^7{RW3f5PXXT{s-(?KS};1R^uovHx|3p*Vjs -zG}^9>TUc?;Pl-kzDvws92s?2X8jn-l3Vj_dd9Rn|jm_3(4j^y997ucNBB@mU1nc|P -zA{%($(M9P(d%1SXO8IQks;Giy`*{H6Xv!LN&>1%T&y=N7n`tS@8W|nD6`!M`p)oL| -zWrK(a-X-#{b)^Pu0USXFNG5e0anG7c^S@gB)^kbEXdcMI8@iGAfGnUDxSap;LudE> -z!ZOBQs+}&*`q}-0Q1}x?WcCmP%jqdj0BZ`(ekcmZ3-}=cZz@35a!dvnN9x`36TgFH -zDA}4(Q3k9?Ki4xDfRgwCuAI(0DoPO2Ggb9y*jI^ -zaItZRI_d^Qd-rcd;B6I}iy87AZKxl_(CT-nl+&ffZSU*yRtKor&2x)9-#osd$8$-G -zi@v&_F`S}cUcLE)kBFQ-6kl17BcweqHR`zaxa!%~Sfa;TqgZJc5q2JfME^OU(~87p -zkkef5fx$E-e#N9)ax$?_50om{Hnohuh_wq`RH-*|cE3Dkttat8vwTRwH9lv`qKP&x -zg+y*T`Hpr}y(=Aim`UDbZEyUCgJW6${$rqCj4NS$A+^aegIZhq(wkd@1p}qK`TTB9VfgtA(TWqE2pZ<*41&NImylV -zQ<@~|a}lbQd#dp~5@lIOV^7HH?dFP{_RLMylHh26FbYfHOH-GKF1&#Vd;gEzz2nD> -z2nNqmHpEXc4Np$R@6e#N{@tzflPkLRDQ!?G*iI>*(?j9{DUyXSc?- -zbAQ;-wjG!Mzu(8}yh#5jstp8C#7Kpj)s#Bx(aw*74AV3rQb=2%5C{y5Z-c)w)kUjl -zAxw)`(*xfxDo%y{?%y;jjcDGS8%wJ -z<+0~bs*oG8?-1b0{#sds+eiJ^0CvCn!nQezop~=g!3azW;;YVN2`a7$mgYQY`=WGV -zNl%Jzr~MRDiKV=UM(3b?0W+ -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 -zXxO+a -zJ}GxRn6lnW#d`Cf(BJwkE9u_>(r%1rBcgPp1&MqQiQ!d=19cce&fgYi^^_as03`D^ -z^+oVLuj4u{Dl0U(GVqwRuIwdig8TZ86_Ej|_V4HV!|^Ug!1U(<5f777D2n4YSoe`V -zJIk$^cbK6XXgaTE27B9tzP+j#f$s4?VQh~zOD2&%hxdW-E35!{1s694`G`=DSeVe -zvKBD`+srT`gi8ZH9BUm5gNJgVqU_KR51XBElKnNgYY4@zbrM2SwPG%0Xc( -zCa=UyI!K7vqMLHKPl0dQ1T;dUo>_U@iEB#>F9hABn#i|gsWXp4I3u8%J*BG_IyYCi -zC_gW0;^Sp$BL~vaqEN3L|Mf>Nu7UmwG=b;A(pt(sBZ;?QrFZF#h62J@Jn^S=+NM8T -zu*f}xvf*G_qTtkuGjar??OSAf>yse0{QJwIGC`u`m*>^)W{q&EoSOYdG_C%B -zOYcP9&D|^R#jX`X5#gdGmFSU+q6ES}11DpL>IF%E&wPZy~q#xp_ -zbH2&Eesh?1PlbgtI*y(nAg+YSDe(7^8rZQL7N3jm+*hssA&y8|FnYr$omtd?tZ-PM -zY@*2Ytg8j-eTAAAF6iyK-8(6CfMJFXE{F@&3^3<6Uv>O-z#F^BePx~OAkgC9O?q3z -zp=zoR?KN9Z?*)PzEl6w3B>gMEf^W41JL*@}fl0=dK|zM2*KIw?WH?KtXbdoWT^Z8( -zk8Y_R(${1gm{8KeRvH+{@wbNlq~zgWClS6^>{?T2PGU#Nfz5ol1xY<}ZP@G3E7Jqd -z>eaDiTlPepiTkZiN~dBdG%jt*fkf``_Z+nwhP{}UzDDMu(8)yXb`>F&F)Kkt`Z%({ -z=y&?&6f%iPC3$JUe|BN&#;TtzW91PE1XjbbwZ9f>(phydI-Yr+<5q^BBOhEzr^EB;e`VG1fqYnr -zrloYQb0e4Zky&9|9`HK_EMA7PoOZd@A%)Oa0qUjwhqx9G+q;2Xmk^f`iLbee -zo -zqKg7C(HpMePC%YT9ZcC`cNp!j|6ZMr4UknBFKSg+H~Z`1Uz$vTHEajVe|Vzx6Tjwz -z6>=>@#?EFgZ|UXGmX8Nd6N?jYC~rilmU2%F%t>ws)F95OHj>3=f9S{Qpep4nDJ5$C -z>CvXZwHHD=0*Ko7)nI!qg8UIyUb-$J8f6v?U~_p$##&`Rh?ku)~DmNZ>2dFT4Gy)tQe;vw#6BzVQ9p0LFwZVXAhdXLE24JSPyES -zLydorNHD#qvvq3Yvsf*qz -zj8~$`pZLgN9fp`beBIO_->0rSR->^7e#)-r3p9-}(1rkLb!EO%lJX0ir2!Hmp?Ju* -zsq&1OB8l=vYWoJjeDV)CBvrv25TB?6+Pr`0D(5W>WsycHWEA*zYumMTmP)ILC7~ly -z0tvzfaIBJ{nU0FjSD=9k80G9=cxt*B`oeFKHsF2q6?D4Oaz>&Bpk`ixY`hJ`Z|mS$ -z-yXVI&?IvZXQ-m_k5QN-=4t*~t(~|*bM$}-CFP+PDzml708r|!A!os%7U#i|X -zJ#?L`H+#d{sY62pcnfg1HYd;fLiMTE=j*uyNQ!Tq^l+l)&!K)1UoS6&#_=h?ggRZCmw!fgtzr8E)vE( -z)VLQqWZkN)1znZ^)(B+a)Y>854u;iqC~O5T&sEoYE3sS>Z86X%c%gsO2+_$UPHcL0 -zwZN+N9me;c`Lp_E>w(rk!Fy}z@@$RMG85eX5Gh9myy6r+ymxmr4&>b -z)+4h$-!8xa?md`;T}V?Aq5$Hy`QpBqTMLs6WNL&LIPLJ!! -zgPoeZiy_0Wc1gTa_h4KXS@_FD21;1#!v1N;NijvD;@@cZZh)A;fefIXBM)NU&W*eX -zkl|=-vQ0HKM|<;=xEy8+0fFh7IQTxWr3AxdCl2a5L8SmbNQTj?TYnOsWB6J0 -zo_9;M$7aAXbWU@o(O&)h9~)YOh=v2M?K-E_T*bl3yljzHR}P?w#zcj`u9B!#HyUY}VrfHF^ol_IYrU1HQ84 -z#A>P{x8Umk?Z~|3Vt-c`X=j2!4|d+E -z*;&e5=sr|zHo>JGOmV(V1|Fhj4cG*}db-+i0Z{XF@nL*UG13J*=t($uhb9!DS)qb< -z+Is|nTUp%GSq1&pH;H9+zH&$CL%bsnj)Qt}obyQHqyx2ih#7*Y$^F7l>SZ2R34E%Y -zy*YwHAcWEW8JXI2Ule!UsKv#c8`BAYoOQ9+{iXwYH-*aIDr?}e#(J>9M}Rl(5#T3Z%cUJXHaTuknxdFlkuB0Fo|ahoGV{TyU8J$dqtk0|7k2km5{#aH-TFNTvtazE%C;ZxWpk+_wNFbX}^FJDeVn54xNWy -zK?ID2bX;;#cT)>+$+t^Hv`eH_R+kO7F%-YV=@g)@c(7EQ^yg -zyG|#KluZ;C^rpR_R74)@tTSjTddlRPhAlAcG(A7tY8Ta;@c0)4SQd>Lu{JXvpsp;T -zMY7sv-gy)=ZBsbtWCP7_pH4_j5_V;MDdh-R2801wxDnR{CYCS}YLO6n+e)I(+eDe~ -z;!ce5E#b;cI`*R(?ls4~1(v!yU#QLzX#GFk-p@AVB5Z~qN6d||-+{Nu+s;Cs$|r8Y -z0R)4W~Sqv%=NahJy|JmCDFqq2oNFtVRDbSDDPIVpWNJR*n-keCC8WoUM~E -zoZZUCz8u6iJ54Z>9O!9(zK(1C_C_jScCL=eg7%L&D4Szv>2 -z3q~yy&}s-4J^%w)jF=a&45*5ZJ3)22Rnj}OK&&Kym2U-Ub%>PP=VbfbP^u)_hjjod -ztvLJr*4_>D4mBF)J*q}AkfCx2zt(X(cFHXMIubmz6c+fVNed+a%b@R?1rfn-onFQI -zsvNcM!LI30pH)Bc?HE9!(l1-eEfoSXS$x0_;${EJ8({>dC`+F9}c#!?%^vL$ID(z?^l_HtQxtz&behA{pkBWr^~h8)iw+Qwe)-a!*!l#$B=Y -zIm8Sn0qiJX?6&~F5qkoKv20zA(P>R!I; -zu3v7dze3_@{Sz1iQ9~wggoc6NWVu$>fG|4w{8kumNU#*ob!@?Cji5Yq%J^QgHo8I4 -z#SzR;Hunoy;-9YP+c2^fBi85W^-v2sB$NVn -zfG(fCF=j~rCn$!QPgv%b7SW>bWd9m+>^9O&NXzEQt(i#NMc*zNQGu?U$JwtprZ_!M -zk%$oCalme~AdSprr_GAKpo{)+!+k1cduxK+L-j9~kAARK8_4k6j%!)seE2@LNJ1x6 -zpU>A5Z<~E#DxPVuwwc!wO9_@&Ta9sv%J&v18k1(4Yc2xY&wysbWYDt9T40*hkK`Yik9lKw -z!)5{wwo50r9qp}k!C>NeaObop(>=%GlYp=7p~()-PRVc(qs$Iz{+*Tyr9iu!3nm>- -zr;y3w(>9`wvFk^_^ZU<68yX4?jS2i7XVd1HY{C}47W_f&vsW})7`qNY=*#L9+d6&# -z@A(pdM6p-&!!@&qqyVxijxb)fLI5mG(R&xs5{kwzFS?s1W$NvWw2PjIkG;8Vz{qgN -z#IT|hp_SEqA@IHtwF@%c@_gmO?YxEfBzCWq9g;l -zp*Wy7YSg!vil91RM|r$5FQU_n+>(3VOWJzF^)yAwKQ7-3|ACW3hG$rtGALu9w2={- -zHaf2kSun-s(ravVh<9Uzl9q330L-yO -zE)u00{*UzVe3oI+qk;SzQ^{gd<$t6Au=s1Ee9E; -z)!%Fu1!cXp{)~P)WEP##{>S$|f|QR$#K0Cxt%ke~XTERNh)y!uJv2^x*)OJ-EJ;Kn -z!UN>eVgPb+?iG}`cR&RxBRDL+YT=a}B+%VO>lhT@D2Geuy#1sxZCDHbnCeHrHZQO< -z$)4^TcJOANg8sAzh$=Ojc6PjF4N&`av)P+zgQ5x7Kcqdh`+zYNv1he2j6yUGPvkepjvpKn)^|k$RYa_N(j*{mKLFY6vUBNnI)wN=&Eh)i -zwOcBC2Vgx{!(-c~A@Q28aS|Q@E1NQ=KcJr`T{4KmR~S&k_Dee4l{E0bmQx>;(SEp< -z&$r7+)C=&-!*`Y7CM;S-&NG>j(UT=JH-0wDav#46tJ2td7tmfXJYeJ`$DU^#Z9a$L -zD#8Q)$M0o*N8L07B`!UK#*m6|#<>c~;1>}32zLV!jy?fFFAn|)sNP%+r8M{}_1Bi> -zG3FJ1yL+xv_gDq%c5YYv=a2h{1>uNpL!uTseLXMdFw4|JCs9e@1@>`pdsc0Xcd&1O -zA|+(+AlKQkN=^3Z3mD%5nAu(*L~zAdcpE#L#QdWZTL2R$)#k=JD*V<$CwtV^1rSEL -zk4w1Aa0T*ayA78n%QVznBaBzG^m+kGudd%fxHuUbBp3tol^PVh5gZONUc#FBrC}Dz -z4)R^dPom1dot?TYY(&3S9uxXo*YONSp-80bXCbgW2$$sye}^uk`AAMaPP+t0W+0pD3vI?dusy -zW8jUQ{Qb}h`*^U1j}$(wRGbL*0XJb9qHVpM0Y$Y}i0gFRALyhua~f@NRj5Oq2G|Sd -z#ir&sPXLF>DvX8BXK+(s;m0a()NyBST$Fthc^f68EkLXi($Aqr5D=Q(=5AV|0)f`6 -z8fvhsbyu{OWr4>*ug4YnQAS?$E1-#AXj7)SR!3&L2U;%SJ_&}brHNjBKhY-WhZ5w| -ztV!3VbW~Pj`f&0%99R#cn`6^U_3wX5uwl?C|M?@4<}w08u;x!(D?R#BHtH@6c^QY@{nSHuuU&B9pJT&%?rQiN5@N&*LO1AdstU~!_6g#jSSj^U -z7Wk{NYZ-()1HzLu*kjxj7Wk~#o2rmUtH8wZ*11+QT`p$AThc -ztQ|ea=@YF%KPHr!v}9yEnJR1gl|t5}oLM0k=KI>A-s_WPQ%RN4m&OCInf`~kk{$O} -zddAH6YZ1imOu^lS^Umw{bAlFgV>}jLY%Ja9Xwd|hq;iVTAC#pAG57_VvHUz-}l((Alds?Un@WG -zB#5|ks1@KMDKF`%ZH*;@&;ZEgDA%2phV~g19lKikJfiXwC;ivz4zcogz~Tz1H{!!O -z2S&~1LFB#3ZFF`QjtP9VeD1F`w6OC6X*(rV)0YaAke$UT8lMfaWDo}4AiwgU?0VI$ -z{^V9j{~Z{3RTGHjw9zT|3o#AKa&(Y3B1~%1K1oKgkkW{~lUJ7ME@%_|Z4@RvMXw&( -z-k{_YXt^jy?UpOnNHC~+{7H{ -zfWPIBDlY0_Y7hk_^ZV}oEfn+2u{XmBfLPw+vN5d;)F;l4#exgv-adzYBGC~hc*@4{ -z6i<-JWiPie$E=(DU%IwFC*mNG%G~>T-$#J?YMaQ29pCUk6kD3;nZJtC&;I!5K-| -z72Qc`5K;{V<9(IDflh^{zHwXQCINc@FvwoXG5&l|cG*z0P;CG?0Id+aubNA({dH+4 -zrV&V)WI{H@1y)WrNa{Yd9m})D%=wr#($KzAqcO!my*HXaqD6~jXyz^Lx^E@H=Iuja -zc{aFvEe+c@KF-WINw2y-F94ymU7-Z>D-I^0A##e8NY;^XJ$~vk^|Rx#w?+X4J3o;Q -z;f*L^E1BAzc17+L-Tcss_>g>DPO)cETUN9;CnmOkZXeJ%=uHb1+v|%^2LMix0{KqO -z$p6E^RSAv@f-@BD-a>e|+?`+CPQ|~$IKD7;<_feM!yBB|k^;l^Kz{mn;x1M!yX_-? -zpfcn|c%SE1MLElTlkng&%5khG=$&2oRxUxkXdUCX97USahIFPnbO7)!Kwq9vKtkFx -z%`^277bJ9D%RK$bTcu#2b1harMa*`{5; -zFN(+6z0=PrmLSQ^cP${*l9*l@rQwMX3L -z^i*3>m$MN_-!0s(mo=+-Cm?6FZ#&>uB*sUz`nTy8axY5$A)Wbf{;YZA2SKarGB -z;XxF;QY+^nK>zD~zRHovRfa%Ov~^0`>XfY=o~VF7EfDSOB}g3QC2ILI}M*{ok-cK9wiF*rD6A^H -zs?JPCBeMq3x_NyDx(r||gcAp;z0}Ahvr|}9TwTs$X1}#FX>>NFaRPe@5mW8-U+Trz -zdDjk82D38CG)1^!(Q^3(T~BL -zPj*{{sMz(B%~=dM9nv*%FH=d+kgq#XjUTTzSF!3^aDHX$-UbqixJf^m@Lq+8_R94B -zH(^ul#eSwGvwBBbMOl}e2v~@(T$fqKxj;fVT^2YyUY^*s%>Yt2JknNAOp`%jgm&oG -zoWd0KXt520>-&%9+28-U1-mp9J*rn7xW20UMo`x|)mhH+a4m)RXR%Z!6+YYY!*At4 -zrQ*3zb-eJ#wO&7grec#R?2oz7sw!lK;x`6#p(z2tYWk)xc9Yiq -zS!IPz8{l_cT{9C*2*Q*n#gL>lqM_z-PEVdixnT9ZPH8>n-o% -zH4)ZTm*cFOO=)J|(2mS=`8oDH0BJ6#JrCH8|}`qa~cSvu120`@Y2$HH}RPihuh( -zg`1kNa3;_skPt0cV?1O&LS@Vlrp-=f0vIE*?T|y#Il!c&I=--BZ5+Q?*`dmef6K0u -zqc|=2{_8_mF0i5KhHb(m2uhQ0m{vdSx|{e#X={mYRJ_@iO<-$O<-5GfhRi8+>z^NY -zl4anK%v)=!K)`MA;F&(;R#xIuNM}1V&ky#PKGpD#?+Bq)31RN4^&j!x3h1)6Jf`ge7@N+x!XR-=?ThA=Sy{w|w-?rJ3?>9x>f#$y;+zU}Z?5^YNL -z;ZYmHrU#oFPA&#a1PQdmDHT(l>u7%Z2921tcuN+4`IxuVE|;z{m9s`KNE3&+#lY1S -z?JI4@slk;&yxg1Mg?+$<+DF`?^)_0s=&ouwb;G1uBTDPgwF6ju(JVq67B5lFBO|Ss -z0quS}no8{;cTYgXoE)a`$7V#Y@B~+h%c`{Ayn^quyVJrP=o+EUUq4`spPbl2B15?} -z2$~Z_ZLH&YYFEjMv^lO=?c;-RtGi|OR-+uMQMkr|24Y>WU8tV{!7mA -z`o8ZFmA1A7NMSZS#c=7n(XnVYw?RFeKbWfu@mMt!JjN=Zio=>$l$pZ90ue!rNcdCE -z)Q*2iFdAkWY5^aA=F_9MbOh5>7=GFlY+6u;FnZWNw^46Q6{2IQY9Zw&+jg&ACdaQE -zj9tV0f#feACfw9GC*tQ+N6`al!nuO$xC}unm?l4?nKxzCp&QK1g*3pW@&j<(Q&}lB -zuJ^~UN7vl6;q-#-?|sW$bKZ4^?}#t5EMOFhZzy}lV**d*nRy^gGxPr$cchcr&dn0ueA{47a9spDJ4G!a -zAGnX8y-0HqkqOfB1pp4;ur&q4wMb~seQ}w6rJAiCl}XS<%1IzKMuUm(6l!ttRmz&0 -zlSto{m+-ihCXH|AGcl?bBR_L_hIu#yU5I5Y$~}s&a5yfSERuJE`6KshLAg8Zj1EZg?1Dt{8a2FH7#V!rE%Ol9+cHZE>QaJUiKXge -zTS+({uD3Il6ODe$MT>uJXkGpo*|Zf@V_(aI9opp^_;^D&WAI-AfT1zoVjODN_*TW- -zsz%?`PROpcw^FN+6nO;2BCIvr8&&%IJ^l?|MdKZGCM0m`90Y(==uuzKa8}N{c#Glu -zyfoM)V*oy^R)YLv;`Zxiv6rPm$fvcJ7g}UKbnIz8fY|65!@QEaBzEbo!(`Y^K=eJu -zA3^(F30OQF*K=L;6}D>={UE{>$Yddy*FMxyEEF>S?Lr0>R<%lhX5!X5eUlMGVZRfU -z6$L`}-70%ic#i+ewemicXK`#b~Y_Q4{ -zNg4)r_nWslO*0#DjtgH&5Q3wlXt4MACjb#5qk~Ud9-<=pMk}_6$au -z(6~#a!CF2{KW`s&{fRIa_{Z`eNTTW>uaHyt?v_52*<_vtEY)P4@c^7`>tCXs!o&NW -zXUOEZH?e#0Hk}#6hjT6qe-ge6>JtWpYB)s7=67vbb)JD!6pLB0ojQDKoiN>&$JPzx -z&p}HQ*2Am5nyURx_I`JP-|2qKdZbdKU_vu@Tu*{)K35M($z%E+MZhWln9~-8n4Xz$ -znle`!1<^w#y99{P>N(;Sp!vpYUfMkLFju-_Yg&L)ARf^2J;$GK-%~hCO3ao!tRYrV -zbjR5Yp`3u^dot!CB8%HF6@V-E-!tarVsO&?Ii;}XMIO2Hq*jI|#loD*V0<3bQQ@SUO*iQ@#}DkxM6pAe@keGB+$B`m -z^rwxLzVtCA7*s6op-8=t=1S)OTZt21`y*qHu*GoiXsXU2B~^n%jY~9JQzXuoGC4L` -zqMqn$LQgji4qBlVo$B>#ei*&8Qg}6xJacC)cl|eyT=Xz*LV?NgrekHzLHB656%~+t -z4O6w|75tCmJ(p*?`#)le3~`D-y&J8uW5B>IQ<_H$0oHgFtq15#PX@%E;TvKuXRJ;< -z(9F+-pDJEnIXfI|Oi^{=QA9>ybOAmzNF(6Uyig=yp^Ss~1ScSHW$N2AXCRMs -zL%78xy3r!;-ttxDL;sznHRwn2VKu%_7*hlVaVRp1-pfO!R8 -zQ&QeL$&RKF7o*0K^fGTeP{a4~d@8**G5|@t0Vl#g21FSMI^KJ=-YmV8=3pjL&X_3C -zgGixJZi_~Zl<*kzbv$ZfD3=&yr>lhLe+bf4vaRhu*Ds(fJo+_hWe+6&A`=`#m=5cI -zUA)VN5?;tU%cwa3@cZ&8S();q;+$TQkTtC-kyXbQM|6lU)5?pK0%+L09_>@gEKxm) -z=h^n1^(OvJ_lX_edKesbnxO<&YS4G&fF$>hjN$@%!G>k4=bFNsy-HXXaxlE_0N>Aj -zV*y8%nY-X}?5$&FB#8uUGCEfnOc?JqUaqA}tF}A35#j)_ -z;Vpl_qFQZw#GJG`{Q0G@gUmf!9d|-gPahh%><@XVfXTKj1BWG<+yep`)%9?iKdn=W -zNt7Chl|0#ZRL<+TmG1+;K%EA?U4U@v7bwnM&LpkRE?|C#mfR<>1_0{j2@~^jZM!A` -zUoGxbQSG2FRvnS$A8RK{Ya|J!6t0s+BJO4vBY0u7pAGvNmp$=0YKu(<~-Fw5w! -z#lyOz%x0?5Q)5^cet6ou{@2w6>clLe+5tXgvH*5bj)1vE=koYpB!POWp)dn}q&jsE -z67>6S6o~N^`j`3rh-1+}Hdmr;V~;$_a2;dLN=OZqO%xbQrhkJ32p)3_plipz&s9H+ -zLg>OPN~rr}ES;O|Kw^IdQ)qSlT3BlNm78w|ABQA<63P_iA@3h5P=u1}j>w`=A`^@o -zI{14LEbrHDNQn@8ox~M7m-~!(ve0Pmr8j#!A`iOMLw|bd;S;*Tj6oEo?FszfwL)U> -z*^lnkq}Z7O2dCOn)S>V9v!gLhZf@{T7Fn{flj5j#hS^s1DEa!jq!t2b3_0<0?UX8%c5LbSP4N@yYgww9fL> -zgwq@`~=2E4`p(f;kcCgmG{zd6= -zwo(T%3oyg-C1vXlNM -zU;IN(C*f`OwS9>jlKW|iM&ko_qSZk7(dh{b08bfO3MLPM_f#fwP$Tatd4!8Ez54kO -zWWL%;pI{aYBlTP28s?*2w=*$gcAg$tf+zqWv+WO9b2ZYX$!)AlO8M+8r96)D&n -zT4m&80tQmKHoBcP8QK=qQ3n}1lVf+BmJ!6PE~^qiBnzCeolorg)|y#3>L(=?f^uL5 -zF7~Qt*OYsZ9ydBhAcS4X-~jG47y`=vQ>d(gEkrSK>Cp@;yoTi{i4MbsXYxzIKjnH7 -zwIh>x67R$w1O%p#}X2f-Z1+I3mlT+kMU{R#07gK$zx(j- -zrVGdzsyovS?Rr{DmLgMP!3G=1*1$*(JmfA(+N(c^G4m$z+_O(2^y3*r@%0fm#`q4H -z0pL|<<`C!fF7&!12;ap9Jx|*nanCeOjG+uyk|&#oXE2?Vua*U3rgpO2W21a{ -zfhh`b@=`H0En&%a{yd&38669RGc(O(=+6aoFS=r -zkaXU_XcU^-AjAVhE>V#jM*tU=m+rsB^C$kzjAeXeF#k?7DN@s=wrx*s5U4Ib{R`sH -zo+HzkW3jz(tPE6PJt!BrGV5VarW6`Mg*0(!fC3=Xe}9g$|R%6VWli -z6p_iH?ERcMH)1TcY~UZOvoc|xP|*R&bO$0`5fR@=|KS&thrc4g0eahgA3BR8ds87d -zUrFhFEH!E)x; -z$d-ZN9V~?o+y;NjPfP~SUQMZLPk|$4gf41O)^gbJPaLJF_ykdk0D>=5VD)X_{cjAvsQpJ}4_gZ{P3;?U5BhKT`ChmKm`ZRr_0lzd5YI@M -zuQ~NlCb>0@Lv^wTCMJY{9i0t>NmDmKn3cqvM0Vq($ -zylROx)<0OpP00J7+XRw_X*Oty8f@<`i%sky{J+G{(PkIT+ct$1o>op~;GTS0{{h{n -zzIZ9TNseq~rX7C2QBlJ18;}g-sWpSz!oR~VXlCiH)r8$qEOUQ0t2l_^A^=}&N?6fv -zv^kBJdS*h@n)rVjB4UwYs2JDZtvxt~6Co(ZE@un%tpvl2rlQUpd(GKXV^LmZl@I?4 -zz1}re32yng5#UyOESp#Z%B-Vh2pI@z4 -z*XedK#KcOU1d&C1Kpcd16?Q%CF;LWYJa)xp4zAAV75LqMC>>UdDrFWTUxRB$Mkrkr -z>M(Zc!VWh7rNoI*fa=L+@&mkUb!Y_IRd1rr=ZeD=+;M9r=}s;|KY1?U -zt*bZlu5t@pH0Rb1X??YE93>KLBia?#o&9!4#yH&cZ%}p8i>FMT -z7qYHId#wP-##j&JQW(h+BNm#_MW-AL2}N<_{@<%-iRj1?N|Q=&jXG-uW?3MRgGeHk -zvvsWie827Jd)vmLpPRFn?+%**)~lkA?3v8QW#YikGR7>K-&%*>5S_I35N8Z{n0 -z2((%6>ve1+K7OHA$LwyzmX`?YL-Z00lDj$xP)m*dgh*J+SBQ^V?woW)eC2|R2{25< -z#IUYF4dU|3W%5Xt$CFUh-oFc_7F>$T$-n}iU5%RrC@SU!GlP*`F^l(*sY2?MI+NNI -zf33-oi2EC`QuW*(;{336!R~6TWq_9UeI9dF+nk>GnLeKj7IRsKu!1FWrJRrHIpt9S -z_ydPOLvWawLcPdRIrx2O$7bm;BIT*?O+BN$hyGqnbp_7<>RgynQ%=Y34@?0v-Nw~$ -zwF7}ZpE7|qEUYM;rBZ_VPAN{*xW;SXJ|MK4?NAv((CPWznDquUJpp>f|v`W1bC -zhFeQ3Bp>*SR$Z)8t6BN#58X*(UP>x7&{ -z^Cnx6Ma_?0%vXR*R2ktcCW2F@+cEe%OmuhJ -z7nRa%0y12hWP{gLj`jW}%;uLN<~`)NDrh;C(3*0Rrp5w*Cd%sC;FS5I(S`{VqT-l^ -zUY2J<%<|}X&A6WZbKvgnc4s64GHvIc0gcLQ!O#O%;YhOy8cb2q(%9IMEVRqPb(6`A -zE4nwJ!v@0<$R-u3TmPPbl{k+Bq>Ti7L2=hp*%VgI{)1&z4e4)%f%xOn_Whxf -zKiVz9FEpR&oGg3%&JKI*=+x}hHfF=^(;9JH2Xc&ANFb9zgOn&|yJWP#-8!*2*Tc5V -zF#Imz6c_zWe$ia!5T8KeWIWW-Y4>u%tIevc7;|AUAZQe;_Nqnd9F8 -zJpRt=1)D;(@{k0(EMBkH504})1oY)dfLU5on$`m`ErkRLC1+i@>LLCpYgWVMqJVk? -zsV3kc7$C)^`NDWdoA#{>DLgIddY7z!EHYm2QHSy8*aj3oO+JUFEFmR~7rTFrllA%$ -zX8dr)3|rA^j-1ASHJnh={T}A{6=TrvqmtiAXDdbAC%C%J>MduAk}4zgdV*{FUPR7~ -zf|T|LcI9CJQde2hr_j|@ZX_OWw@}{pC1eEz!FBc`{X8;w -z4^7tVsgtUwM)51*-4}Ol7=})!R-&{vDtSa=)uO(#aH$Iz%InbOFXB19RHiAj6AmauF0)H -z{FeLqk@ZRC5E43-B0Ex}GU)mwZAlPvS5Gxu;*VL5!0mZ(F|b{Hx+@ycC_1A1^4pve7{nLQz_Zfs8esuP#{IcT#=(OuzK#};OFwUluwst?vJ=XgiG$-`4{!=evcB9jLzMoD=#*u_c})j`80tpAz6(v`G* -zOx`ZzjVue;I2Pr49giI}E~#cgE3=uZc3Fm16C>laA?UlIYBIy28wJ7D93-Iw(ceU}s1XY^;{?x5-n|R9w$v=J9&c$6D=J+oDem{4EKQC<+v6Mg10%2g#hU -zKbSes0mifQ1^~pI5G0@#qn3EHWI+=5sdEcdlsNrPC90A#ajh2d?%i5dieC$_eT&U# -z{4gE*)$O=E&Hx7>wJu20k(^}1ibjlgad0==0&+(AV&n`#Xs(A3?52n255fL@cK&6; -zqvg82HB|7kELLZ?bOVyG$(u^w23TN{6J5KBI2*V--Lwtm;LlSyddFhA`U5r05I=>L -z#YeGl5tieDxiyOnz~XXF`|!Z~=O~Vwz6FRS@f{X{FN8D%QxyA-*Ify%uef3~V^a=_ -zy9Hk6*&U0kW-REK147TGPe8(Tm}Vnsg;7CYA)xCK-UlGGeGum!rS%)Eu)@Jc9r1D_ -zb1o;5)t|00W`uotfp53Oc*K@t%NiZWYpa_bz$|PZZA5KA>G0gGooFMGcxHdP4g)Nt -z<@6^cY|)2H3&bEnq@l4`d9?~pMF3q24zJo~6ZXTH@DcZSWzN>{n~|x2BrH+^ITaw< -zNW0SR^PGZ>99e6TeUcJ2#`>os!Y=j~<&`)@2|vk+)4Hy2#^7rc;blwAf<-~ACvy0w -zmQT`do4n81<2yeHciGnXHgp_lvoRoXKJ+C+3jD?$=l%5NmkYnCQ~cNN|No(?m+;Fr -zcEdb9D$nij@Z|KT)ES=5N0(>h!ui(S%HXqVIeseJV-~@J=SQ5(?|eeHNSy8#u?W8R -zuQs187#IWp(CfP&P4K)^`$G?P(Z9PwyxlB-JaPqk2NT%GaE}eptL%4YNW? -zq-4sC1D?h<%{T(`AbDBwUr%xxQ{N+q8T#nbTPeo3rNp7a>8YDDvQUub|a(+jGtx%Il>`k)a;0t4Y^5JZB9}bxZaBQ%@zjIDH5E -z%n7oe@Ds-sZ_-p2%K1`o;Eve@!8d0-u)w_wvY80he+sI4;^pAXJx}1sDH&+o?^M%+ -zN(?|wEWDN_Kou27(U)|7acCRrgh0H> -z>Bx$vGxY~v<+BZ_F-R~K=JS^!(8tHl-69AXk~PFnBbwP!zB-(!4}mT{LlBJlG|R?E -z>jU&}S(jaDTjqcEQeY*e<=mTB?}lnC$8p -z(vS*!9m*^$D^)YdCNc^~D?B|*u^7;qYQ5=HlL?L(|6VqO2)60OYMTyA2Jh4Y{8O4P -zEfo+_mhy{byzLDLK!Acnj@Pr;ho>FGWjc4t3X`unu{LSjv@7|~IsT8SI3;%s -z*evZ1xV$F?qX=T~e(N~WN(%fqi|A^wQ`b1?l5?aUklJQJud2~~#Z_1if?alPE#K4K -zN%V0dfhjeC;`NkC_q_+xE=3>dK%2C -zzH&e$oUWsmDwmTrEaPw2J#ZeW!a}E5vGy(RBSeoMwmBfqj_$H55~vUF`-ei1?O+CJ -zw|FkdC*cT#lArXZpQ-IEPHe%S@^M)XJ_iN1Mcoi7*~QSnqgj-dg%bXYUTK5m37&Qq -z++;6hynu2K7mp_us(*~7md345QvGLAPg5;(&8d8(p#W;ArejCqFS9neE4gG(g2quWZGu -zT##(!y=Wb}@GD;a_~GxV>o8?d35DFuOanz+OX~?SvdlImu~;I1-u*?K;0Gym*lHtc -zMLbzXx}Z8rvR-bb?9YFI$mjstcg|l?%_`Y54`|3u@2V3%?>$2A*d{N|g}zCW2}%8N -zYFrtMyQI%*Q0A$!JIZlq4Hw)B3Qg$vCZ{Hfshr{6;}T^8SR4!xoLi%Z;{vR&WM}YN1`gN5bYb~=8x>|73n9~IJ1w{hp(eM -z4_Dl5jzH^BS&T!Psf7XJfBD`nagwBXu6u5mfo`BcC(DDvTJBGy# -z6L{-pPr>NOTjf*Q!5q+8*em1Fjmz*=|}h$=*u -zAgQs2vJoqnQVbiIDLeN=;*;0d&6hn6-#v7!Xnoe_T&oTv3f`b%mlncC{hAIvYjND; -zBR$*lw8PTkMow;#Wgq5&&_{}pW+WiONe)HgFwmd0C8ob5E#Lq}kUt-UxhF#iz(-;DftC`d)p~#T7l|sw5A4Kg#=>5^E?Q+O-ttO@ -z)?0Emdv8@4$fY5E4Dqt}hWNoxlWLM*HpPpV{Q3CQfJgjeVS)f%jZBz_ZG&ycRVrk0-5$pc$I^MMnsGk(F@^FgAX -z+nf|1&gs>>NPXA|QN5?XrijhS!iRaerGa1T;@El&H=|p)5Um?4TUn>TRajt4_Bd|= -zpCB~sy<&CeWDyzMxo_&>_O-PH_!Z9|T-aIUPBzmJ)K>plrhmqur?gc*QnUVkl}wwE~xXiP?Lq-i(HC)~yqIE8yxw -zPxz^saA3srQjWRz(i^Orp(b_Fc_R{Qc@pM$)p1q$RI-HqdB)TG>Ys^MPnk6exJA{n6C;lH`` -zT#GItLWWoU-7YMAlnoJF&e*0niUaei5w(hk)tT)MdMvsU(LK=9gY7Ih7s8+z&Up8v -zH>@TVvKVz$)xSe{d7f7;QeU%8xTej~sMiXD`qp@x+Qv7`y4`1K6BJMgh_ -z-H}egVNuN(^6$LrHT>E>Y~XaBfoMV=B1LMik}ReScLq+U2ew?jVHOf@D4dD>=iE3k -zYwlP5NE9S7zB5smM|3EX`$Jc85ryiYckBs%%{@_-om`zabwP}^ -z|I5mvKLHm%4)I};umgzU#*so_D=PWU75ruL`_Fl8TvHFu-PHd#u`8YEd~O6~IfTA4 -z4NQc&;BMnLF=*x3xmBbtx(zr2OQlrT6S=qN2HpD6C9bP}U@O4KRjvCCr;$DJp^4*N -zTu9=B;GDq-mIZvqWh0wv?PQUT^fl0L$$A;UY6UIV=>Ud70zN>St$GDdTvRvZM@3vZ -zmNs(-gzG7}kBz;~-yK#53qu2+Y1jI+6-j23;t&4WTjZA;vLBSwl$KCH8p5O%rcR$r -zpsH{y`bn!r<)=2zrECNKMJ=CBU%r~5&x(6IM(F`Zq<1!P2@aBbhmXcKHS=b%gpD~_ -z>v{eHOdiRjxngJ%^+Fe7?k_z-;I8J_-CSlRPS(riLpkHu-_&blJ5^8yWo@+#=Bn$; -zlW827wC0;%>EpOUV4Was!(a;oeX^d)bfsnbxyX`{U`=|p$Og}^ly=v&&$}ajwI*zx -zd$%Sn78kjwc4(T|gnBcxDIZ9u-Rz!Jw`AWiZ0;};%UmH77_AWqSoHi-^;LKUjEn@+ -za|W!WQWF?;7b$G3-cZuziU3T;Q7?-M#QC -zuJQx>iuxX+{$c%6zZLc}BvKplys;BGM98V&r_v4`GYr<3{)}bWpN8f!+A9L|i0nJw -zL%oDXoXb}}7*!G&v0TvG&5yg_i|~!8xoA8rYx>!h;_leB(D9P%0AaL>W)O177gO(j -zjw764UQ5noVA~SosX3r|{AZP{SOPI%7a2q|t0RMh+s>|ABf4DE)t~O#8Sx;uScS0B -zazA*fYQuVHPSOmEZ-Y!Isynx?r+)kfvA{VPApChAiYe_Dorwel)fB2ZMd#>C*uHBd -zU2Q6^L|De;YEiWPgy_Yp3b6uOwE1(AZJTK_Z{`#G$GrBYNj0m?R6gsn5R+O#?wfwh -zCii-zTng8wB4=k2vL*aQ!r(sJe?A&{=j29d3@;qsrOyKWw=VK{FVR?~=o5hh2|K$b -zy^$H=EckZrz?I_=kK;zn$7tx~J%Xz{R?&P=iESJ!Ttb;TZ-wb2=bdQ6W1KRy^RE|G -zH>;FAZ&DyK3uIMxpnvNuE~*4Hx`Ju()6zDwGtBbA$A@t9>;lgK=`$At4 -zP^8{%kZ;xK+v6@(*E)NDJ`3A|z>>_}PLmm*jZK=HjS$AlmC-*Z+dOKM5;j~<4=Fp2jbP4Pk8w1z4RPIG=W{@Spfy=Uww^QKNoZ4!=*rEO9NVK*6mvz)PA9eN`g0%}i+u$HT-u1f&w9 -zEO3$CT_Qk~%w32KvG@GF{7K2_9_qn>7+l@w9XgE2>P@RaKw;i7edFkii)@FIe9p&WxWiia{b@Qweo$O{rbhFvG_EiGMzOiZEDlseA -zSd>8E_#j`g`FMpAITg0PJBhKV{gG=9ZJ*glaD?3(3JA{-+khdRG{0fs%81x?T4e1( -z#oceyN-}b-^ddW8Iv^60nKn)#GfYi>J_PRjLXBUsImEr870N`^o=zXR;@WXpoqGcb -z(DoAiE)H0d)5t0yC7{t6blQF!k>E4Sr{UP3vN~Sgc%l9L7Ubg(KQA@l{-mG>I|@hQ -z#1UiuE4Y&&XgIonrc?xC8!TiVppKDpyAbSB4nOcfvMIBe{%^t(vJN-j3VdRuKqkJu -zc?7_Ubq8DD^Clkq}GSsVpxhogm+ -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 -zj(z#wH|Xxq#UCAP@xe%|`aa5*sWB1X|d -zd5{PjMM8^6YrAS^qyH{Cb|Q)=sHs8znSevKCo}2Eg~3MkQ@smga4Ze*bRLeoKI7Bk -zop|nB+F#qHO*J}DNk2OUX0a&W;sF;fu3C?rv+0jC88e;OWmoToU#A@s2uo*%aBGPi -z;jT9FyfCkpTDZU}Mmb_%Nvj09m_>gqTa>lPFW6HwjYv&Vlf{wNgDGNd*!Q%`c|X@Z -zY#GA~FD=#A!2_W)fOWST8|p)ekdhSKRdEAQGZ@6|%JqAeaUwdAFL}Zn*Qm#oFluP6 -zlFN1VVkpDK&-P|X^knScMR*`dzK5@;bc1G9JM?#6<9}T1RK|Y)`g; -z+xor<)US9j1XwDRq7u9$aJ3@t%B}&abk>Y`|0U^#C8T=OGv9;a7;MnsSdg?^GH?H| -zy_s+QTt~4_t-Jp;_fLbqB_y&?n*WroVjZxozln>_Gq(|H8V3#P9*Sfg@kuJ5MsEkY -z(8Cs2w$f=8V>W!?8_LQ=b!Bq@_f}ARtZtuf -z*YXUgifM!Ly*q(gF+N9H*&mggx#<27_)+QIJd3{U7HK>19jDUdKlF^jy63RuWKkB% -zBa@9Kj9e%)DHQP};rFg~OW}f;>~sPwxj~Hy=Ws?|f}pR{Qol7#LHD9o)$wm!QRITm -zG4?i*bV~{n)PEHmT%Hr|JZh9eVR8!_mxlgXaU7zccw52W-^GmY`x%+Ou -z8}CwslOG@nC2Og0@!Xm}&6X8%HMJZG`pZ -zk4n60Mte5MdoH8tuQC|PLp8loDL2AZ6HWb@6#16*Y$8y?43feAO_i(*`RSIzi~@Bh -zQ~sET2`kC~Vw}Cp>?n$VTUnK$>9S<9PHt9^9~H?-Ve>8*MZV$d{m}TKUsp+Rc5OsE2Yr4Z;CK -z+)KLfJLKU-==(?27D+f-Xo&3wu$U?VRIW9_tnanI&!HXQ-~R6f1Zt-(hHB{~1}=~K -z{x+%Ndz?O@IN@+=7FP(?B)$jfiyEA%A)4j5`D(8;Wydr`sgqt)8qd2h_{*Ozt -zR41w(W=VO82e)MAHje3K>3!NJbz&oT&jVM3eL6#St2o7R9j>SNyBC{3JERo)9p!eH`UEt -z_6`G^G^zn0q$u7pm|I`5BWZ)X$jyYm02KoaDbtZ#0_tAnPP^T2bKi$L(C}wWMhTz7 -zMlamvEV(rRdJ)?2Od2q*w&AW&UhiZ=5rbg)Bxul%%ZIgAc>idLRwr}~W3;e_15C7m -zG4gHHp~x%`go9Qu-@(>o%KBXPI@^ZqmaP`j;4u -z?Nr{(VqpThZ`%F_=2T6z^`fPd@%ZFKkWPiB9H8j9gMef1D=nJF-Gm1)s^ASdo=b~m -zmx_JqK<}}or#v#o`lK{F@d<1Q`13CW05u?nN*@C;#-7WDdpShpO4%4ND*VJfp#V3`i -zmXMm5)WQj^v3R^pcwqw-N)H`crcv46X&%Uqwssx~%Q+&_;uAHm8JB#%5hQv?cdX86 -z4%z@oEmOyYfISl7rWiw2U7nph=QT{n>CAN)c5YZp5P%V9Cu@d{Hf@;hP3PIqUnp2j -zPq-(zT0?lf0UI+=FN1@4^IU22h-S9Und(mmXhc+pjw1aAJjzam^P#4dBfHVXhJ^QB -zXY%e6=m>P*^s8zhh##1=VY0M0==Bjg@%~e}2W+_N0joTuTpC`=9qYLHGnk!=Ld^^U -z%EI;!MYuISMQ`e`L>~k~O-1}Hs*oj4-}OzFbL(Cs<^{&k5=b15LG}@*UnIiSj)O}y -zlYHl*WCPV2EHO~bV`WlPS&o3YUy(F -zoTm;&cz7G0UCF!tWqtlVMI5?YIb_=eS%U14}T|;cRZrF2y -z+;vd69iIl*fW!;v^e=EyF?{guJw}=^L19EU|JrAcYWSzi>ge_f!MhVA%p|kOFnKc- -zmAejY-F&-6{^njb^F@bFoV#WR^rTD6a{g&c-tD0lksmR);a3zIz9 -z70mQw+6>lLBjXmdUS4G>^G|vKeBrM -zjUhrE?|H>7uxa1dD9XIxFqBJLOh3C0^B6s?fD?!?__OUPJG-n$gJi`!BQh{lVF6{l -zsz<6@WioF7oMIA>o=qHraFgJNJ%^}a9f_STUN&0 -zje1-DEVHnn%~5oEB#TSba~0mxbZNg(l~8t*t`-gSx1gMgY{~fR(SvpgOiy{!wp$p@ -ziz?$I5^pImxb5`<>TUks%P?0cV~!u^`uUSTmQpLw7K|_q*{5H<0BMA?5kaXuI4us~Z&3ykL})3i-l$xRS-FkO=KtjNFKA_?OODX`82R*AAKT@$G2jY7 -zDXSsM$b!a|Iu|f+6}9Z)0D==CD%`8CTr3jom>p;qi<;j)kT@&UyuqX!TbhKrQf~}< -zq0HS$T)582Whmz%hb^;|(8I84W=B!Y4jflD!=i%Wm8e@5+y~>Inm~epA|3OO*XSbE -zE6YWN00UYA!~$$K#CI57GhqT}N085q74*@YpsaMP6F{P2{*Fcg^M5f=MfE+YaC$%Sq^+)L -zPd6&HIU21Cjn!dy_uA@YmBLtK7#vx<;3C -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 -zb|g|$D#P#@iJ7wlw~CSKVg5B+BdU7(P#sY& -z(nKb08w?XDOGoF{r0^`cMiG-JC~ePk%J74d1w=wulzu8k4zW4UKgQDt%>!R5rlhS5 -zceGnsK=pv>2$yzk>(tsbPCvbXEiV1(n~6Lt!N=#+`&n1unPkGRu* -z^a_~O*$Lt{y!eUu%go;Mje^QtqG=fS6R@3#%{+k}4-!RvJdZG^2{N_OJ?iWFO7*Bj -zQfx=h&|x}!XMj*1Of3e`kPh;WRz84`#52*X8& -zF#T=?P5SV`&9@hJyKXa4ZNwigwfLC*WnU9}q3KTj6+~rY&cT?n^^SfgMD*?Eb}!f_ -zRtozk_l{K}Kd3~d`*suk0q;aKnF>8Ysf5J(;aU$AFCTgTZPkQ{W>W3`XY!{hC|ihF -z684WA@4|FHl709S*3c*$E~_5cCCjt=eDv;qJC0M+JuvlJIQFarPp000D8 -ETDHEJ(EtDd - -literal 0 -HcmV?d00001 - -diff --git a/test-data/phony-guests/fedora-name.db.txt b/test-data/phony-guests/fedora-name.db.txt -deleted file mode 100644 -index 8456097e4..000000000 ---- a/test-data/phony-guests/fedora-name.db.txt -+++ /dev/null -@@ -1,13 +0,0 @@ --VERSION=3 --format=print --type=hash --h_nelem=3 --db_pagesize=4096 --HEADER=END -- test1 -- \01\00\00\00\00\00\00\00 -- test2 -- \02\00\00\00\00\00\00\00 -- test3 -- \03\00\00\00\00\00\00\00 --DATA=END -diff --git a/test-data/phony-guests/fedora-packages.db.txt b/test-data/phony-guests/fedora-packages.db.txt -deleted file mode 100644 -index f16a5aa76..000000000 ---- a/test-data/phony-guests/fedora-packages.db.txt -+++ /dev/null -@@ -1,13 +0,0 @@ --VERSION=3 --format=print --type=hash --h_nelem=3 --db_pagesize=4096 --HEADER=END -- \01\00\00\00 -- \00\00\00\03\00\00\00\11\00\00\03\e9\00\00\00\00\00\00\00\00\00\00\00\00\00\00\03\ea\00\00\00\00\00\00\00\04\00\00\00\00\00\00\03\fe\00\00\00\00\00\00\00\0b\00\00\00\001.0\001.fc14\00x86_64\00 -- \02\00\00\00 -- \00\00\00\03\00\00\00\11\00\00\03\e9\00\00\00\00\00\00\00\00\00\00\00\00\00\00\03\ea\00\00\00\00\00\00\00\04\00\00\00\00\00\00\03\fe\00\00\00\00\00\00\00\0b\00\00\00\002.0\002.fc14\00x86_64\00 -- \03\00\00\00 -- \00\00\00\03\00\00\00\11\00\00\03\e9\00\00\00\00\00\00\00\00\00\00\00\00\00\00\03\ea\00\00\00\00\00\00\00\04\00\00\00\00\00\00\03\fe\00\00\00\00\00\00\00\0b\00\00\00\003.0\003.fc14\00x86_64\00 --DATA=END -diff --git a/test-data/phony-guests/make-fedora-img.pl b/test-data/phony-guests/make-fedora-img.pl -index 28b9c1db0..90492b814 100755 ---- a/test-data/phony-guests/make-fedora-img.pl -+++ b/test-data/phony-guests/make-fedora-img.pl -@@ -246,6 +246,7 @@ $g->mkdir ('/usr/share/zoneinfo'); - $g->mkdir ('/usr/share/zoneinfo/Europe'); - $g->touch ('/usr/share/zoneinfo/Europe/London'); - $g->mkdir_p ('/var/lib/rpm'); -+$g->mkdir_p ('/usr/lib/rpm'); - $g->mkdir_p ('/var/log/journal'); - - $g->write ('/etc/shadow', "root::15440:0:99999:7:::\n"); -@@ -264,8 +265,12 @@ if (-f "fedora.mdadm") { - unlink ("fedora.mdadm") or die; - } - --$g->upload ($ENV{SRCDIR}.'/fedora-name.db', '/var/lib/rpm/Name'); --$g->upload ($ENV{SRCDIR}.'/fedora-packages.db', '/var/lib/rpm/Packages'); -+$g->upload ($ENV{SRCDIR}.'/fedora.db', '/var/lib/rpm/rpmdb.sqlite'); -+$g->touch ('/usr/lib/rpm/rpmrc'); -+$g->write ('/usr/lib/rpm/macros', <upload ($ENV{SRCDIR}.'/../binaries/bin-x86_64-dynamic', '/bin/ls'); - --- -2.31.1 - diff --git a/SOURCES/0014-po-POTFILES-Fix-list-of-files-for-translation.patch b/SOURCES/0014-po-POTFILES-Fix-list-of-files-for-translation.patch deleted file mode 100644 index 2cc1fd6..0000000 --- a/SOURCES/0014-po-POTFILES-Fix-list-of-files-for-translation.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 9664527c107d04aab416be87cc4fcd76dcbe5927 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 29 Mar 2021 18:25:13 +0100 -Subject: [PATCH] po/POTFILES: Fix list of files for translation. - -Fixes: commit c9ee831affed55abe0f928134cbbd2ed83b2f510 -(cherry picked from commit df983200d76bac37c811fbd2fb67e7ebe830e759) ---- - po/POTFILES | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/po/POTFILES b/po/POTFILES -index 0782e8ceb..fdc6e8062 100644 ---- a/po/POTFILES -+++ b/po/POTFILES -@@ -128,6 +128,7 @@ daemon/pingdaemon.c - daemon/proto.c - daemon/readdir.c - daemon/rename.c -+daemon/rpm-c.c - daemon/rsync.c - daemon/scrub.c - daemon/selinux-relabel.c -@@ -353,7 +354,6 @@ lib/command.c - lib/conn-socket.c - lib/copy-in-out.c - lib/create.c --lib/dbdump.c - lib/drives.c - lib/errors.c - lib/event-string.c --- -2.31.1 - diff --git a/SOURCES/0015-m4-guestfs-find-db-tool.m4-Remove-unused-file.patch b/SOURCES/0015-m4-guestfs-find-db-tool.m4-Remove-unused-file.patch deleted file mode 100644 index e8c3050..0000000 --- a/SOURCES/0015-m4-guestfs-find-db-tool.m4-Remove-unused-file.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 083856d9f9c8fccc629bf0f3a5237d26434c8940 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 29 Mar 2021 18:35:48 +0100 -Subject: [PATCH] m4/guestfs-find-db-tool.m4: Remove unused file. - -Fixes: commit 42e5e7cfdbca01b2e9bd50c63a9fc65b6da9192f -(cherry picked from commit 8317279c3539562ebad9de13c7ac515dded74e4d) ---- - m4/guestfs-find-db-tool.m4 | 43 -------------------------------------- - 1 file changed, 43 deletions(-) - delete mode 100644 m4/guestfs-find-db-tool.m4 - -diff --git a/m4/guestfs-find-db-tool.m4 b/m4/guestfs-find-db-tool.m4 -deleted file mode 100644 -index b404148c6..000000000 ---- a/m4/guestfs-find-db-tool.m4 -+++ /dev/null -@@ -1,43 +0,0 @@ --# libguestfs --# Copyright (C) 2014 Red Hat Inc. --# --# This program is free software; you can redistribute it and/or modify --# it under the terms of the GNU General Public License as published by --# the Free Software Foundation; either version 2 of the License, or --# (at your option) any later version. --# --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY; without even the implied warranty of --# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --# GNU General Public License for more details. --# --# You should have received a copy of the GNU General Public License --# along with this program; if not, write to the Free Software --# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -- --AC_DEFUN([GUESTFS_FIND_DB_TOOL],[ -- pushdef([VARIABLE],$1) -- TOOL=$2 -- -- db_tool_name="db_$TOOL" -- db_versions="53 5.3 5.2 5.1 4.8 4.7 4.6" -- db_tool_patterns="dbX_$TOOL dbX.Y_$TOOL" -- db_tool_patterns="dbX_$TOOL db_$TOOL-X dbX.Y_$TOOL db_$TOOL-X.Y" -- -- AC_ARG_VAR(VARIABLE, [Absolute path to $db_tool_name executable]) -- -- AS_IF(test -z "$VARIABLE", [ -- exe_list="db_$TOOL" -- for ver in $db_versions ; do -- ver_maj=`echo $ver | cut -d. -f1` -- ver_min=`echo $ver | cut -d. -f2` -- for pattern in $db_tool_patterns ; do -- exe=`echo "$pattern" | sed -e "s/X/$ver_maj/g;s/Y/$ver_min/g"` -- exe_list="$exe_list $exe" -- done -- done -- AC_PATH_PROGS([]VARIABLE[], [$exe_list], [no]) -- ]) -- -- popdef([VARIABLE]) --]) --- -2.31.1 - diff --git a/SOURCES/0016-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch b/SOURCES/0016-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch deleted file mode 100644 index ca169bd..0000000 --- a/SOURCES/0016-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch +++ /dev/null @@ -1,474 +0,0 @@ -From f8ccce2c7a0c1323e0721f503322df525dd5b139 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Mon, 29 Mar 2021 12:22:12 +0100 -Subject: [PATCH] test-data/phony-guests: Fix phony RPM database, fix - virt-inspector test. - -libguestfs 1.45.3 now reads the RPM database using librpm, which means -our old phony database created by db_dump can no longer work. Instead -provide a real (but very minimal) sqlite database. - -This commit also fixes the virt-inspector test since the RPM database -contents are now different. - -(cherry picked from commit 46bf6fb473889ed28bd7220476120edcda47ae07) ---- - inspector/expected-fedora-luks.img.xml | 208 +++++++++++++++++++++++-- - inspector/expected-fedora.img.xml | 208 +++++++++++++++++++++++-- - 2 files changed, 398 insertions(+), 18 deletions(-) - -diff --git a/inspector/expected-fedora-luks.img.xml b/inspector/expected-fedora-luks.img.xml -index df6060a73..72cddaf88 100644 ---- a/inspector/expected-fedora-luks.img.xml -+++ b/inspector/expected-fedora-luks.img.xml -@@ -30,22 +30,212 @@ - - - -- test1 -- 1.0 -- 1.fc14 -+ basesystem -+ 11 -+ 10.fc33 -+ noarch -+ (none) -+

The skeleton package which defines a simple Fedora system -+ Basesystem defines the components of a basic Fedora system -+(for example, the package installation order to use during bootstrapping). -+Basesystem should be in every installation of a system, and it -+should never be removed. -+ -+ -+ bash -+ 5.0.17 -+ 2.fc33 -+ x86_64 -+ https://www.gnu.org/software/bash -+ The GNU Bourne Again shell -+ The GNU Bourne Again shell (Bash) is a shell or command language -+interpreter that is compatible with the Bourne shell (sh). Bash -+incorporates useful features from the Korn shell (ksh) and the C shell -+(csh). Most sh scripts can be run by bash without modification. -+ -+ -+ fedora-gpg-keys -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Fedora RPM keys -+ This package provides the RPM signature keys. -+ -+ -+ fedora-release -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Fedora release files -+ Fedora release files such as various /etc/ files that define the release -+and systemd preset files that determine which services are enabled by default. -+ -+ -+ fedora-release-common -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Fedora release files -+ Release files common to all Editions and Spins of Fedora -+ -+ -+ fedora-release-identity-basic -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Package providing the basic Fedora identity -+ Provides the necessary files for a Fedora installation that is not identifying -+itself as a particular Edition or Spin. -+ -+ -+ fedora-repos -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Fedora package repositories -+ Fedora package repository files for yum and dnf along with gpg public keys. -+ -+ -+ filesystem -+ 3.14 -+ 3.fc33 -+ x86_64 -+ https://pagure.io/filesystem -+ The basic directory layout for a Linux system -+ The filesystem package is one of the basic packages that is installed -+on a Linux system. Filesystem contains the basic directory layout -+for a Linux operating system, including the correct permissions for -+the directories. -+ -+ -+ glibc -+ 2.32 -+ 4.fc33 -+ x86_64 -+ http://www.gnu.org/software/glibc/ -+ The GNU libc libraries -+ The glibc package contains standard libraries which are used by -+multiple programs on the system. In order to save disk space and -+memory, as well as to make upgrading easier, common system code is -+kept in one place and shared between programs. This particular package -+contains the most important sets of shared libraries: the standard C -+library and the standard math library. Without these two libraries, a -+Linux system will not function. -+ -+ -+ glibc-all-langpacks -+ 2.32 -+ 4.fc33 -+ x86_64 -+ http://www.gnu.org/software/glibc/ -+ All language packs for glibc. -+ -+ -+ glibc-common -+ 2.32 -+ 4.fc33 - x86_64 -+ http://www.gnu.org/software/glibc/ -+ Common binaries and locale data for glibc -+ The glibc-common package includes common binaries for the GNU libc -+libraries, as well as national language (locale) support. - - -- test2 -- 2.0 -- 2.fc14 -+ gpg-pubkey -+ 9570ff31 -+ 5e3006fb -+ (none) -+ (none) -+ Fedora (33) <fedora-33-primary@fedoraproject.org> public key -+ -----BEGIN PGP PUBLIC KEY BLOCK----- -+Version: rpm-4.16.1.2 (NSS-3) -+ -+mQINBF4wBvsBEADQmcGbVUbDRUoXADReRmOOEMeydHghtKC9uRs9YNpGYZIB+bie -+bGYZmflQayfh/wEpO2W/IZfGpHPL42V7SbyvqMjwNls/fnXsCtf4LRofNK8Qd9fN -+kYargc9R7BEz/mwXKMiRQVx+DzkmqGWy2gq4iD0/mCyf5FdJCE40fOWoIGJXaOI1 -+Tz1vWqKwLS5T0dfmi9U4Tp/XsKOZGvN8oi5h0KmqFk7LEZr1MXarhi2Va86sgxsF -+QcZEKfu5tgD0r00vXzikoSjn3qA5JW5FW07F1pGP4bF5f9J3CZbQyOjTSWMmmfTm -+2d2BURWzaDiJN9twY2yjzkoOMuPdXXvovg7KxLcQerKT+FbKbq8DySJX2rnOA77k -+UG4c9BGf/L1uBkAT8dpHLk6Uf5BfmypxUkydSWT1xfTDnw1MqxO0MsLlAHOR3J7c -+oW9kLcOLuCQn1hBEwfZv7VSWBkGXSmKfp0LLIxAFgRtv+Dh+rcMMRdJgKr1V3FU+ -+rZ1+ZAfYiBpQJFPjv70vx+rGEgS801D3PJxBZUEy4Ic4ZYaKNhK9x9PRQuWcIBuW -+6eTe/6lKWZeyxCumLLdiS75mF2oTcBaWeoc3QxrPRV15eDKeYJMbhnUai/7lSrhs -+EWCkKR1RivgF4slYmtNE5ZPGZ/d61zjwn2xi4xNJVs8q9WRPMpHp0vCyMwARAQAB -+tDFGZWRvcmEgKDMzKSA8ZmVkb3JhLTMzLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v -+cmc+iQI4BBMBAgAiBQJeMAb7AhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK -+CRBJ/XdJlXD/MZm2D/9kriL43vd3+0DNMeA82n2v9mSR2PQqKny39xNlYPyy/1yZ -+P/KXoa4NYSCA971LSd7lv4n/h5bEKgGHxZfttfOzOnWMVSSTfjRyM/df/NNzTUEV -+7ORA5GW18g8PEtS7uRxVBf3cLvWu5q+8jmqES5HqTAdGVcuIFQeBXFN8Gy1Jinuz -+AH8rJSdkUeZ0cehWbERq80BWM9dhad5dW+/+Gv0foFBvP15viwhWqajr8V0B8es+ -+2/tHI0k86FAujV5i0rrXl5UOoLilO57QQNDZH/qW9GsHwVI+2yecLstpUNLq+EZC -+GqTZCYoxYRpl0gAMbDLztSL/8Bc0tJrCRG3tavJotFYlgUK60XnXlQzRkh9rgsfT -+EXbQifWdQMMogzjCJr0hzJ+V1d0iozdUxB2ZEgTjukOvatkB77DY1FPZRkSFIQs+ -+fdcjazDIBLIxwJu5QwvTNW8lOLnJ46g4sf1WJoUdNTbR0BaC7HHj1inVWi0p7IuN -+66EPGzJOSjLK+vW+J0ncPDEgLCV74RF/0nR5fVTdrmiopPrzFuguHf9S9gYI3Zun -+Yl8FJUu4kRO6JPPTicUXWX+8XZmE94aK14RCJL23nOSi8T1eW8JLW43dCBRO8QUE -+Aso1t2pypm/1zZexJdOV8yGME3g5l2W6PLgpz58DBECgqc/kda+VWgEAp7rO2A== -+=EPL3 -+-----END PGP PUBLIC KEY BLOCK----- -+ -+ -+ -+ libgcc -+ 10.2.1 -+ 9.fc33 - x86_64 -+ http://gcc.gnu.org -+ GCC version 10 shared support library -+ This package contains GCC shared support library which is needed -+e.g. for exception handling support. -+ -+ -+ ncurses-base -+ 6.2 -+ 3.20200222.fc33 -+ noarch -+ https://invisible-island.net/ncurses/ncurses.html -+ Descriptions of common terminals -+ This package contains descriptions of common terminals. Other terminal -+descriptions are included in the ncurses-term package. - - -- test3 -- 3.0 -- 3.fc14 -+ ncurses-libs -+ 6.2 -+ 3.20200222.fc33 - x86_64 -+ https://invisible-island.net/ncurses/ncurses.html -+ Ncurses libraries -+ The curses library routines are a terminal-independent method of -+updating character screens with reasonable optimization. The ncurses -+(new curses) library is a freely distributable replacement for the -+discontinued 4.4 BSD classic curses library. -+ -+This package contains the ncurses libraries. -+ -+ -+ setup -+ 2.13.7 -+ 2.fc33 -+ noarch -+ https://pagure.io/setup/ -+ A set of system configuration and setup files -+ The setup package contains a set of important system configuration and -+setup files, such as passwd, group, and profile. -+ -+ -+ tzdata -+ 2021a -+ 1.fc33 -+ noarch -+ https://www.iana.org/time-zones -+ Timezone data -+ This package contains data files with rules for various timezones around -+the world. - - - -diff --git a/inspector/expected-fedora.img.xml b/inspector/expected-fedora.img.xml -index df6060a73..72cddaf88 100644 ---- a/inspector/expected-fedora.img.xml -+++ b/inspector/expected-fedora.img.xml -@@ -30,22 +30,212 @@ - - - -- test1 -- 1.0 -- 1.fc14 -+ basesystem -+ 11 -+ 10.fc33 -+ noarch -+ (none) -+ The skeleton package which defines a simple Fedora system -+ Basesystem defines the components of a basic Fedora system -+(for example, the package installation order to use during bootstrapping). -+Basesystem should be in every installation of a system, and it -+should never be removed. -+ -+ -+ bash -+ 5.0.17 -+ 2.fc33 -+ x86_64 -+ https://www.gnu.org/software/bash -+ The GNU Bourne Again shell -+ The GNU Bourne Again shell (Bash) is a shell or command language -+interpreter that is compatible with the Bourne shell (sh). Bash -+incorporates useful features from the Korn shell (ksh) and the C shell -+(csh). Most sh scripts can be run by bash without modification. -+ -+ -+ fedora-gpg-keys -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Fedora RPM keys -+ This package provides the RPM signature keys. -+ -+ -+ fedora-release -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Fedora release files -+ Fedora release files such as various /etc/ files that define the release -+and systemd preset files that determine which services are enabled by default. -+ -+ -+ fedora-release-common -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Fedora release files -+ Release files common to all Editions and Spins of Fedora -+ -+ -+ fedora-release-identity-basic -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Package providing the basic Fedora identity -+ Provides the necessary files for a Fedora installation that is not identifying -+itself as a particular Edition or Spin. -+ -+ -+ fedora-repos -+ 33 -+ 3 -+ noarch -+ https://fedoraproject.org/ -+ Fedora package repositories -+ Fedora package repository files for yum and dnf along with gpg public keys. -+ -+ -+ filesystem -+ 3.14 -+ 3.fc33 -+ x86_64 -+ https://pagure.io/filesystem -+ The basic directory layout for a Linux system -+ The filesystem package is one of the basic packages that is installed -+on a Linux system. Filesystem contains the basic directory layout -+for a Linux operating system, including the correct permissions for -+the directories. -+ -+ -+ glibc -+ 2.32 -+ 4.fc33 -+ x86_64 -+ http://www.gnu.org/software/glibc/ -+ The GNU libc libraries -+ The glibc package contains standard libraries which are used by -+multiple programs on the system. In order to save disk space and -+memory, as well as to make upgrading easier, common system code is -+kept in one place and shared between programs. This particular package -+contains the most important sets of shared libraries: the standard C -+library and the standard math library. Without these two libraries, a -+Linux system will not function. -+ -+ -+ glibc-all-langpacks -+ 2.32 -+ 4.fc33 -+ x86_64 -+ http://www.gnu.org/software/glibc/ -+ All language packs for glibc. -+ -+ -+ glibc-common -+ 2.32 -+ 4.fc33 - x86_64 -+ http://www.gnu.org/software/glibc/ -+ Common binaries and locale data for glibc -+ The glibc-common package includes common binaries for the GNU libc -+libraries, as well as national language (locale) support. - - -- test2 -- 2.0 -- 2.fc14 -+ gpg-pubkey -+ 9570ff31 -+ 5e3006fb -+ (none) -+ (none) -+ Fedora (33) <fedora-33-primary@fedoraproject.org> public key -+ -----BEGIN PGP PUBLIC KEY BLOCK----- -+Version: rpm-4.16.1.2 (NSS-3) -+ -+mQINBF4wBvsBEADQmcGbVUbDRUoXADReRmOOEMeydHghtKC9uRs9YNpGYZIB+bie -+bGYZmflQayfh/wEpO2W/IZfGpHPL42V7SbyvqMjwNls/fnXsCtf4LRofNK8Qd9fN -+kYargc9R7BEz/mwXKMiRQVx+DzkmqGWy2gq4iD0/mCyf5FdJCE40fOWoIGJXaOI1 -+Tz1vWqKwLS5T0dfmi9U4Tp/XsKOZGvN8oi5h0KmqFk7LEZr1MXarhi2Va86sgxsF -+QcZEKfu5tgD0r00vXzikoSjn3qA5JW5FW07F1pGP4bF5f9J3CZbQyOjTSWMmmfTm -+2d2BURWzaDiJN9twY2yjzkoOMuPdXXvovg7KxLcQerKT+FbKbq8DySJX2rnOA77k -+UG4c9BGf/L1uBkAT8dpHLk6Uf5BfmypxUkydSWT1xfTDnw1MqxO0MsLlAHOR3J7c -+oW9kLcOLuCQn1hBEwfZv7VSWBkGXSmKfp0LLIxAFgRtv+Dh+rcMMRdJgKr1V3FU+ -+rZ1+ZAfYiBpQJFPjv70vx+rGEgS801D3PJxBZUEy4Ic4ZYaKNhK9x9PRQuWcIBuW -+6eTe/6lKWZeyxCumLLdiS75mF2oTcBaWeoc3QxrPRV15eDKeYJMbhnUai/7lSrhs -+EWCkKR1RivgF4slYmtNE5ZPGZ/d61zjwn2xi4xNJVs8q9WRPMpHp0vCyMwARAQAB -+tDFGZWRvcmEgKDMzKSA8ZmVkb3JhLTMzLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v -+cmc+iQI4BBMBAgAiBQJeMAb7AhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK -+CRBJ/XdJlXD/MZm2D/9kriL43vd3+0DNMeA82n2v9mSR2PQqKny39xNlYPyy/1yZ -+P/KXoa4NYSCA971LSd7lv4n/h5bEKgGHxZfttfOzOnWMVSSTfjRyM/df/NNzTUEV -+7ORA5GW18g8PEtS7uRxVBf3cLvWu5q+8jmqES5HqTAdGVcuIFQeBXFN8Gy1Jinuz -+AH8rJSdkUeZ0cehWbERq80BWM9dhad5dW+/+Gv0foFBvP15viwhWqajr8V0B8es+ -+2/tHI0k86FAujV5i0rrXl5UOoLilO57QQNDZH/qW9GsHwVI+2yecLstpUNLq+EZC -+GqTZCYoxYRpl0gAMbDLztSL/8Bc0tJrCRG3tavJotFYlgUK60XnXlQzRkh9rgsfT -+EXbQifWdQMMogzjCJr0hzJ+V1d0iozdUxB2ZEgTjukOvatkB77DY1FPZRkSFIQs+ -+fdcjazDIBLIxwJu5QwvTNW8lOLnJ46g4sf1WJoUdNTbR0BaC7HHj1inVWi0p7IuN -+66EPGzJOSjLK+vW+J0ncPDEgLCV74RF/0nR5fVTdrmiopPrzFuguHf9S9gYI3Zun -+Yl8FJUu4kRO6JPPTicUXWX+8XZmE94aK14RCJL23nOSi8T1eW8JLW43dCBRO8QUE -+Aso1t2pypm/1zZexJdOV8yGME3g5l2W6PLgpz58DBECgqc/kda+VWgEAp7rO2A== -+=EPL3 -+-----END PGP PUBLIC KEY BLOCK----- -+ -+ -+ -+ libgcc -+ 10.2.1 -+ 9.fc33 - x86_64 -+ http://gcc.gnu.org -+ GCC version 10 shared support library -+ This package contains GCC shared support library which is needed -+e.g. for exception handling support. -+ -+ -+ ncurses-base -+ 6.2 -+ 3.20200222.fc33 -+ noarch -+ https://invisible-island.net/ncurses/ncurses.html -+ Descriptions of common terminals -+ This package contains descriptions of common terminals. Other terminal -+descriptions are included in the ncurses-term package. - - -- test3 -- 3.0 -- 3.fc14 -+ ncurses-libs -+ 6.2 -+ 3.20200222.fc33 - x86_64 -+ https://invisible-island.net/ncurses/ncurses.html -+ Ncurses libraries -+ The curses library routines are a terminal-independent method of -+updating character screens with reasonable optimization. The ncurses -+(new curses) library is a freely distributable replacement for the -+discontinued 4.4 BSD classic curses library. -+ -+This package contains the ncurses libraries. -+ -+ -+ setup -+ 2.13.7 -+ 2.fc33 -+ noarch -+ https://pagure.io/setup/ -+ A set of system configuration and setup files -+ The setup package contains a set of important system configuration and -+setup files, such as passwd, group, and profile. -+ -+ -+ tzdata -+ 2021a -+ 1.fc33 -+ noarch -+ https://www.iana.org/time-zones -+ Timezone data -+ This package contains data files with rules for various timezones around -+the world. - - - --- -2.31.1 - diff --git a/SOURCES/0017-launch-libvirt-place-our-virtio-net-pci-device-in-sl.patch b/SOURCES/0017-launch-libvirt-place-our-virtio-net-pci-device-in-sl.patch deleted file mode 100644 index ccedd9b..0000000 --- a/SOURCES/0017-launch-libvirt-place-our-virtio-net-pci-device-in-sl.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 6657d0c1018ab44ae680376463ac3f0421548fb4 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 23 Dec 2021 11:36:59 +0100 -Subject: [PATCH] launch-libvirt: place our virtio-net-pci device in slot 0x1e - -The trick we use for adding our virtio-net-pci device -in the libvirt backend can conflict with libvirtd's and QEMU's PCI address -assignment. Try to mitigate that by placing our device in slot 0x1e on the -root bus. In practice this could only conflict with a "dmi-to-pci-bridge" -device model, which libvirtd itself places in slot 0x1e. However, given -the XMLs we generate, and modern QEMU versions, libvirtd has no reason to -auto-add "dmi-to-pci-bridge". Refer to -. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2034160 -Signed-off-by: Laszlo Ersek -Message-Id: <20211223103701.12702-2-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -Tested-by: Richard W.M. Jones -(cherry picked from commit 5ce5ef6a97a58c5e906083ad4e944545712b3f3f) ---- - lib/guestfs-internal.h | 11 +++++++++++ - lib/launch-libvirt.c | 4 +++- - 2 files changed, 14 insertions(+), 1 deletion(-) - -diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h -index 4799ee0a1..0b46f0070 100644 ---- a/lib/guestfs-internal.h -+++ b/lib/guestfs-internal.h -@@ -147,6 +147,17 @@ - #define VIRTIO_DEVICE_NAME(type) type "-pci" - #endif - -+/* Place the virtio-net controller in slot 0x1e on the root bus, on normal -+ * hardware with PCI. Refer to RHBZ#2034160. -+ */ -+#ifdef HAVE_LIBVIRT_BACKEND -+#if defined(__arm__) || defined(__s390x__) -+#define VIRTIO_NET_PCI_ADDR "" -+#else -+#define VIRTIO_NET_PCI_ADDR ",addr=1e.0" -+#endif -+#endif -+ - /* Guestfs handle and associated structures. */ - - /* State. */ -diff --git a/lib/launch-libvirt.c b/lib/launch-libvirt.c -index 026dc6b26..5842319df 100644 ---- a/lib/launch-libvirt.c -+++ b/lib/launch-libvirt.c -@@ -1834,7 +1834,9 @@ construct_libvirt_xml_qemu_cmdline (guestfs_h *g, - } end_element (); - - start_element ("qemu:arg") { -- attribute ("value", VIRTIO_DEVICE_NAME ("virtio-net") ",netdev=usernet"); -+ attribute ("value", (VIRTIO_DEVICE_NAME ("virtio-net") -+ ",netdev=usernet" -+ VIRTIO_NET_PCI_ADDR)); - } end_element (); - } - --- -2.31.1 - diff --git a/SOURCES/0018-lib-extract-NETWORK_ADDRESS-and-NETWORK_PREFIX-as-ma.patch b/SOURCES/0018-lib-extract-NETWORK_ADDRESS-and-NETWORK_PREFIX-as-ma.patch deleted file mode 100644 index 389df1d..0000000 --- a/SOURCES/0018-lib-extract-NETWORK_ADDRESS-and-NETWORK_PREFIX-as-ma.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 4b9eac11db3e2cc9ace397ed4c804356a7d9adbf Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 23 Dec 2021 11:37:00 +0100 -Subject: [PATCH] lib: extract NETWORK_ADDRESS and NETWORK_PREFIX as macros - -The 169.254.0.0/16 network specification (for the appliance) is currently -duplicated between the direct backend and the libvirt backend. In a -subsequent patch, we're going to need the network specification in yet -another spot; extract it now to the NETWORK_ADDRESS and NETWORK_PREFIX -macros (simply as strings). - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2034160 -Signed-off-by: Laszlo Ersek -Message-Id: <20211223103701.12702-3-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -Tested-by: Richard W.M. Jones -(cherry picked from commit 216de164e091a5c36403f24901698044a43ae0d9) ---- - lib/guestfs-internal.h | 6 ++++++ - lib/launch-direct.c | 2 +- - lib/launch-libvirt.c | 3 ++- - 3 files changed, 9 insertions(+), 2 deletions(-) - -diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h -index 0b46f0070..97a13ff2c 100644 ---- a/lib/guestfs-internal.h -+++ b/lib/guestfs-internal.h -@@ -158,6 +158,12 @@ - #endif - #endif - -+/* Network address and network mask (expressed as address prefix) that the -+ * appliance will see (if networking is enabled). -+ */ -+#define NETWORK_ADDRESS "169.254.0.0" -+#define NETWORK_PREFIX "16" -+ - /* Guestfs handle and associated structures. */ - - /* State. */ -diff --git a/lib/launch-direct.c b/lib/launch-direct.c -index b6ed9766f..de17d2167 100644 ---- a/lib/launch-direct.c -+++ b/lib/launch-direct.c -@@ -681,7 +681,7 @@ launch_direct (guestfs_h *g, void *datav, const char *arg) - start_list ("-netdev") { - append_list ("user"); - append_list ("id=usernet"); -- append_list ("net=169.254.0.0/16"); -+ append_list ("net=" NETWORK_ADDRESS "/" NETWORK_PREFIX); - } end_list (); - start_list ("-device") { - append_list (VIRTIO_DEVICE_NAME ("virtio-net")); -diff --git a/lib/launch-libvirt.c b/lib/launch-libvirt.c -index 5842319df..0f38f0aec 100644 ---- a/lib/launch-libvirt.c -+++ b/lib/launch-libvirt.c -@@ -1826,7 +1826,8 @@ construct_libvirt_xml_qemu_cmdline (guestfs_h *g, - } end_element (); - - start_element ("qemu:arg") { -- attribute ("value", "user,id=usernet,net=169.254.0.0/16"); -+ attribute ("value", -+ "user,id=usernet,net=" NETWORK_ADDRESS "/" NETWORK_PREFIX); - } end_element (); - - start_element ("qemu:arg") { --- -2.31.1 - diff --git a/SOURCES/0019-launch-libvirt-add-virtio-net-via-the-standard-inter.patch b/SOURCES/0019-launch-libvirt-add-virtio-net-via-the-standard-inter.patch deleted file mode 100644 index fd48ba9..0000000 --- a/SOURCES/0019-launch-libvirt-add-virtio-net-via-the-standard-inter.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 8570de6e766297e4c9feab1c54ae05037f33edeb Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Thu, 23 Dec 2021 11:37:01 +0100 -Subject: [PATCH] launch-libvirt: add virtio-net via the standard - element - -Starting with version 3.8.0, libvirt allows us to specify the network -address and network mask (as prefix) for SLIRP directly via the - element in the domain XML: -. This means -we don't need the hack for virtio-net on such versions. - -Restrict the hack in construct_libvirt_xml_qemu_cmdline() to -libvirt<3.8.0, and generate the proper element in -construct_libvirt_xml_devices() on libvirt>=3.8.0. - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2034160 -Suggested-by: Richard W.M. Jones -Signed-off-by: Laszlo Ersek -Message-Id: <20211223103701.12702-4-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones -Tested-by: Richard W.M. Jones -(cherry picked from commit 5858c2cf6c24b3776e3867eafd9d86a1f4912d9c) ---- - lib/guestfs-internal.h | 3 ++- - lib/launch-libvirt.c | 27 +++++++++++++++++++++++++-- - 2 files changed, 27 insertions(+), 3 deletions(-) - -diff --git a/lib/guestfs-internal.h b/lib/guestfs-internal.h -index 97a13ff2c..b11c945e9 100644 ---- a/lib/guestfs-internal.h -+++ b/lib/guestfs-internal.h -@@ -148,7 +148,8 @@ - #endif - - /* Place the virtio-net controller in slot 0x1e on the root bus, on normal -- * hardware with PCI. Refer to RHBZ#2034160. -+ * hardware with PCI. Necessary only before libvirt 3.8.0. Refer to -+ * RHBZ#2034160. - */ - #ifdef HAVE_LIBVIRT_BACKEND - #if defined(__arm__) || defined(__s390x__) -diff --git a/lib/launch-libvirt.c b/lib/launch-libvirt.c -index 0f38f0aec..f6bb39d99 100644 ---- a/lib/launch-libvirt.c -+++ b/lib/launch-libvirt.c -@@ -1396,6 +1396,28 @@ construct_libvirt_xml_devices (guestfs_h *g, - } end_element (); - } end_element (); - -+ /* Virtio-net NIC with SLIRP (= userspace) back-end, if networking is -+ * enabled. Starting with libvirt 3.8.0, we can specify the network address -+ * and prefix for SLIRP in the domain XML. Therefore, we can add the NIC -+ * via the standard element rather than , and -+ * so libvirt can manage the PCI address of the virtio-net NIC like the PCI -+ * addresses of all other devices. Refer to RHBZ#2034160. -+ */ -+ if (g->enable_network && -+ guestfs_int_version_ge (¶ms->data->libvirt_version, 3, 8, 0)) { -+ start_element ("interface") { -+ attribute ("type", "user"); -+ start_element ("model") { -+ attribute ("type", "virtio"); -+ } end_element (); -+ start_element ("ip") { -+ attribute ("family", "ipv4"); -+ attribute ("address", NETWORK_ADDRESS); -+ attribute ("prefix", NETWORK_PREFIX); -+ } end_element (); -+ } end_element (); -+ } -+ - /* Libvirt adds some devices by default. Indicate to libvirt - * that we don't want them. - */ -@@ -1818,9 +1840,10 @@ construct_libvirt_xml_qemu_cmdline (guestfs_h *g, - } end_element (); - - /* Workaround because libvirt user networking cannot specify "net=" -- * parameter. -+ * parameter. Necessary only before libvirt 3.8.0; refer to RHBZ#2034160. - */ -- if (g->enable_network) { -+ if (g->enable_network && -+ !guestfs_int_version_ge (¶ms->data->libvirt_version, 3, 8, 0)) { - start_element ("qemu:arg") { - attribute ("value", "-netdev"); - } end_element (); --- -2.31.1 - diff --git a/SOURCES/0020-appliance-Use-cpu-max.patch b/SOURCES/0020-appliance-Use-cpu-max.patch deleted file mode 100644 index cf34b45..0000000 --- a/SOURCES/0020-appliance-Use-cpu-max.patch +++ /dev/null @@ -1,86 +0,0 @@ -From fbb053fc71c0c072acb3fbf6e5fbbfc3b0667fd2 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 28 Jan 2021 12:20:49 +0000 -Subject: [PATCH] appliance: Use -cpu max. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -QEMU has a newish feature (from about 2017 / qemu 2.9) called -cpu max -which is supposed to select the best CPU, ideal for libguestfs. - -After this change, on x86-64: - - KVM TCG - -Direct -cpu max -cpu max -(non-libvirt) - -Libvirt - - - -Thanks: Daniel Berrangé -(cherry picked from commit 30f74f38bd6e42e783ba80895f4d6826abddd417) ---- - lib/appliance-cpu.c | 16 ++++++++-------- - lib/launch-libvirt.c | 9 +++++++++ - 2 files changed, 17 insertions(+), 8 deletions(-) - -diff --git a/lib/appliance-cpu.c b/lib/appliance-cpu.c -index 5ef9f5c72..54ac6e2e3 100644 ---- a/lib/appliance-cpu.c -+++ b/lib/appliance-cpu.c -@@ -38,6 +38,11 @@ - * - * The literal string C<"host"> means use C<-cpu host>. - * -+ * =item C<"max"> -+ * -+ * The literal string C<"max"> means use C<-cpu max> (the best -+ * possible). This requires awkward translation for libvirt. -+ * - * =item some string - * - * Some string such as C<"cortex-a57"> means use C<-cpu cortex-a57>. -@@ -80,14 +85,9 @@ guestfs_int_get_cpu_model (int kvm) - /* See discussion in https://bugzilla.redhat.com/show_bug.cgi?id=1605071 */ - return NULL; - #else -- /* On most architectures, it is faster to pass the CPU host model to -- * the appliance, allowing maximum speed for things like checksums -- * and encryption. Only do this with KVM. It is broken in subtle -- * ways on TCG, and fairly pointless when you're emulating anyway. -+ /* On most architectures we can use "max" to get the best possible CPU. -+ * For recent qemu this should work even on TCG. - */ -- if (kvm) -- return "host"; -- else -- return NULL; -+ return "max"; - #endif - } -diff --git a/lib/launch-libvirt.c b/lib/launch-libvirt.c -index f6bb39d99..e3ff1ffe0 100644 ---- a/lib/launch-libvirt.c -+++ b/lib/launch-libvirt.c -@@ -1169,6 +1169,15 @@ construct_libvirt_xml_cpu (guestfs_h *g, - attribute ("fallback", "allow"); - } end_element (); - } -+ else if (STREQ (cpu_model, "max")) { -+ if (params->data->is_kvm) -+ attribute ("mode", "host-passthrough"); -+ else -+ attribute ("mode", "host-model"); -+ start_element ("model") { -+ attribute ("fallback", "allow"); -+ } end_element (); -+ } - else - single_element ("model", cpu_model); - } end_element (); --- -2.31.1 - diff --git a/SOURCES/0021-appliance-Use-cpu-mode-maximum-for-cpu-max-on-libvir.patch b/SOURCES/0021-appliance-Use-cpu-mode-maximum-for-cpu-max-on-libvir.patch deleted file mode 100644 index 5309621..0000000 --- a/SOURCES/0021-appliance-Use-cpu-mode-maximum-for-cpu-max-on-libvir.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 7dde1007525ec235e769351be15ca5de34eeda4a Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 18 Mar 2021 12:32:26 +0000 -Subject: [PATCH] appliance: Use for -cpu max on libvirt. - -Note this requires libvirt >= 7.1.0 which was only released in March 2021. - -With an older libvirt you will see this error: - - Original error from libvirt: unsupported configuration: Invalid mode attribute 'maximum' [code=67 int1=-1] - -In theory we could check if this is supported by looking at the -libvirt capabilities and fall back, but this commit does not do that, -in the expectation that most people will be using the default backend -(direct) and on Fedora/RHEL we will add an explicit minimum version -dependency to the package. - -qemu support has been around quite a bit longer (at least since 2017). - -Fixes: commit 30f74f38bd6e42e783ba80895f4d6826abddd417 -(cherry picked from commit 13ceb6a87b2869909a6a0e3c8caa962b72e4cb0e) ---- - lib/launch-libvirt.c | 9 ++------- - 1 file changed, 2 insertions(+), 7 deletions(-) - -diff --git a/lib/launch-libvirt.c b/lib/launch-libvirt.c -index e3ff1ffe0..db619910f 100644 ---- a/lib/launch-libvirt.c -+++ b/lib/launch-libvirt.c -@@ -1170,13 +1170,8 @@ construct_libvirt_xml_cpu (guestfs_h *g, - } end_element (); - } - else if (STREQ (cpu_model, "max")) { -- if (params->data->is_kvm) -- attribute ("mode", "host-passthrough"); -- else -- attribute ("mode", "host-model"); -- start_element ("model") { -- attribute ("fallback", "allow"); -- } end_element (); -+ /* https://bugzilla.redhat.com/show_bug.cgi?id=1935572#c11 */ -+ attribute ("mode", "maximum"); - } - else - single_element ("model", cpu_model); --- -2.31.1 - diff --git a/SOURCES/0022-lib-Disable-5-level-page-tables-when-using-cpu-max.patch b/SOURCES/0022-lib-Disable-5-level-page-tables-when-using-cpu-max.patch deleted file mode 100644 index 7fe284e..0000000 --- a/SOURCES/0022-lib-Disable-5-level-page-tables-when-using-cpu-max.patch +++ /dev/null @@ -1,92 +0,0 @@ -From bb19cc0cdd43619ccf830e1e608f79e46f8ddf86 Mon Sep 17 00:00:00 2001 -From: "Richard W.M. Jones" -Date: Thu, 12 May 2022 08:36:37 +0100 -Subject: [PATCH] lib: Disable 5-level page tables when using -cpu max - -In https://bugzilla.redhat.com/show_bug.cgi?id=2082806 we've been -tracking an insidious qemu bug which intermittently prevents the -libguestfs appliance from starting. The symptoms are that SeaBIOS -starts and displays its messages, but the kernel isn't reached. We -found that the kernel does in fact start, but when it tries to set up -page tables and jump to protected mode it gets a triple fault which -causes the emulated CPU in qemu to reset (qemu exits). - -This seems to only affect TCG (not KVM). - -Yesterday I found that this is caused by using -cpu max which enables -the "la57" feature (5-level page tables[0]), and that we can make the -problem go away using -cpu max,la57=off. Note that I still don't -fully understand the qemu bug, so this is only a workaround. - -I chose to disable 5-level page tables for both TCG and KVM, partly to -make the patch simpler, and partly because I guess it's not a feature -(ie. 57 bit linear addresses) that is useful for the libguestfs -appliance case, where we have limited physical memory and no need to -run any programs with huge address spaces. - -I tested this by running both the direct & libvirt paths overnight. I -expect that this patch will fail with old qemu/libvirt which doesn't -understand the "la57" feature, but this is only intended as a -temporary workaround. - -[0] Article about 5-level page tables as background: -https://lwn.net/Articles/717293/ - -Thanks: Laszlo Ersek -Fixes: https://answers.launchpad.net/ubuntu/+source/libguestfs/+question/701625 - -[RHEL 8.7: Patch is not upstream. This is the initial patch as posted -to the mailing list here: -https://listman.redhat.com/archives/libguestfs/2022-May/028853.html] ---- - lib/launch-direct.c | 15 +++++++++++++-- - lib/launch-libvirt.c | 7 +++++++ - 2 files changed, 20 insertions(+), 2 deletions(-) - -diff --git a/lib/launch-direct.c b/lib/launch-direct.c -index de17d2167..6b28e4724 100644 ---- a/lib/launch-direct.c -+++ b/lib/launch-direct.c -@@ -534,8 +534,19 @@ launch_direct (guestfs_h *g, void *datav, const char *arg) - } end_list (); - - cpu_model = guestfs_int_get_cpu_model (has_kvm && !force_tcg); -- if (cpu_model) -- arg ("-cpu", cpu_model); -+ if (cpu_model) { -+#if defined(__x86_64__) -+ /* Temporary workaround for RHBZ#2082806 */ -+ if (STREQ (cpu_model, "max")) { -+ start_list ("-cpu") { -+ append_list (cpu_model); -+ append_list ("la57=off"); -+ } end_list (); -+ } -+ else -+#endif -+ arg ("-cpu", cpu_model); -+ } - - if (g->smp > 1) - arg_format ("-smp", "%d", g->smp); -diff --git a/lib/launch-libvirt.c b/lib/launch-libvirt.c -index db619910f..bad4a54ea 100644 ---- a/lib/launch-libvirt.c -+++ b/lib/launch-libvirt.c -@@ -1172,6 +1172,13 @@ construct_libvirt_xml_cpu (guestfs_h *g, - else if (STREQ (cpu_model, "max")) { - /* https://bugzilla.redhat.com/show_bug.cgi?id=1935572#c11 */ - attribute ("mode", "maximum"); -+#if defined(__x86_64__) -+ /* Temporary workaround for RHBZ#2082806 */ -+ start_element ("feature") { -+ attribute ("policy", "disable"); -+ attribute ("name", "la57"); -+ } end_element (); -+#endif - } - else - single_element ("model", cpu_model); --- -2.31.1 - diff --git a/SOURCES/0023-docs-guestfs-security-document-CVE-2022-2211.patch b/SOURCES/0023-docs-guestfs-security-document-CVE-2022-2211.patch deleted file mode 100644 index 6d74edc..0000000 --- a/SOURCES/0023-docs-guestfs-security-document-CVE-2022-2211.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 22d779d5982dc82d629710d41973ed6545707bd9 Mon Sep 17 00:00:00 2001 -From: Laszlo Ersek -Date: Tue, 28 Jun 2022 13:54:16 +0200 -Subject: [PATCH] docs/guestfs-security: document CVE-2022-2211 - -Short log for the common submodule, commit range -f8de5508fe75..35467027f657: - -Laszlo Ersek (2): - mlcustomize: factor out pkg install/update/uninstall from guestfs-tools - options: fix buffer overflow in get_keys() [CVE-2022-2211] - -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1809453 -Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2100862 -Signed-off-by: Laszlo Ersek -Message-Id: <20220628115418.5376-2-lersek@redhat.com> -Reviewed-by: Richard W.M. Jones - -Cherry picked from commit 99844660b48ed809e37378262c65d63df6ce4a53. -For the cherry pick I only added one submodule commit: - -options: fix buffer overflow in get_keys() [CVE-2022-2211] ---- - common | 2 +- - docs/guestfs-security.pod | 28 ++++++++++++++++++++++++++++ - 2 files changed, 29 insertions(+), 1 deletion(-) - -Submodule common be09523d6..1174b443a: -diff --git a/common/options/keys.c b/common/options/keys.c -index 798315c..d27a712 100644 ---- a/common/options/keys.c -+++ b/common/options/keys.c -@@ -128,17 +128,23 @@ read_first_line_from_file (const char *filename) - char ** - get_keys (struct key_store *ks, const char *device, const char *uuid) - { -- size_t i, j, len; -+ size_t i, j, nmemb; - char **r; - char *s; - - /* We know the returned list must have at least one element and not - * more than ks->nr_keys. - */ -- len = 1; -- if (ks) -- len = MIN (1, ks->nr_keys); -- r = calloc (len+1, sizeof (char *)); -+ nmemb = 1; -+ if (ks && ks->nr_keys > nmemb) -+ nmemb = ks->nr_keys; -+ -+ /* make room for the terminating NULL */ -+ if (nmemb == (size_t)-1) -+ error (EXIT_FAILURE, 0, _("size_t overflow")); -+ nmemb++; -+ -+ r = calloc (nmemb, sizeof (char *)); - if (r == NULL) - error (EXIT_FAILURE, errno, "calloc"); - -diff --git a/docs/guestfs-security.pod b/docs/guestfs-security.pod -index 9ceef5623..efa35b29d 100644 ---- a/docs/guestfs-security.pod -+++ b/docs/guestfs-security.pod -@@ -406,6 +406,34 @@ The libvirt backend is not affected. - The solution is to update qemu to a version containing the fix (see - L). - -+=head2 CVE-2022-2211 -+ -+L -+ -+The C function in F collects -+those I<--key> options from the command line into a new array that match -+a particular block device that's being decrypted for inspection. The -+function intends to size the result array such that potentially all -+I<--key> options, plus a terminating C element, fit into it. The -+code mistakenly uses the C macro instead of C, and therefore -+only one element is allocated before the C terminator. -+ -+Passing precisely two I<--key ID:...> options on the command line for -+the encrypted block device C causes C to overwrite the -+terminating C, leading to an out-of-bounds read in -+C, file F. -+ -+Passing more than two I<--key ID:...> options on the command line for -+the encrypted block device C causes C itself to perform -+out-of-bounds writes. The most common symptom is a crash with C -+later on. -+ -+This issue affects -- broadly speaking -- all libguestfs-based utilities -+that accept I<--key>, namely: C, C, C, -+C, C, C, C, -+C, C, C, C, -+C, C, C. -+ - =head1 SEE ALSO - - L, --- -2.31.1 - diff --git a/SOURCES/libguestfs-1.44.0.tar.gz.sig b/SOURCES/libguestfs-1.44.0.tar.gz.sig deleted file mode 100644 index 131c279..0000000 --- a/SOURCES/libguestfs-1.44.0.tar.gz.sig +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAl/1jrcRHHJpY2hAYW5u -ZXhpYS5vcmcACgkQkXOPc+G3aKCBcQ/+JwE8JTm3PdTPGoKxCqSgAOirbqE4ZvMY -p/3y5mexagcWXx6X2Y+u6dlybS06jFR8TkbjdE3VAhhJo0C8l1vfvUTWKVDZoBhG -3jZ6e+exff3VEUY4nFIVvYPNP+/J1BCiexMO0/2f1MDKwnJ73je9GlzwPEpdqPj/ -jSxaAy1G/rA5qV5rWQd4n5S9m8zRnf1lnM7YI7I0PunC2Wt/U6BZidL/FVVWVBxV -DGKTIy7GgWnfGWdqJ+Wi9o9QCJH/9FGTP35xonyQEM/7GI+jLz+a9g2xgvv584Ni -FF0Gqywrp5QFd13Nj3MPM7MXjGjUY5vB964k3mgE4fH91CnVvisRWfUCCo+c/9wG -odS0YTrveWJpm0oYU2tL3AjahRclskAxXEIxx9kbnWMUTrpXG0r8G4+vE+estCjb -mbyK5FQh2KASqNgmeopjK9DAEwD7SfPyHmPQ07Q76Pgl8X+FfBX2uyXBjaR5IJJJ -qVVamdVtPilqwWqQ8hGkKE0qVKqZHGCOJ8+AkQjHjUtSVegT6zHmCG/bM4im1dGV -r9fv6oQ7kWViz8mBluoETWr5sd2AfLOdLS8A42JaOnU7ASJUX/9eN0Y9u4BYC9P3 -l+QXikyq6T/4iC+tADOYGBr9uNitksLwSSUYScpnN+4AY+M+qjXTBq38MEHmwcgK -5mwscgQefcY= -=UrAA ------END PGP SIGNATURE----- diff --git a/SOURCES/copy-patches.sh b/copy-patches.sh similarity index 92% rename from SOURCES/copy-patches.sh rename to copy-patches.sh index de6628e..4d67ee7 100755 --- a/SOURCES/copy-patches.sh +++ b/copy-patches.sh @@ -3,10 +3,11 @@ set -e # Maintainer script to copy patches from the git repo to the current -# directory. Use it like this: +# directory. It's normally only used downstream (ie. in RHEL). Use +# it like this: # ./copy-patches.sh -rhel_version=8.7.0 +rhel_version=10.0 # Check we're in the right directory. if [ ! -f libguestfs.spec ]; then diff --git a/SOURCES/guestfish.sh b/guestfish.sh similarity index 100% rename from SOURCES/guestfish.sh rename to guestfish.sh diff --git a/libguestfs-1.52.2.tar.gz.sig b/libguestfs-1.52.2.tar.gz.sig new file mode 100644 index 0000000..da77df3 --- /dev/null +++ b/libguestfs-1.52.2.tar.gz.sig @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- + +iQJFBAABCAAvFiEE93dPsa0HSn6Mh2fqkXOPc+G3aKAFAmaMBYQRHHJpY2hAYW5u +ZXhpYS5vcmcACgkQkXOPc+G3aKCgAA//Y3vipD+s/fdnFSNPkCxE7lPkBW+HPHKM +ESFfm4hMaR1m9IgNftcFfdQuiApLOsiKN5eGOqyINsrZCWPDkz7mww911GO4V7Oz +mbC2bqvpfLu7OhpxZew+ZrX0NY/hyGngGfSdlc8R0iF4uB76I+ghxllxEfGG1brG +mbvbzFbVIsTj7REPWe5HudQHXgqQFtiSxWmB65/uEQo85W/Wbc7BsPZPps99Uyxm +Mjt6QsiMxHipA2IZWXVCC9UgOewj7dcnXpmgxmWZxRn8e1C/mPNTYZo7z9AeB1YT +W6VX0RRg9TFppi4fCclsWaHyWtaFeasooPzpV9dXn6rezB8K5IzJXeV1Ial154mn +w2ofL1qkhtl8wMabBTC7zP+zb1pNu8iajrKgCmY10/Bgia/wRArIK5qS7dIxGDT9 +jJ5gfP9h5zi01tnNIKbZaoRKSrU+r2+efxvad+8uvQt4JFn1OAL+EVjzePi47aOx +h06kt2uktjtWsKBnLmY91FOwSDPL0aDd8zKp6Ddm84TIQ4tXy4caQ9vQCON7cuNy +5NhvHHs3VNAFOVUW5/e/E9RdmYMnSJaYRpdvpKOuHNcWzPmYR32BMI4LjtYABtkz +Cn0WKnCASUa2W3CzD7V5bHtdT4fnQNbZvcgPGouB/+SlIpABqyfyIQnUta8Tsn2u +msgD9HFR9kk= +=yVGZ +-----END PGP SIGNATURE----- diff --git a/SPECS/libguestfs.spec b/libguestfs.spec similarity index 52% rename from SPECS/libguestfs.spec rename to libguestfs.spec index 80413eb..a37d235 100644 --- a/SPECS/libguestfs.spec +++ b/libguestfs.spec @@ -1,4 +1,11 @@ -%global _hardened_build 1 +# OCaml packages not built on i686 since OCaml 5 / Fedora 39. +ExcludeArch: %{ix86} + +# Architectures on which golang works. +#% global golang_arches aarch64 % {arm} % {ix86} x86_64 +# In theory the above, in practice golang is so often broken that +# I now disable it: +%global golang_arches NONE # Architectures that we run the basic sanity-check test. # @@ -6,11 +13,14 @@ # we only do a sanity check that kernel/qemu/libvirt/appliance is not # broken. To perform the full test suite, see instructions here: # https://www.redhat.com/archives/libguestfs/2015-September/msg00078.html -# -# Currently the basic sanity check is *broken* on: -# -# (none) +%if !0%{?rhel} %global test_arches aarch64 %{power64} s390x x86_64 +%else +# RHEL 9 only: +# x86-64: "/lib64/libc.so.6: CPU ISA level is lower than required" +# (RHBZ#1919389) +%global test_arches NONE +%endif # Trim older changelog entries. # https://lists.fedoraproject.org/pipermail/devel/2013-April/thread.html#181627 @@ -19,23 +29,28 @@ # Verify tarball signature with GPGv2. %global verify_tarball_signature 1 -# If there are patches which touch autotools files, set this to 1. -%global patches_touch_autotools 1 - # The source directory. -%global source_directory 1.44-stable +%global source_directory 1.52-stable # Filter perl provides. %{?perl_default_filter} +# Unbreak the linker. +%undefine _strict_symbol_defs_build + Summary: Access and modify virtual machine disk images Name: libguestfs Epoch: 1 -Version: 1.44.0 -Release: 9%{?dist} -License: LGPLv2+ +Version: 1.52.2 +Release: 4%{?dist} +License: LGPL-2.1-or-later -ExclusiveArch: x86_64 %{power64} aarch64 s390x +# Build only for architectures that have a kernel +ExclusiveArch: %{kernel_arches} +%if 0%{?rhel} +# No qemu-kvm on POWER (RHBZ#1946532). +ExcludeArch: %{power64} +%endif # Source and patches. URL: http://libguestfs.org/ @@ -44,36 +59,6 @@ Source0: http://libguestfs.org/download/%{source_directory}/%{name}-%{vers Source1: http://libguestfs.org/download/%{source_directory}/%{name}-%{version}.tar.gz.sig %endif -# RHEL 8 git repository is: -# https://github.com/libguestfs/libguestfs/tree/rhel-8.7.0 -# Use 'copy-patches.sh' to copy the patches from the git repo -# to the current directory. - -# Patches. -Patch0001: 0001-RHEL-8-Remove-libguestfs-live-RHBZ-798980.patch -Patch0002: 0002-RHEL-8-Remove-9p-APIs-from-RHEL-RHBZ-921710.patch -Patch0003: 0003-RHEL-8-Disable-unsupported-remote-drive-protocols-RH.patch -Patch0004: 0004-RHEL-8-Remove-User-Mode-Linux-RHBZ-1144197.patch -Patch0005: 0005-RHEL-8-Reject-use-of-libguestfs-winsupport-features-.patch -Patch0006: 0006-build-Avoid-warnings-about-unknown-pragmas.patch -Patch0007: 0007-daemon-lvm-Use-lvcreate-yes-to-avoid-interactive-pro.patch -Patch0008: 0008-inspection-More-reliable-detection-of-Linux-split-us.patch -Patch0009: 0009-lib-Autodetect-backing-format-for-qemu-img-create-b.patch -Patch0010: 0010-daemon-chroot-Fix-long-standing-possible-deadlock.patch -Patch0011: 0011-inspection-Fix-inspection-of-recent-RPM-guests-using.patch -Patch0012: 0012-inspection-Return-RPM-epoch.patch -Patch0013: 0013-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch -Patch0014: 0014-po-POTFILES-Fix-list-of-files-for-translation.patch -Patch0015: 0015-m4-guestfs-find-db-tool.m4-Remove-unused-file.patch -Patch0016: 0016-test-data-phony-guests-Fix-phony-RPM-database-fix-vi.patch -Patch0017: 0017-launch-libvirt-place-our-virtio-net-pci-device-in-sl.patch -Patch0018: 0018-lib-extract-NETWORK_ADDRESS-and-NETWORK_PREFIX-as-ma.patch -Patch0019: 0019-launch-libvirt-add-virtio-net-via-the-standard-inter.patch -Patch0020: 0020-appliance-Use-cpu-max.patch -Patch0021: 0021-appliance-Use-cpu-mode-maximum-for-cpu-max-on-libvir.patch -Patch0022: 0022-lib-Disable-5-level-page-tables-when-using-cpu-max.patch -Patch0023: 0023-docs-guestfs-security-document-CVE-2022-2211.patch - # Replacement README file. Source4: README-replacement.in @@ -91,81 +76,94 @@ Source7: libguestfs.keyring # Maintainer script which helps with handling patches. Source8: copy-patches.sh -%if 0%{patches_touch_autotools} +# Patches are maintained in the following repository: +# https://github.com/libguestfs/libguestfs/commits/rhel-10.0 + +# Patches. +Patch0001: 0001-daemon-Reimplement-partition-GPT-functions-using-sfd.patch +Patch0002: 0002-daemon-Fix-parsing-in-part_get_gpt_attributes.patch +Patch0003: 0003-RHEL-Disable-unsupported-remote-drive-protocols-RHBZ.patch +Patch0004: 0004-RHEL-Reject-use-of-libguestfs-winsupport-features-ex.patch +Patch0005: 0005-New-APIs-findfs_partuuid-and-findfs_partlabel.patch +Patch0006: 0006-inspection-Resolve-PARTUUID-and-PARTLABEL-in-etc-fst.patch +Patch0007: 0007-appliance-init-Don-t-set-impossible-noop-disk-schedu.patch + BuildRequires: autoconf, automake, libtool, gettext-devel -%endif -# Used to apply the patches. -BuildRequires: git - -# Basic build requirements for the library and virt tools. +# Basic build requirements. BuildRequires: gcc, gcc-c++ BuildRequires: make BuildRequires: rpcgen BuildRequires: libtirpc-devel BuildRequires: supermin-devel >= 5.1.18 -BuildRequires: hivex-devel >= 1.3.10-5.8.el7 +BuildRequires: hivex-devel >= 1.3.10 BuildRequires: ocaml-hivex-devel BuildRequires: perl(Pod::Simple) BuildRequires: perl(Pod::Man) BuildRequires: /usr/bin/pod2text BuildRequires: po4a BuildRequires: augeas-devel >= 1.7.0 +BuildRequires: ocaml-augeas-devel >= 0.6 BuildRequires: readline-devel -BuildRequires: genisoimage +BuildRequires: xorriso BuildRequires: libxml2-devel BuildRequires: createrepo_c BuildRequires: glibc-static BuildRequires: libselinux-utils BuildRequires: libselinux-devel BuildRequires: fuse, fuse-devel -BuildRequires: pcre-devel +BuildRequires: pcre2-devel BuildRequires: file-devel BuildRequires: libvirt-devel BuildRequires: gperf BuildRequires: flex BuildRequires: bison -BuildRequires: libdb-utils +BuildRequires: rpm-devel BuildRequires: cpio BuildRequires: libconfig-devel BuildRequires: xz-devel +%if !0%{?rhel} +BuildRequires: zip +BuildRequires: unzip +%endif BuildRequires: systemd-units BuildRequires: netpbm-progs BuildRequires: icoutils -# RHBZ#1710713 (RHBZ#1661940) -# libvirt must support -cpu max -BuildRequires: libvirt-daemon-kvm >= 8.0.0 +BuildRequires: libvirt-daemon-kvm >= 7.1.0 +%if !0%{?rhel} +BuildRequires: perl(Expect) +%endif BuildRequires: libacl-devel BuildRequires: libcap-devel -# https://bugzilla.redhat.com/show_bug.cgi?id=1836094 -BuildRequires: rpm-devel >= 4.14.3-18.el8 +%if !0%{?rhel} +BuildRequires: libldm-devel +%endif BuildRequires: jansson-devel BuildRequires: systemd-devel BuildRequires: bash-completion BuildRequires: /usr/bin/ping -BuildRequires: /usr/bin/wget BuildRequires: curl BuildRequires: xz +BuildRequires: zstd +BuildRequires: libzstd-devel BuildRequires: /usr/bin/qemu-img -BuildRequires: perl(Win::Hivex) -BuildRequires: perl(Win::Hivex::Regedit) + %if 0%{verify_tarball_signature} BuildRequires: gnupg2 %endif # For language bindings. -# Build using OCaml with fix for CVE-2015-8869. -BuildRequires: ocaml >= 4.01.0-22.7.el7 +BuildRequires: ocaml BuildRequires: ocaml-ocamldoc -# Make sure to get the performance fix for findlib. -BuildRequires: ocaml-findlib-devel >= 1.3.3-7.el7 -BuildRequires: ocaml-gettext-devel +BuildRequires: ocaml-findlib-devel +%if !0%{?rhel} +BuildRequires: ocaml-ounit-devel BuildRequires: lua BuildRequires: lua-devel +%endif BuildRequires: perl-devel BuildRequires: perl-generators BuildRequires: perl-macros -BuildRequires: perl(Sys::Virt) BuildRequires: perl(Test::More) BuildRequires: perl(Test::Pod) >= 1.00 BuildRequires: perl(Test::Pod::Coverage) >= 1.00 @@ -174,24 +172,29 @@ BuildRequires: perl(ExtUtils::CBuilder) BuildRequires: perl(Locale::TextDomain) BuildRequires: python3-devel BuildRequires: python3-libvirt +%if !0%{?rhel} BuildRequires: ruby-devel BuildRequires: rubygem-rake +# json is not pulled in automatically, see RHBZ#1325022 +BuildRequires: rubygem(json) BuildRequires: rubygem(rdoc) BuildRequires: rubygem(test-unit) BuildRequires: ruby-irb -BuildRequires: java-1.8.0-openjdk -BuildRequires: java-1.8.0-openjdk-devel -BuildRequires: jpackage-utils -BuildRequires: glib2-devel +BuildRequires: php-devel BuildRequires: gobject-introspection-devel BuildRequires: gjs +BuildRequires: vala +%endif +%ifarch %{golang_arches} +BuildRequires: golang +%endif # Build requirements for the appliance. # # Get the initial list by doing: # for f in `cat appliance/packagelist`; do echo $f; done | sort -u # However you have to edit the list down to packages which exist in -# current RHEL, since supermin ignores non-existent packages. +# current Fedora, since supermin ignores non-existent packages. BuildRequires: acl BuildRequires: attr @@ -202,23 +205,21 @@ BuildRequires: binutils BuildRequires: btrfs-progs %endif BuildRequires: bzip2 +BuildRequires: clevis-luks BuildRequires: coreutils BuildRequires: cpio BuildRequires: cryptsetup -BuildRequires: curl -%if !0%{?rhel} -BuildRequires: debootstrap -%endif -BuildRequires: dhclient +BuildRequires: dhcpcd BuildRequires: diffutils BuildRequires: dosfstools BuildRequires: e2fsprogs BuildRequires: file BuildRequires: findutils BuildRequires: gawk +%if !0%{?rhel} BuildRequires: gdisk -BuildRequires: genisoimage BuildRequires: gfs2-utils +%endif BuildRequires: grep BuildRequires: gzip %if !0%{?rhel} @@ -226,15 +227,11 @@ BuildRequires: gzip BuildRequires: hfsplus-tools %endif %endif -BuildRequires: hivex +BuildRequires: hivex-libs BuildRequires: iproute BuildRequires: iputils -%if !0%{?rhel} -BuildRequires: jfsutils -%endif -BuildRequires: (kernel without kernel-debug-core) +BuildRequires: kernel BuildRequires: kmod -BuildRequires: kpartx BuildRequires: less BuildRequires: libcap %if !0%{?rhel} @@ -248,22 +245,16 @@ BuildRequires: lvm2 BuildRequires: lzop BuildRequires: mdadm %if !0%{?rhel} -BuildRequires: nilfs-utils -%endif -%if !0%{?rhel} BuildRequires: ntfs-3g ntfsprogs ntfs-3g-system-compression %endif BuildRequires: openssh-clients BuildRequires: parted BuildRequires: pciutils -BuildRequires: pcre +BuildRequires: pcre2 BuildRequires: policycoreutils BuildRequires: procps BuildRequires: psmisc -BuildRequires: qemu-img -%if !0%{?rhel} -BuildRequires: reiserfs-utils -%endif +BuildRequires: rpm-libs BuildRequires: rsync BuildRequires: scrub BuildRequires: sed @@ -272,18 +263,18 @@ BuildRequires: sleuthkit %endif BuildRequires: squashfs-tools BuildRequires: strace +%if !0%{?rhel} %ifarch %{ix86} x86_64 BuildRequires: syslinux syslinux-extlinux %endif +%endif BuildRequires: systemd BuildRequires: tar BuildRequires: udev BuildRequires: util-linux BuildRequires: vim-minimal -BuildRequires: which BuildRequires: xfsprogs BuildRequires: xz -BuildRequires: yajl %if !0%{?rhel} BuildRequires: zerofree %endif @@ -293,6 +284,7 @@ BuildRequires: zerofree BuildRequires: zfs-fuse %endif %endif +BuildRequires: zstd # Main package requires the appliance. This allows the appliance to # be replaced if there exists a package called @@ -302,91 +294,94 @@ BuildRequires: zfs-fuse # to replace it with (eg) a fixed appliance. Requires: (%{name}-appliance = %{epoch}:%{version}-%{release} or %{name}-noappliance) -# libguestfs-benchmarking was accidentally present in RHEL AV 8.5 and -# removed in RHEL 8.6+. Add an Obsoletes to smooth the upgrade path -# for anyone who had this package installed. -# https://bugzilla.redhat.com/show_bug.cgi?id=2091597 -Obsoletes: %{name}-benchmarking < %{epoch}:%{version}-%{release} - # The daemon dependencies are not included automatically, because it # is buried inside the appliance, so list them here. -Requires: augeas-libs%{?_isa} +Requires: augeas-libs%{?_isa} >= 1.7.0 +Requires: jansson%{?_isa} Requires: libacl%{?_isa} Requires: libcap%{?_isa} -Requires: hivex%{?_isa} >= 1.3.10-5.8.el7 -Requires: pcre%{?_isa} -# https://bugzilla.redhat.com/show_bug.cgi?id=1836094 -Requires: rpm-libs%{?_isa} >= 4.14.3-18.el8 Requires: libselinux%{?_isa} +Requires: hivex-libs%{?_isa} >= 1.3.10 +Requires: pcre2%{?_isa} +Requires: rpm-libs%{?_isa} >= 4.16.1.3 Requires: systemd-libs%{?_isa} -Requires: yajl%{?_isa} - -# RHBZ#1211321 -Requires: kernel - -# Older lvmetad "forgets" VGs if you change their UUID. libguestfs -# since 1.34 enables lvmetad. So we must ensure we have new enough -# LVM: -Requires: lvm2 >= 7:2.02.166-1.el7 - -# For core inspection API. -Requires: libdb-utils # For core mount-local (FUSE) API. Requires: fuse -# For core disk-create API. +# For core APIs: Requires: /usr/bin/qemu-img +Requires: coreutils +Requires: grep +Requires: tar + +# libguestfs-make-fixed-appliance requires xz. +Requires: xz + +# For qemu direct and libvirt backends. +Requires: qemu-kvm-core +%if !0%{?rhel} +Suggests: qemu-block-curl +Suggests: qemu-block-gluster +Suggests: qemu-block-iscsi +%endif +Suggests: qemu-block-rbd +%if !0%{?rhel} +Suggests: qemu-block-ssh +%endif +Recommends: libvirt-daemon-config-network +Requires: libvirt-daemon-driver-qemu >= 7.1.0 +Requires: libvirt-daemon-driver-secret +Requires: libvirt-daemon-driver-storage-core +Recommends: passt +Requires: (selinux-policy >= 3.11.1-63 if selinux-policy) -# For libvirt backend. -# RHBZ#1500870, RHBZ#1501239, RHBZ#1508299 -# libvirt must support -cpu max -Requires: libvirt-daemon-kvm >= 8.0.0 %ifarch aarch64 Requires: edk2-aarch64 %endif -# https://fedoraproject.org/wiki/Packaging:No_Bundled_Libraries#Packages_granted_exceptions -Provides: bundled(gnulib) +# For guestfish. +#Requires: /usr/bin/emacs #theoretically, but too large +Requires: /usr/bin/hexedit +Requires: /usr/bin/less +Requires: /usr/bin/man +Requires: /usr/bin/vi -# Conflicts with libguestfs-winsupport from RHEL 7.0. You need to -# use the RHEL 7.2+ package. +%if !0%{?rhel} +# Someone managed to install libguestfs-winsupport (from RHEL!) on +# Fedora, which breaks everything. Thus: +Conflicts: libguestfs-winsupport +%else Conflicts: libguestfs-winsupport < 7.2 +%endif %description Libguestfs is a library for accessing and modifying virtual machine disk images. http://libguestfs.org -It can be used to make batch configuration changes to guests, get -disk used/free statistics (virt-df), migrate between hypervisors -(virt-p2v, virt-v2v), perform backups and guest clones, change -registry/UUID/hostname info, build guests from scratch (virt-builder) -and much more. - Libguestfs uses Linux kernel and qemu code, and can access any type of guest filesystem that Linux and qemu can, including but not limited -to: ext2/3/4, FAT and NTFS, LVM, many different disk partition +to: ext2/3/4, btrfs, FAT and NTFS, LVM, many different disk partition schemes, qcow, qcow2, vmdk. -Libguestfs for Red Hat Enterprise Linux is split into several subpackages. -The basic subpackages are: - - libguestfs C library - libguestfs-tools virt-* tools, guestfish and guestmount (FUSE) - libguestfs-tools-c only the subset of virt tools written in C - (for reduced dependencies) - virt-v2v convert virtual machines to run on KVM (V2V) - virt-p2v-maker convert physical machines to run on KVM (P2V) - virt-dib safe and secure diskimage-builder replacement - For enhanced features, install: +%if !0%{?rhel} + libguestfs-forensics adds filesystem forensics support libguestfs-gfs2 adds Global Filesystem (GFS2) support + libguestfs-hfsplus adds HFS+ (Mac filesystem) support +%endif libguestfs-inspect-icons adds support for inspecting guest icons libguestfs-rescue enhances virt-rescue shell with more tools libguestfs-rsync rsync to/from guest filesystems +%if !0%{?rhel} + libguestfs-ufs adds UFS (BSD) support +%endif libguestfs-xfs adds XFS support +%if !0%{?rhel} + libguestfs-zfs adds ZFS support +%endif For developers: @@ -394,17 +389,30 @@ For developers: Language bindings: - libguestfs-gobject-devel GObject bindings and GObject Introspection - libguestfs-java-devel Java bindings +%if !0%{?rhel} +libguestfs-gobject-devel GObject bindings and GObject Introspection +%endif +%ifarch %{golang_arches} + golang-guestfs Go language bindings +%endif +%if !0%{?rhel} lua-guestfs Lua bindings +%endif ocaml-libguestfs-devel OCaml bindings perl-Sys-Guestfs Perl bindings +%if !0%{?rhel} + php-libguestfs PHP bindings +%endif python3-libguestfs Python 3 bindings +%if !0%{?rhel} ruby-libguestfs Ruby bindings + libguestfs-vala Vala language bindings +%endif %package appliance Summary: Appliance for %{name} +License: GPL-2.0-or-later AND LGPL-2.1-or-later Requires: supermin >= 5.1.18 @@ -417,39 +425,64 @@ Summary: Development tools and libraries for %{name} Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} Requires: pkgconfig -# For libguestfs-make-fixed-appliance. -Requires: xz -Requires: %{name}-tools-c = %{epoch}:%{version}-%{release} - %description devel %{name}-devel contains development tools and libraries for %{name}. +%if !0%{?rhel} +%package forensics +Summary: Filesystem forensics support for %{name} +License: GPL-2.0-or-later +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} + +%description forensics +This adds filesystem forensics support to %{name}. Install it if you +want to forensically analyze disk images using The Sleuth Kit. +%endif + + +%if !0%{?rhel} %package gfs2 Summary: GFS2 support for %{name} -License: LGPLv2+ +License: GPL-2.0-or-later Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} %description gfs2 This adds GFS2 support to %{name}. Install it if you want to process disk images containing GFS2. +%endif + + +%if !0%{?rhel} +%ifnarch ppc +%package hfsplus +Summary: HFS+ support for %{name} +License: GPL-2.0-or-later +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} + +%description hfsplus +This adds HFS+ support to %{name}. Install it if you want to process +disk images containing HFS+ / Mac OS Extended filesystems. +%endif +%endif %package rescue -Summary: Additional tools for virt-rescue -License: LGPLv2+ -Requires: %{name}-tools-c = %{epoch}:%{version}-%{release} +Summary: virt-rescue shell +License: GPL-2.0-or-later +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} %description rescue -This adds additional tools to use inside the virt-rescue shell, -such as ssh, network utilities, editors and debugging utilities. +This adds the virt-rescue shell which is a "rescue disk" for virtual +machines, and additional tools to use inside the shell such as ssh, +network utilities, editors and debugging utilities. %package rsync Summary: rsync support for %{name} -License: LGPLv2+ +License: GPL-2.0-or-later Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} %description rsync @@ -457,9 +490,21 @@ This adds rsync support to %{name}. Install it if you want to use rsync to upload or download files into disk images. +%if !0%{?rhel} +%package ufs +Summary: UFS (BSD) support for %{name} +License: GPL-2.0-or-later +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} + +%description ufs +This adds UFS support to %{name}. Install it if you want to process +disk images containing UFS (BSD filesystems). +%endif + + %package xfs Summary: XFS support for %{name} -License: LGPLv2+ +License: GPL-2.0-or-later Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} %description xfs @@ -467,9 +512,23 @@ This adds XFS support to %{name}. Install it if you want to process disk images containing XFS. +%if !0%{?rhel} +%ifnarch %{arm} aarch64 s390 s390x riscv64 +%package zfs +Summary: ZFS support for %{name} +License: GPL-2.0-or-later +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} + +%description zfs +This adds ZFS support to %{name}. Install it if you want to process +disk images containing ZFS. +%endif +%endif + + %package inspect-icons Summary: Additional dependencies for inspecting guest icons -License: LGPLv2+ +License: LGPL-2.1-or-later BuildArch: noarch Requires: %{name} = %{epoch}:%{version}-%{release} @@ -487,149 +546,11 @@ The only reason this is a separate package is to avoid core libguestfs having to depend on Perl. See https://bugzilla.redhat.com/1194158 -%package tools-c -Summary: System administration tools for virtual machines -License: GPLv2+ -Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} - -# For guestfish: -#Requires: /usr/bin/emacs #theoretically, but too large -Requires: /usr/bin/hexedit -Requires: /usr/bin/less -Requires: /usr/bin/man -Requires: /usr/bin/vi - -# For virt-builder: -Requires: gnupg2 -Requires: xz -#Requires: nbdkit, nbdkit-plugin-xz -Requires: curl - -# For virt-builder-repository: -Suggests: osinfo-db - -# Some Fedora, and all RHEL 7, use XFS: -Recommends: libguestfs-xfs - -# For virt-edit and virt-customize: -Suggests: perl - - -%description tools-c -This package contains miscellaneous system administrator command line -tools for virtual machines. - -Note that you should install %{name}-tools (which pulls in -this package). This package is only used directly when you want -to avoid dependencies on Perl. - - -%package tools -Summary: System administration tools for virtual machines -License: GPLv2+ -BuildArch: noarch -Requires: %{name} = %{epoch}:%{version}-%{release} -Requires: %{name}-tools-c = %{epoch}:%{version}-%{release} - - -%description tools -This package contains miscellaneous system administrator command line -tools for virtual machines. - -Guestfish is the Filesystem Interactive SHell, for accessing and -modifying virtual machine disk images from the command line and shell -scripts. - -The guestmount command lets you mount guest filesystems on the host -using FUSE and %{name}. - -Virt-alignment-scan scans virtual machines looking for partition -alignment problems. - -Virt-builder is a command line tool for rapidly making disk images -of popular free operating systems. - -Virt-cat is a command line tool to display the contents of a file in a -virtual machine. - -Virt-copy-in and virt-copy-out are command line tools for uploading -and downloading files and directories to and from virtual machines. - -Virt-customize is a command line tool for customizing virtual machine -disk images. - -Virt-df is a command line tool to display free space on virtual -machine filesystems. Unlike other tools, it doesn’t just display the -amount of space allocated to a virtual machine, but can look inside -the virtual machine to see how much space is really being used. It is -like the df(1) command, but for virtual machines, except that it also -works for Windows virtual machines. - -Virt-diff shows the differences between virtual machines. - -Virt-edit is a command line tool to edit the contents of a file in a -virtual machine. - -Virt-filesystems is a command line tool to display the filesystems, -partitions, block devices, LVs, VGs and PVs found in a disk image -or virtual machine. It replaces the deprecated programs -virt-list-filesystems and virt-list-partitions with a much more -capable tool. - -Virt-format is a command line tool to erase and make blank disks. - -Virt-get-kernel extracts a kernel/initrd from a disk image. - -Virt-inspector examines a virtual machine and tries to determine the -version of the OS, the kernel version, what drivers are installed, -whether the virtual machine is fully virtualized (FV) or -para-virtualized (PV), what applications are installed and more. - -Virt-log is a command line tool to display the log files from a -virtual machine. - -Virt-ls is a command line tool to list out files in a virtual machine. - -Virt-make-fs is a command line tool to build a filesystem out of -a collection of files or a tarball. - -Virt-rescue provides a rescue shell for making interactive, -unstructured fixes to virtual machines. - -Virt-resize can resize existing virtual machine disk images. - -Virt-sparsify makes virtual machine disk images sparse (thin-provisioned). - -Virt-sysprep lets you reset or unconfigure virtual machines in -preparation for cloning them. - -Virt-tail follows (tails) a log file within a guest, like 'tail -f'. - -Virt-tar-in and virt-tar-out are archive, backup and upload tools -for virtual machines. These replace the deprecated program virt-tar. - -Virt-win-reg lets you look at and modify the Windows Registry of -Windows virtual machines. - - -%package -n virt-dib -Summary: Safe and secure diskimage-builder replacement -License: GPLv2+ - -Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} - - -%description -n virt-dib -Virt-dib is a safe and secure alternative to the OpenStack -diskimage-builder command. It is compatible with most -diskimage-builder elements. - - %package bash-completion Summary: Bash tab-completion scripts for %{name} tools +License: GPL-2.0-or-later BuildArch: noarch Requires: bash-completion >= 2.0 -Requires: %{name}-tools-c = %{epoch}:%{version}-%{release} %description bash-completion @@ -662,7 +583,6 @@ required to use the OCaml bindings for %{name}. %package -n perl-Sys-Guestfs Summary: Perl bindings for %{name} (Sys::Guestfs) Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} -Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) %description -n perl-Sys-Guestfs @@ -679,6 +599,7 @@ Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} python3-%{name} contains Python 3 bindings for %{name}. +%if !0%{?rhel} %package -n ruby-%{name} Summary: Ruby bindings for %{name} Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} @@ -690,40 +611,14 @@ Provides: ruby(guestfs) = %{version} ruby-%{name} contains Ruby bindings for %{name}. -%package java -Summary: Java bindings for %{name} +%package -n php-%{name} +Summary: PHP bindings for %{name} Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} -Requires: java-headless >= 1.7.0 -Requires: jpackage-utils +Requires: php(zend-abi) = %{php_zend_api} +Requires: php(api) = %{php_core_api} -%description java -%{name}-java contains Java bindings for %{name}. - -If you want to develop software in Java which uses %{name}, then -you will also need %{name}-java-devel. - - -%package java-devel -Summary: Java development package for %{name} -Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} -Requires: %{name}-java = %{epoch}:%{version}-%{release} - -%description java-devel -%{name}-java-devel contains the tools for developing Java software -using %{name}. - -See also %{name}-javadoc. - - -%package javadoc -Summary: Java documentation for %{name} -BuildArch: noarch -Requires: %{name} = %{epoch}:%{version}-%{release} -Requires: %{name}-java = %{epoch}:%{version}-%{release} -Requires: jpackage-utils - -%description javadoc -%{name}-javadoc contains the Java documentation for %{name}. +%description -n php-%{name} +php-%{name} contains PHP bindings for %{name}. %package -n lua-guestfs @@ -750,9 +645,6 @@ To develop software against these bindings, you need to install Summary: GObject bindings for %{name} Requires: %{name}-gobject = %{epoch}:%{version}-%{release} -Provides: libguestfs-gobject-doc = %{epoch}:%{version}-%{release} -Obsoletes: libguestfs-gobject-doc < %{epoch}:%{version}-%{release} - %description gobject-devel %{name}-gobject contains GObject bindings for %{name}. @@ -760,8 +652,34 @@ This package is needed if you want to write software using the GObject bindings. It also contains GObject Introspection information. +%package vala +Summary: Vala for %{name} +Requires: %{name}-devel%{?_isa} = %{epoch}:%{version}-%{release} +Requires: vala + + +%description vala +%{name}-vala contains GObject bindings for %{name}. +%endif + + + +%ifarch %{golang_arches} +%package -n golang-guestfs +Summary: Golang bindings for %{name} +BuildArch: noarch +Requires: %{name} = %{epoch}:%{version}-%{release} +Requires: golang +Provides: golang(libguestfs.org) = %{epoch}:%{version}-%{release} + +%description -n golang-guestfs +golang-%{name} contains Go language bindings for %{name}. +%endif + + %package man-pages-ja Summary: Japanese (ja) man pages for %{name} +License: GPL-2.0-or-later BuildArch: noarch Requires: %{name} = %{epoch}:%{version}-%{release} @@ -772,6 +690,7 @@ for %{name}. %package man-pages-uk Summary: Ukrainian (uk) man pages for %{name} +License: GPL-2.0-or-later BuildArch: noarch Requires: %{name} = %{epoch}:%{version}-%{release} @@ -782,14 +701,12 @@ for %{name}. %prep %if 0%{verify_tarball_signature} -tmphome="$(mktemp -d)" -gpgv2 --homedir "$tmphome" --keyring %{SOURCE7} %{SOURCE1} %{SOURCE0} +%{gpgverify} --keyring='%{SOURCE7}' --signature='%{SOURCE1}' --data='%{SOURCE0}' %endif -%autosetup -p1 -S git +%setup -q +%autopatch -p1 -%if 0%{patches_touch_autotools} -autoreconf -i -%endif +autoreconf -fiv # For sVirt to work, the local temporary directory we use in the tests # must be labelled the same way as /tmp. This doesn't work if either @@ -810,44 +727,66 @@ sed 's/@VERSION@/%{version}/g' < %{SOURCE4} > README # Test if network is available. ip addr list ||: ip route list ||: -if ping -c 3 -w 20 8.8.8.8 && wget http://libguestfs.org -O /dev/null; then +if ping -c 3 -w 20 8.8.8.8 && curl http://libguestfs.org -o /dev/null; then extra= else mkdir cachedir repo + # For an explanation of what we are doing here, see: + # https://lists.fedorahosted.org/archives/list/koji-devel@lists.fedorahosted.org/thread/ZIBY53JAURLT3QRBBJIJJ7EZWLZDE3TI/ # -n 1 because of RHBZ#980502. - find /var/cache/{dnf,yum} -type f -name '*.rpm' -print0 | \ - xargs -0 -n 1 cp -t repo + dirs= + for d in /var/cache/{dnf,libdnf5,yum} ; do + if test -d $d ; then dirs="$dirs $d" ; fi + done + test -n "$dirs" + find $dirs -type f -name '*.rpm' -print0 | xargs -0 -n 1 cp -t repo createrepo_c repo sed -e "s|@PWD@|$(pwd)|" %{SOURCE6} > yum.conf extra=--with-supermin-packager-config=$(pwd)/yum.conf fi -export QEMU=/usr/libexec/qemu-kvm -export PYTHON=%{__python3} - %{configure} \ +%if 0%{?rhel} + QEMU=%{_libexecdir}/qemu-kvm \ +%endif + PYTHON=%{__python3} \ --with-default-backend=libvirt \ + --enable-appliance-format-auto \ +%if !0%{?rhel} + --with-extra="fedora=%{fedora},release=%{release},libvirt" \ +%else --with-extra="rhel=%{rhel},release=%{release},libvirt" \ +%endif +%if 0%{?rhel} --with-qemu="qemu-kvm qemu-system-%{_build_arch} qemu" \ - --disable-php \ - --disable-haskell \ - --disable-erlang \ +%endif +%ifnarch %{golang_arches} --disable-golang \ +%endif + --without-java \ + --disable-erlang \ +%if 0%{?rhel} + --disable-gobject \ + --disable-lua \ + --disable-php \ + --disable-ruby \ +%endif $extra -# Building index-parse.c by hand works around a race condition in the -# autotools cruft, where two or more copies of yacc race with each -# other, resulting in a corrupted file. -# # 'INSTALLDIRS' ensures that Perl and Ruby libs are installed in the # vendor dir not the site dir. -make -j1 -C builder index-parse.c -make V=1 INSTALLDIRS=vendor %{?_smp_mflags} +%make_build INSTALLDIRS=vendor %check - %ifarch %{test_arches} +# Only run the tests with non-debug (ie. non-Rawhide) kernels. +# XXX This tests for any debug kernel installed. +if grep CONFIG_DEBUG_MUTEXES=y /lib/modules/*/config ; then + echo "Skipping tests because debug kernel is installed" + exit 0 +fi + export LIBGUESTFS_DEBUG=1 export LIBGUESTFS_TRACE=1 export LIBVIRT_DEBUG=1 @@ -860,14 +799,9 @@ fi %install -# This file is creeping over 1 MB uncompressed, and since it is -# included in the -devel subpackage, compress it to reduce -# installation size. -gzip -9 ChangeLog - # 'INSTALLDIRS' ensures that Perl and Ruby libs are installed in the # vendor dir not the site dir. -make DESTDIR=$RPM_BUILD_ROOT INSTALLDIRS=vendor install +%make_install INSTALLDIRS=vendor # Delete static libraries. rm $( find $RPM_BUILD_ROOT -name '*.a' | grep -v /ocaml/ ) @@ -881,44 +815,43 @@ find $RPM_BUILD_ROOT -name .packlist -delete find $RPM_BUILD_ROOT -name '*.bs' -delete find $RPM_BUILD_ROOT -name 'bindtests.pl' -delete -# Remove obsolete binaries (RHBZ#947438). -rm $RPM_BUILD_ROOT%{_bindir}/virt-list-filesystems -rm $RPM_BUILD_ROOT%{_bindir}/virt-list-partitions -rm $RPM_BUILD_ROOT%{_bindir}/virt-tar -rm $RPM_BUILD_ROOT%{_mandir}/man1/virt-list-filesystems.1* -rm $RPM_BUILD_ROOT%{_mandir}/man1/virt-list-partitions.1* -rm $RPM_BUILD_ROOT%{_mandir}/man1/virt-tar.1* - -# Don't use versioned jar file (RHBZ#1022133). -# See: https://bugzilla.redhat.com/show_bug.cgi?id=1022184#c4 -mv $RPM_BUILD_ROOT%{_datadir}/java/%{name}-%{version}.jar \ - $RPM_BUILD_ROOT%{_datadir}/java/%{name}.jar - -# Move installed documentation back to the source directory so -# we can install it using a %%doc rule. -mv $RPM_BUILD_ROOT%{_docdir}/libguestfs installed-docs -gzip --best installed-docs/*.xml +# golang: Ignore what libguestfs upstream installs, and just copy the +# source files to %%{_datadir}/gocode/src. +%ifarch %{golang_arches} +rm -r $RPM_BUILD_ROOT/usr/lib/golang +mkdir -p $RPM_BUILD_ROOT%{_datadir}/gocode/src +cp -a golang/src/libguestfs.org $RPM_BUILD_ROOT%{_datadir}/gocode/src +%endif # Split up the monolithic packages file in the supermin appliance so # we can install dependencies in subpackages. pushd $RPM_BUILD_ROOT%{_libdir}/guestfs/supermin.d +function remove +{ + grep -Ev "^$1$" < packages > packages-t + mv packages-t packages +} + function move_to { if ! grep -Esq "^$1$" packages; then echo "move_to $1: package name not found in packages file" exit 1 fi - grep -Ev "^$1$" < packages > packages-t - mv packages-t packages + remove "$1" echo "$1" >> "$2" } -move_to curl zz-packages-dib -move_to kpartx zz-packages-dib -move_to qemu-img zz-packages-dib -move_to which zz-packages-dib +%if !0%{?rhel} +move_to sleuthkit zz-packages-forensics move_to gfs2-utils zz-packages-gfs2 +move_to hfsplus-tools zz-packages-hfsplus +%else +remove sleuthkit +remove gfs2-utils +remove hfsplus-tools +%endif move_to iputils zz-packages-rescue move_to lsof zz-packages-rescue move_to openssh-clients zz-packages-rescue @@ -927,6 +860,20 @@ move_to strace zz-packages-rescue move_to vim-minimal zz-packages-rescue move_to rsync zz-packages-rsync move_to xfsprogs zz-packages-xfs +%if !0%{?rhel} +%ifnarch %{arm} aarch64 s390 s390x riscv64 +move_to zfs-fuse zz-packages-zfs +%endif +%else +remove zfs-fuse +%endif + +%if !0%{?rhel} +# On Fedora you need kernel-modules-extra to be able to mount +# UFS (BSD) filesystems. +echo "kernel-modules-extra" > zz-packages-ufs +%endif + popd # If there is a bogus dependency on kernel-*, rename it to 'kernel' @@ -936,8 +883,7 @@ popd # On all known architectures, depending on 'kernel' should # mean "we need a kernel". pushd $RPM_BUILD_ROOT%{_libdir}/guestfs/supermin.d -sed 's/^kernel-.*/kernel/' < packages > packages-t -mv packages-t packages +sed -i 's/^kernel-.*/kernel/' packages popd # Guestfish colour prompts. @@ -952,26 +898,37 @@ rm ocaml/html/.gitignore %find_lang %{name} -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig - -%post java -p /sbin/ldconfig - -%postun java -p /sbin/ldconfig - - %files -f %{name}.lang -%doc COPYING README +%license COPYING COPYING.LIB +%doc README +%{_bindir}/guestfish +%{_bindir}/guestmount +%{_bindir}/guestunmount %{_bindir}/libguestfs-test-tool +%{_bindir}/virt-copy-in +%{_bindir}/virt-copy-out +%{_bindir}/virt-tar-in +%{_bindir}/virt-tar-out +%{_sbindir}/libguestfs-make-fixed-appliance %{_libdir}/libguestfs.so.* +%{_mandir}/man1/guestfish.1* %{_mandir}/man1/guestfs-faq.1* %{_mandir}/man1/guestfs-performance.1* %{_mandir}/man1/guestfs-recipes.1* %{_mandir}/man1/guestfs-release-notes-1*.1* -%{_mandir}/man1/guestfs-release-notes-historical.1* +%{_mandir}/man1/guestfs-release-notes.1* %{_mandir}/man1/guestfs-security.1* +%{_mandir}/man1/guestmount.1* +%{_mandir}/man1/guestunmount.1* +%{_mandir}/man1/libguestfs-make-fixed-appliance.1* %{_mandir}/man1/libguestfs-test-tool.1* +%{_mandir}/man1/virt-copy-in.1* +%{_mandir}/man1/virt-copy-out.1* +%{_mandir}/man1/virt-tar-in.1* +%{_mandir}/man1/virt-tar-out.1* +%{_mandir}/man5/libguestfs-tools.conf.5* +%config %{_sysconfdir}/profile.d/guestfish.sh +%config(noreplace) %{_sysconfdir}/libguestfs-tools.conf %files appliance @@ -980,133 +937,85 @@ rm ocaml/html/.gitignore %files devel -%doc AUTHORS BUGS ChangeLog.gz HACKING TODO README +%doc AUTHORS HACKING TODO README %doc examples/*.c -%doc installed-docs/* %{_libdir}/libguestfs.so -%{_sbindir}/libguestfs-make-fixed-appliance %{_mandir}/man1/guestfs-building.1* %{_mandir}/man1/guestfs-hacking.1* %{_mandir}/man1/guestfs-internals.1* %{_mandir}/man1/guestfs-testing.1* -%{_mandir}/man1/libguestfs-make-fixed-appliance.1* %{_mandir}/man3/guestfs.3* %{_mandir}/man3/guestfs-examples.3* %{_mandir}/man3/libguestfs.3* %{_includedir}/guestfs.h %{_libdir}/pkgconfig/libguestfs.pc + +%if !0%{?rhel} +%files forensics +%{_libdir}/guestfs/supermin.d/zz-packages-forensics +%endif + +%if !0%{?rhel} %files gfs2 %{_libdir}/guestfs/supermin.d/zz-packages-gfs2 +%endif + +%if !0%{?rhel} +%ifnarch ppc +%files hfsplus +%{_libdir}/guestfs/supermin.d/zz-packages-hfsplus +%endif +%endif %files rsync %{_libdir}/guestfs/supermin.d/zz-packages-rsync %files rescue %{_libdir}/guestfs/supermin.d/zz-packages-rescue +%{_bindir}/virt-rescue +%{_mandir}/man1/virt-rescue.1* + +%if !0%{?rhel} +%files ufs +%{_libdir}/guestfs/supermin.d/zz-packages-ufs +%endif %files xfs %{_libdir}/guestfs/supermin.d/zz-packages-xfs +%if !0%{?rhel} +%ifnarch %{arm} aarch64 s390 s390x riscv64 +%files zfs +%{_libdir}/guestfs/supermin.d/zz-packages-zfs +%endif +%endif + %files inspect-icons # no files -%files tools-c -%doc README -%config(noreplace) %{_sysconfdir}/libguestfs-tools.conf -%{_sysconfdir}/virt-builder -%dir %{_sysconfdir}/xdg/virt-builder -%dir %{_sysconfdir}/xdg/virt-builder/repos.d -%config %{_sysconfdir}/xdg/virt-builder/repos.d/* -%config %{_sysconfdir}/profile.d/guestfish.sh -%{_mandir}/man5/libguestfs-tools.conf.5* -%{_bindir}/guestfish -%{_mandir}/man1/guestfish.1* -%{_bindir}/guestmount -%{_mandir}/man1/guestmount.1* -%{_bindir}/guestunmount -%{_mandir}/man1/guestunmount.1* -%{_bindir}/virt-alignment-scan -%{_mandir}/man1/virt-alignment-scan.1* -%{_bindir}/virt-builder -%{_mandir}/man1/virt-builder.1* -%{_bindir}/virt-builder-repository -%{_mandir}/man1/virt-builder-repository.1* -%{_bindir}/virt-cat -%{_mandir}/man1/virt-cat.1* -%{_bindir}/virt-copy-in -%{_mandir}/man1/virt-copy-in.1* -%{_bindir}/virt-copy-out -%{_mandir}/man1/virt-copy-out.1* -%{_bindir}/virt-customize -%{_mandir}/man1/virt-customize.1* -%{_bindir}/virt-df -%{_mandir}/man1/virt-df.1* -%{_bindir}/virt-diff -%{_mandir}/man1/virt-diff.1* -%{_bindir}/virt-edit -%{_mandir}/man1/virt-edit.1* -%{_bindir}/virt-filesystems -%{_mandir}/man1/virt-filesystems.1* -%{_bindir}/virt-format -%{_mandir}/man1/virt-format.1* -%{_bindir}/virt-get-kernel -%{_mandir}/man1/virt-get-kernel.1* -%{_bindir}/virt-index-validate -%{_mandir}/man1/virt-index-validate.1* -%{_bindir}/virt-inspector -%{_mandir}/man1/virt-inspector.1* -%{_bindir}/virt-log -%{_mandir}/man1/virt-log.1* -%{_bindir}/virt-ls -%{_mandir}/man1/virt-ls.1* -%{_bindir}/virt-make-fs -%{_mandir}/man1/virt-make-fs.1* -%{_bindir}/virt-rescue -%{_mandir}/man1/virt-rescue.1* -%{_bindir}/virt-resize -%{_mandir}/man1/virt-resize.1* -%{_bindir}/virt-sparsify -%{_mandir}/man1/virt-sparsify.1* -%{_bindir}/virt-sysprep -%{_mandir}/man1/virt-sysprep.1* -%{_bindir}/virt-tail -%{_mandir}/man1/virt-tail.1* -%{_bindir}/virt-tar-in -%{_mandir}/man1/virt-tar-in.1* -%{_bindir}/virt-tar-out -%{_mandir}/man1/virt-tar-out.1* - - -%files tools -%doc README -%{_bindir}/virt-win-reg -%{_mandir}/man1/virt-win-reg.1* - - -%files -n virt-dib -%doc COPYING README -%{_bindir}/virt-dib -%{_mandir}/man1/virt-dib.1* -%{_libdir}/guestfs/supermin.d/zz-packages-dib - - %files bash-completion %dir %{_datadir}/bash-completion/completions %{_datadir}/bash-completion/completions/guestfish %{_datadir}/bash-completion/completions/guestmount %{_datadir}/bash-completion/completions/guestunmount %{_datadir}/bash-completion/completions/libguestfs-test-tool -%{_datadir}/bash-completion/completions/virt-* +%{_datadir}/bash-completion/completions/virt-copy-in +%{_datadir}/bash-completion/completions/virt-copy-out +%{_datadir}/bash-completion/completions/virt-rescue +%{_datadir}/bash-completion/completions/virt-tar-in +%{_datadir}/bash-completion/completions/virt-tar-out %files -n ocaml-%{name} %{_libdir}/ocaml/guestfs %exclude %{_libdir}/ocaml/guestfs/*.a +%ifarch %{ocaml_native_compiler} %exclude %{_libdir}/ocaml/guestfs/*.cmxa %exclude %{_libdir}/ocaml/guestfs/*.cmx +%endif %exclude %{_libdir}/ocaml/guestfs/*.mli %{_libdir}/ocaml/stublibs/dllmlguestfs.so %{_libdir}/ocaml/stublibs/dllmlguestfs.so.owner @@ -1115,8 +1024,10 @@ rm ocaml/html/.gitignore %files -n ocaml-%{name}-devel %doc ocaml/examples/*.ml ocaml/html %{_libdir}/ocaml/guestfs/*.a +%ifarch %{ocaml_native_compiler} %{_libdir}/ocaml/guestfs/*.cmxa %{_libdir}/ocaml/guestfs/*.cmx +%endif %{_libdir}/ocaml/guestfs/*.mli %{_mandir}/man3/guestfs-ocaml.3* @@ -1136,6 +1047,7 @@ rm ocaml/html/.gitignore %{_mandir}/man3/guestfs-python.3* +%if !0%{?rhel} %files -n ruby-%{name} %doc ruby/examples/*.rb %doc ruby/doc/site/* @@ -1144,19 +1056,11 @@ rm ocaml/html/.gitignore %{_mandir}/man3/guestfs-ruby.3* -%files java -%{_libdir}/libguestfs_jni*.so.* -%{_datadir}/java/*.jar - - -%files java-devel -%doc java/examples/*.java -%{_libdir}/libguestfs_jni*.so -%{_mandir}/man3/guestfs-java.3* - - -%files javadoc -%{_javadocdir}/%{name} +%files -n php-%{name} +%doc php/README-PHP +%dir %{_sysconfdir}/php.d +%{_sysconfdir}/php.d/guestfs_php.ini +%{_libdir}/php/modules/guestfs_php.so %files -n lua-guestfs @@ -1181,6 +1085,21 @@ rm ocaml/html/.gitignore %{_mandir}/man3/guestfs-gobject.3* +%files vala +%{_datadir}/vala/vapi/libguestfs-gobject-1.0.deps +%{_datadir}/vala/vapi/libguestfs-gobject-1.0.vapi +%endif + + +%ifarch %{golang_arches} +%files -n golang-guestfs +%doc golang/examples/*.go +%doc golang/examples/LICENSE +%{_datadir}/gocode/src/libguestfs.org +%{_mandir}/man3/guestfs-golang.3* +%endif + + %files man-pages-ja %lang(ja) %{_mandir}/ja/man1/*.1* %lang(ja) %{_mandir}/ja/man3/*.3* @@ -1194,847 +1113,1872 @@ rm ocaml/html/.gitignore %changelog -* Tue Jul 05 2022 Richard W.M. Jones - 1:1.44.0-9 -- Fix CVE-2022-2211 Denial of Service in --key parameter - resolves: rhbz#2101280 +* Wed Aug 28 2024 Richard W.M. Jones - 1:1.52.2-4 +- Synchronize patches with RHEL 9.5 + resolves: RHEL-56325 +- appliance/init: Don't set impossible "noop" disk scheduler + resolves: RHEL-56157 -* Tue Jun 07 2022 Richard W.M. Jones - 1:1.44.0-8 -- Obsolete old libguestfs-benchmarking subpackage - resolves: rhbz#2091597 +* Thu Aug 08 2024 Troy Dawson - 1:1.52.2-2 +- Bump release for Aug 2024 java mass rebuild -* Thu May 12 2022 Richard W.M. Jones - 1:1.44.0-7 -- Disable 5-level page tables when using -cpu max - resolves: rhbz#2084566 - related: rhbz#2075424 +* Thu Jul 25 2024 Richard W.M. Jones - 1:1.52.2-1 +- Rebase to libguestfs 1.52.2 (along the stable branch) +- Remove dependency on syslinux packages + resolves: RHEL-50565 -* Thu Apr 14 2022 Richard W.M. Jones - 1:1.44.0-6 -- Backport support for -cpu max to allow RHEL 9 guests to be modified - resolves: rhbz#2075424 +* Fri Jun 28 2024 Richard W.M. Jones - 1:1.52.1-6 +- Fix parsing in part_get_gpt_attributes + resolves: RHEL-45465 -* Fri Dec 24 2021 Richard W.M. Jones - 1:1.44.0-5 -- Fix libguestfs failure with qemu 6.2, libvirt 7.10 - resolves: rhbz#2035177 +* Tue Jun 25 2024 Troy Dawson - 1:1.52.1-5 +- Bump release for June 2024 mass rebuild -* Thu Oct 14 2021 Richard W.M. Jones - 1:1.44.0-4 -- Autodetect backing format for qemu-img create -b -- Move appliance to separate subpackage -- Read rpm database through librpm - resolves: rhbz#2013916, rhbz#1989520, rhbz#1836094 +* Wed Jun 19 2024 Richard W.M. Jones - 1:1.52.1-4 +- OCaml 5.2.0 ppc64le fix -* Thu Sep 2 2021 Danilo C. L. de Paula - 1.44.0-3.el8 -- Resolves: bz#2000225 - (Rebase virt:rhel module:stream based on AV-8.6) +* Fri May 31 2024 Richard W.M. Jones - 1:1.52.1-3 +- Rebuild for OCaml 5.2 +- Re-enable perl in RHEL, needed for virt-win-reg. -* Tue Apr 20 2021 Richard W.M. Jones - 1:1.40.2-28 -- daemon: lvm: Use lvcreate --yes to avoid interactive prompts - resolves: rhbz#1933640 +* Mon May 13 2024 Richard W.M. Jones - 1:1.52.1-1 +- New stable branch version 1.52.1 +- Remove lua, perl, ruby, php and gobject bindings in RHEL +- Remove gdisk dependency for RHEL + resolves: RHEL-35998 -* Tue Jan 05 2021 Richard W.M. Jones - 1:1.40.2-27 -- selinux-relabel does not work if SELINUXTYPE != targeted -- tar-in command does not allow restoring file capabilities - resolves: rhbz#1384241 rhbz#1828952 +* Thu Jan 25 2024 Fedora Release Engineering - 1:1.52.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild -* Mon Jan 04 2021 Richard W.M. Jones - 1:1.40.2-26 -- insufficient default memsize to open anaconda default RHEL 8.2 luks device - resolves: rhbz#1837765 +* Sun Jan 21 2024 Fedora Release Engineering - 1:1.52.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild -* Mon Jul 20 2020 Pino Toscano - 1:1.40.2-25 -- v2v: handle HTTP/2 replies from vCenter - resolves: rhbz#1854380 +* Mon Jan 15 2024 Richard W.M. Jones - 1:1.52.0-5 +- Use curl instead of wget, since wget2 is broken + (https://gitlab.com/gnuwget/wget2/-/issues/652) +- Remove yajl daemon dep and replace with jansson. -* Wed Jun 24 2020 Pino Toscano - 1:1.40.2-24 -- v2v: ship a newer version of rhev-apt.exe - resolves: rhbz#1849997 +* Tue Jan 9 2024 Richard W.M. Jones - 1:1.52.0-3 +- Make cache directory find more robust + /var/cache/libdnf5 may be missing if dnf5 is not around -* Tue May 26 2020 Pino Toscano - 1:1.40.2-23 -- Ignore the user.WofCompressedData xattr - resolves: rhbz#1811539 -- sysprep: new ipa-client and kerberos-hostkeytab operations - resolves: rhbz#1789592 +* Mon Jan 8 2024 Richard W.M. Jones - 1:1.52.0-2 +- Look for RPMs in /var/cache/libdnf5 + https://bugzilla.redhat.com/show_bug.cgi?id=2256945#c5 -* Mon Apr 27 2020 Danilo C. L. de Paula - 1.40.2 -- Resolves: bz#1810193 - (Upgrade components in virt:rhel module:stream for RHEL-8.3 release) +* Thu Jan 4 2024 Richard W.M. Jones - 1:1.52.0-1 +- New upstream stable branch version 1.52.0 -* Tue Dec 10 2019 Pino Toscano - 1:1.38.4-15 -- Stop building virt-p2v-maker, as it will be built by its own source - resolves: rhbz#1777924 +* Wed Jan 03 2024 Mamoru TASAKA - 1:1.51.10-2 +- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.3 -* Thu Aug 08 2019 Pino Toscano - 1:1.38.4-14 -- v2v: use -T as argument of scp when copying vmx files via ssh - resolves: rhbz#1738886 +* Tue Dec 19 2023 Richard W.M. Jones - 1:1.51.10-1 +- New upstream development version 1.51.10 -* Fri Jun 28 2019 Danilo de Paula -- Rebuild all virt packages to fix RHEL's upgrade path -- Resolves: rhbz#1695587 - (Ensure modular RPM upgrade path) +* Mon Dec 18 2023 Richard W.M. Jones - 1:1.51.9-4 +- OCaml 5.1.1 + s390x code gen fix for Fedora 40 -* Wed Jun 05 2019 Pino Toscano - 1:1.38.4-12 -- v2v: update nbdkit information in documentation - resolves: rhbz#1651115 -- v2v: use proper SELinux label for nbdkit sockets - resolves: rhbz#1717088 +* Thu Dec 14 2023 Richard W.M. Jones - 1:1.51.9-3 +- Fixes for https://github.com/ocaml/ocaml/issues/12820 -* Thu Apr 11 2019 Pino Toscano - 1:1.38.4-11 -- Use a better icon for RHEL 7+ guests - resolves: rhbz#1679483 -- Fix inspection of partition-less devices - resolves: rhbz#1679966 -- v2v: ship a newer version of rhev-apt.exe - resolves: rhbz#1688062 +* Tue Dec 12 2023 Richard W.M. Jones - 1:1.51.9-2 +- OCaml 5.1.1 rebuild for Fedora 40 -* Wed Jan 23 2019 Pino Toscano - 1:1.38.4-10 -- Rebase to libguestfs 1.38.4 in RHEL 8.0. +* Sat Dec 9 2023 Richard W.M. Jones - 1:1.51.9-1 +- New upstream development version 1.51.9 -* Mon Jan 22 2018 Pino Toscano - 1:1.36.10-6 -- Rebase to libguestfs 1.36.10 in RHEL 7.5. - resolves: rhbz#1472272 -- Build against OCaml 4.05 - resolves: rhbz#1447981 -- Enable the copyonread flag when running the appliance using libvirt. - resolves: rhbz#1466563 -- Make sure kernel-rt is never used as Requires. - resolves: rhbz#1471651 -- v2v: disable unconfiguration of manually installed VMware tools. - resolves: rhbz#1477905 -- v2v: prefer pigz or pxz for uncompressing OVA files, if available - resolves: rhbz#1448739 -- resize: handle empty UUIDs for swap partitions - resolves: rhbz#1482737 -- v2v: remove mention of --dcpath in an error message - resolves: rhbz#1486197 -- Disables the QEMU image file locking when opening disks as read-only - resolves: rhbz#1417306 - resolves: rhbz#1503497 -- Briefly document the format used for URIs - resolves: rhbz#1450325 -- v2v: deal with grub2 configurations without a default set - resolves: rhbz#1472288 -- v2v: warn when a guest has passthrough devices - resolves: rhbz#1472719 -- v2v: fix three regular expressions - resolves: rhbz#1494555 -- v2v: enable conversion of full-disk LUKS-encrypted Linux guests - resolves: rhbz#1451665 -- v2v: new 'vddk' import method - resolves: rhbz#1477912 - resolves: rhbz#1513884 -- Enable libguestfs to work on z Systems - resolves: rhbz#1479526 -- p2v: fx check for sudo requiring a password - resolves: rhbz#1500673 -- v2v: handle disks with snapshots in vCenter - resolves: rhbz#1172425 -- rescue: backport improved version - resolves: rhbz#1438710 -- v2v: improve bootloader detection - resolves: rhbz#1508299 -- v2v: parse MAC address of network interfaces in OVF files - resolves: rhbz#1506572 -- Unconditionally depend on libvirt-daemon-kvm >= 3.9.0-1, which will always - pull the right qemu-kvm too, and thus remove the unversioned dependencies - on it - resolves: rhbz#1500870 -- v2v: fix RPM file owned test - resolves: rhbz#1503958 -- Do not open read-only disks using in the libvirt backend - resolves: rhbz#1518517 -- v2v: handle better when grubby does not report any default kernel - resolves: rhbz#1519204 -- v2v: enhance vmx import method to access via SSH - resolves: rhbz#1523767 -- builder: fix caching of templates when using --cache-all-templates - resolves: rhbz#1523650 +* Mon Nov 27 2023 Richard W.M. Jones - 1:1.51.8-2 +- Fix build for libxml2 2.12.1 -* Thu Jun 22 2017 Pino Toscano - 1:1.36.3-6 -- Rebase to libguestfs 1.36 in RHEL 7.4. - resolves: rhbz#1359086 -- v2v: always use names for libvirt pools - resolves: rhbz#1141631 -- v2v: correctly find GRUB in RHEL UEFI guests -- v2v: uninstall VMware tools packages from guests - resolves: rhbz#1155150 -- v2v: install RHEV-APT only when using -o rhev/-o vdsm - resolves: rhbz#1161019 -- New API: btrfs-filesystem-show - resolves: rhbz#1164765 -- p2v: always enable debugging when running virt-v2v - resolves: rhbz#1167623 -- libguestfs prefers virtio-pci on aarch64 - resolves: rhbz#1237250 -- v2v: make sure to copy all the driver files on Windows - resolves: rhbz#1255610 -- Better tolerate corrupted Windows hivex; bump the hivex BuildRequires and - Requires to >= 1.3.10-5.8.el7 - resolves: rhbz#1311890 -- v2v: ignore all the environment variables for proxy when exporting from - vCenter - resolves: rhbz#1354507 -- virt-sysprep can deal with full-LUKS encrypted guests - resolves: rhbz#1362649 -- All the tools have bash completion scripts. - resolves: rhbz#1367738 -- v2v: do not remove Processor and Intelppm nodes in Windows guests - resolves: rhbz#1372668 -- Fix SELinux relabelling in old RHEL 6 guests, by adjusting a broken - regular expression in file_contexts file - resolves: rhbz#1374232 -- v2v: set all the properties on creation when exporting to Glance - resolves: rhbz#1374405 -- v2v: set hw_video_model when exporting to Glance - resolves: rhbz#1374651 -- v2v: fix OVA conversion as root using the libvirt backend - resolves: rhbz#1375157 -- Various improvements and fixes to the documentation - resolves: rhbz#1377081 - resolves: rhbz#1390876 - resolves: rhbz#1398070 - resolves: rhbz#1425306 -- v2v: support and - resolves: rhbz#1378022 -- v2v: allow libvirt >= 2.1.0 for vCenter conversions - resolves: rhbz#1379240 -- p2v: enable mnemonics in the GUI - resolves: rhbz#1379289 -- Split virt-p2v, and the tools for it, in an own package: virt-p2v-maker - resolves: rhbz#1382275 -- Correctly parse mount options in btrfs entries in /etc/fstab. - resolves: rhbz#1383517 -- Read secrets from libvirt domains, when inspecting them - resolves: rhbz#1392798 -- v2v: add --vdsm-compat=1.1 flag for VDSM - resolves: rhbz#1400205 -- Fix inspection with UsrMove and /usr in a separate partition - resolves: rhbz#1401474 -- v2v: improve import compatibility with OVAs produced by AWS - resolves: rhbz#1402301 -- resize: allow URIs for the output disk - resolves: rhbz#1404182 -- Disable EDD when launching the appliance - resolves: rhbz#1404287 -- v2v: increase the memory allocated to the appliance - resolves: rhbz#1418283 -- p2v: switch from GTK+ 2 to GTK+ 3 -- p2v: add dbus-devel as BuildRequires to disable suspension during the - conversion -- libguestfs-java: bump the java-headless Require to >= 1.7.0, matching the - Build-Require, and the generated bytecode - resolves: rhbz#1364518 -- Do not try to use/write to /var/cache/yum & /var/log/yum.log -- Bump ocaml-findlib-devel BuildRequires to >= 1.3.3-7.el7, because of - RHBZ#1403897 -- v2v: remove --dcpath & --dcPath from --help output too - resolves: rhbz#1429430 -- v2v: force VNC as display for -i disk, as SDL is not supported - resolves: rhbz#1372671 -- v2v, p2v: rename rhvm network to ovirtmgmt - resolves: rhbz#1429491 -- v2v: when exporting to local disk, check that UEFI firmware is installed - before conversion - resolves: rhbz#1429506 -- dib: actually generate SHA256 checksums when using --checksum - resolves: rhbz#1430184 -- v2v: do not mention SUSE Xen hosts as supported - resolves: rhbz#1430203 -- v2v: depend on OVMF/AAVMF, for converting EFI guests - resolves: rhbz#1429643 -- v2v: use absolute path when using an OVA as backing file - resolves: rhbz#1430680 -- v2v: support Debian/Ubuntu guests - resolves: rhbz#1387213 -- sysprep: remove DHCP_HOSTNAME entries - resolves: rhbz#1427529 -- v2v: avoid repeated "run virt-v2v -v -x" message on error - resolves: rhbz#1167623 -- bash-completion: add script for virt-v2v-copy-to-local - resolves: rhbz#1367738 -- v2v: fix virtio block driver installation for Windows 10 and Windows 2016 - resolves: rhbz#1434737 -- Replace the libosinfo dependency with osinfo-db, since we are only using - the osinfo database. -- v2v: fix virtio driver installation for Windows 8 UEFI - resolves: rhbz#1431579 -- v2v: new 'vmx' import method - resolves: rhbz#1441197 -- v2v: properly identify Windows 2016 guests when exporting them to RHV-M - resolves: rhbz#1447202 -- Run pvresize in non-interactive mode - resolves: rhbz#1460692 -- resize: make sure the input disk is read-only - resolves: rhbz#1463714 -- Switch qemu-kvm-rhev dependency to qemu-kvm on aarch64 - resolves: rhbz#1463646 +* Thu Nov 16 2023 Richard W.M. Jones - 1:1.51.8-1 +- New upstream development version 1.51.8 -* Tue Aug 30 2016 Richard W.M. Jones - 1:1.32.7-3 -- Rebase to libguestfs 1.32 in RHEL 7.3 - resolves: rhbz#1218766 -- The full tests are now run after the package has been built. -- New tool and subpackage: virt-dib (safe diskimage-builder replacement). -- New subpackage libguestfs-inspect-icons to reduce dependencies of main pkg - (see https://bugzilla.redhat.com/1194158). +* Tue Nov 14 2023 Richard W.M. Jones - 1:1.51.7-6 +- Don't pull in selinux-policy as a requires + +* Mon Oct 30 2023 Richard W.M. Jones - 1:1.51.7-5 +- Use dhcpcd instead of dhclient (RHBZ#2247057) + +* Fri Oct 06 2023 Richard W.M. Jones - 1:1.51.7-4 +- Add upstream patch to fix linking the daemon with OCaml 5.1 + +* Thu Oct 05 2023 Richard W.M. Jones - 1:1.51.7-3 +- OCaml 5.1 rebuild for Fedora 40 + +* Wed Oct 4 2023 Jerry James - 1:1.51.7-2 +- Update names of the Unix and Camlstr libraries for OCaml 5.1.0 +- Link with libzstd for OCaml 5.1.0 + +* Tue Oct 03 2023 Remi Collet - 1:1.51.7-2 +- rebuild for https://fedoraproject.org/wiki/Changes/php83 + +* Thu Sep 21 2023 Richard W.M. Jones - 1:1.51.7-1 +- New upstream development branch 1.51.7 + +* Wed Jul 26 2023 Yaakov Selkowitz - 1:1.51.6-2 +- Use qemu-kvm in ELN builds + +* Thu Jul 20 2023 Richard W.M. Jones - 1:1.51.6-1 +- New upstream development branch 1.51.6 + +* Thu Jul 20 2023 Fedora Release Engineering - 1:1.51.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri Jul 14 2023 Richard W.M. Jones - 1:1.51.5-1 +- New upstream development branch 1.51.5 + +* Thu Jul 13 2023 Jitka Plesnikova - 1:1.51.4-8 +- Perl 5.38 re-rebuild updated packages + +* Thu Jul 13 2023 Richard W.M. Jones - 1:1.51.4-7 +- Bump and rebuild against supermin-5.3.3-13.fc39 + +* Thu Jul 13 2023 Jitka Plesnikova - 1:1.51.4-6 +- Perl 5.38 re-rebuild updated packages + +* Tue Jul 11 2023 Richard W.M. Jones - 1:1.51.4-5 +- OCaml 5.0 rebuild for Fedora 39 + +* Tue Jul 11 2023 Jitka Plesnikova - 1:1.51.4-4 +- Perl 5.38 rebuild + +* Mon Jul 10 2023 Jerry James - 1:1.51.4-3 +- OCaml 5.0.0 rebuild + +* Tue Jun 27 2023 Python Maint - 1:1.51.4-2 +- Rebuilt for Python 3.12 + +* Tue Jun 27 2023 Richard W.M. Jones - 1:1.51.4-1 +- New upstream development version 1.51.4 + +* Thu Jun 15 2023 Python Maint - 1:1.51.3-4 +- Rebuilt for Python 3.12 + +* Mon Jun 05 2023 Richard W.M. Jones - 1:1.51.3-3 +- Migrated to SPDX license + +* Fri May 19 2023 Richard W.M. Jones - 1:1.51.3-2 +- Rebuild against librpm 10 + +* Wed Apr 19 2023 Richard W.M. Jones - 1:1.51.3-1 +- New upstream development version 1.51.3 + +* Tue Feb 21 2023 Richard W.M. Jones - 1:1.51.2-1 +- New upstream development version 1.51.2 + +* Fri Feb 10 2023 Richard W.M. Jones - 1:1.51.1-1 +- New upstream development version 1.51.1 +- Remove virt-dib + +* Tue Feb 07 2023 Richard W.M. Jones - 1:1.50.0-1 +- New upstream stable branch 1.50.0 + +* Tue Jan 24 2023 Richard W.M. Jones - 1:1.49.9-2 +- Rebuild OCaml packages for F38 + +* Fri Jan 20 2023 Richard W.M. Jones - 1:1.49.9-1 +- New upstream development version 1.49.9 +- +BR ocaml-augeas-devel + +* Thu Jan 19 2023 Fedora Release Engineering - 1:1.49.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jan 04 2023 Mamoru TASAKA - 1:1.49.8-2 +- Rebuild for https://fedoraproject.org/wiki/Changes/Ruby_3.2 + +* Sat Dec 10 2022 Richard W.M. Jones - 1:1.49.8-1 +- New upstream development version 1.49.8 + +* Mon Nov 28 2022 Richard W.M. Jones - 1:1.49.7-1 +- New upstream development version 1.49.7 + +* Mon Nov 21 2022 Richard W.M. Jones - 1:1.49.6-1 +- New upstream development version 1.49.6 + +* Tue Nov 08 2022 Richard W.M. Jones - 1:1.49.5-3 +- Move libguestfs-make-fixed-appliance to main package (RHBZ#2140695) + +* Tue Oct 11 2022 Richard W.M. Jones - 1:1.49.5-2 +- New upstream development version 1.49.5 + +* Wed Oct 05 2022 Remi Collet - 1:1.49.4-2 +- rebuild for https://fedoraproject.org/wiki/Changes/php82 + +* Mon Aug 01 2022 Richard W.M. Jones - 1:1.49.4-1 +- New upstream development version 1.49.4 + +* Thu Jul 21 2022 Fedora Release Engineering - 1:1.49.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jul 04 2022 Richard W.M. Jones - 1:1.49.3-2 +- Add clevis-luks to BRs, required by 1.49.3 + +* Fri Jul 01 2022 Richard W.M. Jones - 1:1.49.3-1 +- New upstream development version 1.49.3 + +* Mon Jun 20 2022 Python Maint - 1:1.49.2-7 +- Rebuilt for Python 3.11 + +* Sun Jun 19 2022 Richard W.M. Jones - 1:1.49.2-6 +- OCaml 4.14.0 rebuild + +* Thu Jun 16 2022 Python Maint - 1:1.49.2-5 +- Rebuilt for Python 3.11 + +* Thu Jun 16 2022 Richard W.M. Jones - 1:1.49.2-4 +- Fix PHP bindings + +* Wed Jun 15 2022 Python Maint - 1:1.49.2-3 +- Rebuilt for Python 3.11 + +* Wed Jun 01 2022 Jitka Plesnikova - 1:1.49.2-2 +- Perl 5.36 rebuild + +* Thu May 26 2022 Richard W.M. Jones - 1:1.49.2-1 +- New upstream development version 1.49.2 + +* Sat May 21 2022 Richard W.M. Jones - 1:1.49.1-2 +- Add upstream patch which helps debugging appliance generation. + +* Thu May 12 2022 Richard W.M. Jones - 1:1.49.1-1 +- New upstream development version 1.49.1 + +* Thu Apr 14 2022 Richard W.M. Jones - 1:1.48.1-1 +- New upstream stable branch version 1.48.1 + +* Mon Mar 14 2022 Richard W.M. Jones - 1:1.48.0-1 +- New upstream stable branch version 1.48.0 +- Remove the RHEL (downstream) patches as they are out of date. + +* Tue Mar 08 2022 Richard W.M. Jones - 1:1.47.4-1 +- New upstream development version 1.47.4 +- Replace guestfs-release-notes-historical(1) with guestfs-release-notes(1) + +* Tue Mar 01 2022 Richard W.M. Jones - 1:1.47.3-1 +- New upstream development version 1.47.3 +- Enable tests on all arches again. + +* Mon Feb 28 2022 Richard W.M. Jones - 1:1.47.2-6 +- Add more external programs used by the library + +* Tue Feb 08 2022 Richard W.M. Jones - 1:1.47.2-5 +- Bump and rebuild for eln + +* Fri Feb 04 2022 Richard W.M. Jones - 1:1.47.2-4 +- OCaml 4.13.1 rebuild to remove package notes + +* Thu Jan 20 2022 Fedora Release Engineering - 1:1.47.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Tue Jan 04 2022 Richard W.M. Jones - 1:1.47.2-2 +- Build and rebuild for new glibc causing broken deps on armv7 (RHBZ#2034715) + +* Fri Dec 24 2021 Richard W.M. Jones - 1:1.47.2-1 +- New upstream development version 1.47.2 + +* Thu Dec 09 2021 Richard W.M. Jones - 1:1.47.1-1 +- New upstream development version 1.47.1 + +* Fri Oct 29 2021 Richard W.M. Jones - 1:1.46.0-4 +- Require libvirt-daemon-driver-storage-core + resolves: rhbz#2018358 + +* Thu Oct 28 2021 Remi Collet - 1:1.46.0-3 +- rebuild for https://fedoraproject.org/wiki/Changes/php81 + +* Tue Oct 05 2021 Richard W.M. Jones - 1:1.46.0-2 +- OCaml 4.13.1 build + +* Thu Sep 23 2021 Richard W.M. Jones - 1:1.46.0-1 +- New upstream stable branch version 1.46.0 +- Remove BUGS file, no longer provided upstream + +* Tue Aug 31 2021 Richard W.M. Jones - 1:1.45.7-2 +- Rebuild for updated ntfs-3g CVE (RHBZ#1999788) + +* Tue Aug 31 2021 Richard W.M. Jones - 1:1.45.7-1 +- New upstream development version 1.45.7. +- Fix to work with qemu 6.1 (RHBZ#1998820) + +* Fri Aug 06 2021 Richard W.M. Jones - 1:1.45.6-11 +- Fix license files. +- Move appliance to separate subpackage (RHBZ#1989514). + +* Thu Jul 22 2021 Fedora Release Engineering - 1:1.45.6-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jun 29 2021 Richard W.M. Jones - 1:1.45.6-9 +- RHEL 9 patch for openssl missing configuration file + https://bugzilla.redhat.com/show_bug.cgi?id=1977214#c13 + +* Thu Jun 24 2021 Richard W.M. Jones - 1:1.45.6-8 +- Remove Suggests for unsupported qemu drivers in RHEL (RHBZ#1975703) + +* Sat Jun 12 2021 Richard W.M. Jones - 1:1.45.6-6 +- Depend on hivex-libs instead of hivex. + +* Fri Jun 04 2021 Python Maint - 1:1.45.6-5 +- Rebuilt for Python 3.10 + +* Thu Jun 3 2021 Richard W.M. Jones - 1:1.45.6-4 +- Add --enable-appliance-format-auto (RHBZ#1967166) + +* Wed Jun 2 2021 Richard W.M. Jones - 1:1.45.6-3 +- Add gating tests (for RHEL 9) + +* Tue Jun 01 2021 Richard W.M. Jones - 1:1.45.6-2 +- Depend on rpm-libs >= 4.16.1.3 (RHBZ#1966541). + +* Thu May 27 2021 Richard W.M. Jones - 1:1.45.6-1 +- New upstream development version 1.45.6. + +* Fri May 21 2021 Jitka Plesnikova - 1:1.45.5-3 +- Perl 5.34 rebuild + +* Mon May 10 2021 Jeff Law - 1:1.45.5-2 +- Re-enable LTO + +* Fri Apr 09 2021 Richard W.M. Jones - 1:1.45.5-1 +- New upstream development version 1.45.5. + +* Sat Apr 03 2021 Richard W.M. Jones - 1:1.45.4-1 +- New upstream version 1.45.4. + +* Wed Mar 31 2021 Richard W.M. Jones - 1:1.45.3-6 +- Don't require genisoimage or xorriso for the appliance. +- Add workaround for broken "file" utility in Rawhide (RHBZ#1945122). + +* Tue Mar 30 2021 Richard W.M. Jones - 1:1.45.3-4 +- Add downstream (RHEL-only) patches (RHBZ#1931724). +- Switch from genisoimage to xorriso. + +* Mon Mar 29 2021 Richard W.M. Jones - 1:1.45.3-2 +- New upstream release 1.45.3. +- Add proper dependencies on librpm, remove BDB. + +* Fri Mar 26 2021 Richard W.M. Jones - 1:1.45.2-2 +- Remove no longer needed requires on libguestfs-tools-c. + +* Tue Mar 23 2021 Richard W.M. Jones - 1:1.45.2-1 +- New upstream version 1.45.2. +- This drops the tools. Now packaged as guestfs-tools. +- guestfish, guestmount, guestunmount now packaged with libguestfs. +- virt-rescue now packaged in libguestfs-rescue. +- Drop ChangeLog file. +- Remove virt-dib in RHEL 9. +- Depend on PCRE2 instead of PCRE. + +* Thu Mar 18 2021 Richard W.M. Jones - 1:1.45.1-6 +- Drop dependency on perl(Sys::Virt). +- Fix -cpu max and require libvirt >= 7.1.0. + +* Wed Mar 10 2021 Richard W.M. Jones - 1:1.45.1-4 +- Drop Requires: libvirt-daemon-kvm, pulls in the whole of qemu and subpkgs. + +* Mon Mar 8 2021 Richard W.M. Jones - 1:1.45.1-3 +- Bump and rebuild for ocaml-gettext update. + +* Fri Mar 5 2021 Remi Collet - 1:1.45.1-2 +- rebuild for https://fedoraproject.org/wiki/Changes/php80 +- add trivial patch to fix build with PHP 8 + +* Wed Mar 3 2021 Richard W.M. Jones - 1:1.45.1-1 +- New upstream version 1.45.1. + +* Tue Mar 2 2021 Richard W.M. Jones - 1:1.44.0-8 +- OCaml 4.12.0 build +- Fixes for OCaml 4.12. + +* Wed Feb 17 2021 Richard W.M. Jones - 1:1.44.0-6 +- Remove jfsutils (dead upstream since 2011). +- Remove nilfs (dead upstream since 2015). +- Remove reiserfs (dead upstream since 2006). + +* Tue Feb 09 2021 Richard W.M. Jones - 1:1.44.0-5 +- Remove gfs2-utils dependency in RHEL 9. + +* Thu Jan 28 2021 Richard W.M. Jones - 1:1.44.0-4 +- ELN has full-fat qemu (not qemu-kvm). + +* Tue Jan 26 2021 Fedora Release Engineering - 1:1.44.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Jan 07 2021 Mamoru TASAKA - 1:1.44.0-2 +- F-34: rebuild against ruby 3.0 + +* Wed Jan 06 2021 Richard W.M. Jones - 1:1.44.0-1 +- New upstream stable version 1.44.0. + +* Tue Jan 05 2021 Richard W.M. Jones - 1:1.43.4-1 +- New upstream version 1.43.4. + +* Mon Jan 04 2021 Richard W.M. Jones - 1:1.43.3-4 +- Drop explicit deps on perl(Sys::Virt) and perl(Win::Hivex). + +* Wed Dec 02 2020 Richard W.M. Jones - 1:1.43.3-3 +- Unify Fedora and RHEL spec files. + +* Tue Dec 01 2020 Richard W.M. Jones - 1:1.43.3-2 +- New upstream version 1.43.3. +- Disable LTO because of memory running out on ARMv7. + +* Mon Sep 21 2020 Richard W.M. Jones - 1:1.43.2-1 +- New upstream version 1.43.2. +- Replace libvirt-daemon-qemu with libvirt-daemon-kvm. + +* Tue Sep 01 2020 Richard W.M. Jones - 1:1.43.1-7 +- OCaml 4.11.1 rebuild + +* Fri Aug 21 2020 Richard W.M. Jones - 1:1.43.1-6 +- OCaml 4.11.0 rebuild + +* Mon Aug 10 2020 Merlin Mathesius - 1.43.1-5 +- Use ExclusiveArch: %%{kernel_arches} + +* Fri Jul 31 2020 Richard W.M. Jones - 1:1.43.1-4 +- Disable then reenable LTO. + https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/ULGH5JYL7MHKDKTINJLOEN2QG6LOHWH7/ + +* Tue Jul 28 2020 Fedora Release Engineering - 1:1.43.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 6 2020 Richard W.M. Jones - 1:1.43.1-1 +- New development branch 1.43. +- Remove upstream patches. + +* Thu Jun 25 2020 Jitka Plesnikova - 1:1.42.0-8 +- Perl 5.32 rebuild + +* Tue May 26 2020 Miro Hrončok - 1:1.42.0-7 +- Rebuilt for Python 3.9 + +* Wed May 06 2020 Richard W.M. Jones - 1:1.42.0-6 +- Fix path to libguestfs appliance. + +* Tue May 05 2020 Richard W.M. Jones - 1:1.42.0-5 +- OCaml 4.11.0+dev2-2020-04-22 rebuild + +* Wed Apr 22 2020 Richard W.M. Jones - 1:1.42.0-4 +- OCaml 4.11.0 pre-release attempt 2 + +* Sat Apr 04 2020 Richard W.M. Jones - 1:1.42.0-3 +- Update all OCaml dependencies for RPM 4.16. + +* Thu Mar 12 2020 Richard W.M. Jones - 1:1.42.1-1 +- Enable NTFS-3g system compression. + +* Mon Mar 09 2020 Richard W.M. Jones - 1:1.42.0-1 +- New upstream stable version 1.42.0. +- Drop the benchmarking subpackage: moved to a new package upstream. +- Enable Vala bindings. + +* Thu Feb 27 2020 Richard W.M. Jones - 1:1.41.8-9 +- OCaml 4.10.0 final. + +* Wed Jan 29 2020 Fedora Release Engineering - 1:1.41.8-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Mon Jan 20 2020 Vít Ondruch - 1:1.41.8-7 +- Another rebuild against Ruby 2.7. + +* Sun Jan 19 2020 Richard W.M. Jones - 1:1.41.8-5 +- OCaml 4.10.0+beta1 rebuild. + +* Sat Jan 18 2020 Mamoru TASAKA - 1:1.41.8-4 +- F-32: rebuild against ruby27 + +* Fri Dec 06 2019 Richard W.M. Jones - 1:1.41.8-3 +- OCaml 4.09.0 (final) rebuild. + +* Wed Nov 27 2019 Richard W.M. Jones - 1:1.41.8-2 +- Use gpgverify macro instead of explicit gpgv2 command. + +* Tue Nov 19 2019 Richard W.M. Jones - 1:1.41.8-1 +- New upstream version 1.41.8. +- virt-v2v is now in a separate project. +- Drop erlang bindings. + +* Fri Oct 11 2019 Richard W.M. Jones - 1:1.41.5-1 +- New upstream version 1.41.5. + +* Fri Oct 04 2019 Remi Collet - 1:1.41.4-2 +- rebuild for https://fedoraproject.org/wiki/Changes/php74 + +* Tue Sep 17 2019 Pino Toscano - 1:1.41.4-2 +- Drop virt-p2v (virt-p2v-maker subpackage), which is now built from + its own source. + +* Mon Sep 02 2019 Richard W.M. Jones - 1:1.41.4-1 +- New upstream version 1.41.4. + +* Mon Aug 19 2019 Miro Hrončok - 1:1.40.2-10 +- Rebuilt for Python 3.8 + +* Fri Aug 16 2019 Richard W.M. Jones - 1:1.40.2-9 +- OCaml 4.08.1 (final) rebuild. + +* Thu Aug 01 2019 Richard W.M. Jones - 1:1.40.2-8 +- OCaml 4.08.1 (rc2) rebuild. + +* Thu Jul 25 2019 Fedora Release Engineering - 1:1.40.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild +- Disable the package entirely on i686 because there is no kernel + https://fedoraproject.org/wiki/Changes/Stop_Building_i686_Kernels + +* Fri May 31 2019 Jitka Plesnikova - 1:1.40.2-6 +- Perl 5.30 rebuild + +* Fri May 31 2019 Richard W.M. Jones - 1:1.40.2-5 +- Add proposed patch for Python 3.8 (RHBZ#1705482). + +* Mon Mar 18 2019 Richard W.M. Jones - 1:1.40.2-4 +- Remove Java bindings. + https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/CW4XMOIKMNRRPAZ4H2ER7VPBY6YV2ODL/#YHTZ7IGVTKPWCBOY5C6UW7BMX7F35R5Q + +* Thu Mar 07 2019 Richard W.M. Jones - 1:1.40.2-3 +- Remove Python 2 bindings completely. + https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal + +* Sun Feb 17 2019 Igor Gnatenko - 1:1.40.2-2 +- Rebuild for readline 8.0 + +* Fri Feb 08 2019 Richard W.M. Jones - 1:1.40.2-1 +- New upstream version 1.40.2. + +* Fri Feb 01 2019 Fedora Release Engineering - 1:1.40.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Tue Jan 22 2019 Mamoru TASAKA - 1:1.40.1-4 +- F-30: rebuild against ruby26 + +* Mon Jan 21 2019 David Abdurachmanov - 1:1.40.1-3 +- Disable ZFS for RISC-V (riscv64) + +* Thu Jan 17 2019 Richard W.M. Jones - 1:1.40.1-2 +- nbdkit Python3 plugin is called "python3" in Fedora, adjust configure line. + +* Thu Jan 17 2019 Richard W.M. Jones - 1:1.40.1-1 +- New upstream version 1.40.1. +- Remove patch which is now upstream. +- Add new virt-v2v man pages. + +* Mon Jan 14 2019 Björn Esser - 1:1.39.11-4 +- Rebuilt for libcrypt.so.2 (#1666033) + +* Tue Jan 08 2019 Richard W.M. Jones - 1:1.39.11-3 +- Small fix for qemu behaviour (RHBZ#1664318). + +* Fri Oct 12 2018 Richard W.M. Jones - 1:1.39.11-2 +- lib: Add Recommends for libvirt-daemon-config-network so that networking + works out of the box. + +* Sat Sep 22 2018 Richard W.M. Jones - 1:1.39.11-1 +- New upstream version 1.39.11. + +* Fri Sep 21 2018 Richard W.M. Jones - 1:1.39.10-1 +- New upstream version 1.39.10. + +* Fri Aug 31 2018 Richard W.M. Jones - 1:1.39.9-1 +- New upstream version 1.39.9. + +* Fri Jul 27 2018 Richard W.M. Jones - 1:1.39.8-1 +- New upstream version 1.39.8. + +* Thu Jul 26 2018 Richard W.M. Jones - 1:1.39.7-3 +- v2v: Recommends nbdkit-plugin-vddk for -it vddk mode. + +* Tue Jul 24 2018 Richard W.M. Jones - 1:1.39.7-2 +- Rebuild for unannounced soname bump in libconfig. + +* Sat Jul 14 2018 Richard W.M. Jones - 1:1.39.7-1 +- New upstream version 1.39.7. +- v2v/TODO was removed upstream. + +* Fri Jul 13 2018 Richard W.M. Jones - 1:1.39.6-10 +- v2v: Recommends nbdkit and the Python 3 plugin. + +* Fri Jul 13 2018 Fedora Release Engineering - 1:1.39.6-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Jul 11 2018 Richard W.M. Jones - 1:1.39.6-7 +- OCaml 4.07.0 (final) rebuild. + +* Tue Jul 10 2018 Richard W.M. Jones - 1:1.39.6-6 +- Update PHP dependencies. + +* Thu Jul 05 2018 Richard W.M. Jones - 1:1.39.6-5 +- Remove ldconfig + https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/SU3LJVDZ7LUSJGZR5MS72BMRAFP3PQQL/ +- BR on python-unversioned-command + https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_package + +* Tue Jul 03 2018 Petr Pisar - 1:1.39.6-4 +- Perl 5.28 rebuild + +* Mon Jul 02 2018 Miro Hrončok - 1:1.39.6-3 +- Rebuilt for Python 3.7 + +* Fri Jun 29 2018 Jitka Plesnikova - 1:1.39.6-2 +- Perl 5.28 rebuild + +* Fri Jun 29 2018 Richard W.M. Jones - 1:1.39.6-1 +- New upstream version 1.39.6. +- Add new bash-completion script for libguestfs-test-tool. + +* Wed Jun 20 2018 Richard W.M. Jones - 1:1.39.5-5 +- Bump release and rebuild. + +* Wed Jun 20 2018 Richard W.M. Jones - 1:1.39.5-4 +- Bump release and rebuild. + +* Wed Jun 20 2018 Richard W.M. Jones - 1:1.39.5-3 +- OCaml 4.07.0-rc1 rebuild. + +* Tue Jun 19 2018 Miro Hrončok - 1:1.39.5-2 +- Rebuilt for Python 3.7 + +* Wed May 23 2018 Richard W.M. Jones - 1:1.39.5-1 +- New upstream version 1.39.5. + +* Wed May 02 2018 Richard W.M. Jones - 1:1.39.4-1 +- New upstream version 1.39.4. + +* Sun Apr 22 2018 Richard W.M. Jones - 1:1.39.3-1 +- New upstream version 1.39.3. +- Remove upstream patch. + +* Tue Apr 10 2018 Iryna Shcherbina - 1:1.39.2-3 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Thu Mar 29 2018 Richard W.M. Jones - 1:1.39.2-2 +- Add patch to fix detection of qemu mandatory locking. + +* Thu Mar 29 2018 Richard W.M. Jones - 1:1.39.2-1 +- New upstream version 1.39.2. + +* Tue Mar 13 2018 Richard W.M. Jones - 1:1.39.1-1 +- New upstream version 1.39.1. + +* Fri Feb 09 2018 Richard W.M. Jones - 1:1.38.0-1 +- New upstream version 1.38.0. +- Enable tarball signing since we are on a stable branch. +- Fix Source URLs. + +* Tue Feb 06 2018 Richard W.M. Jones - 1:1.37.37-1 +- New upstream version 1.37.37. + +* Thu Jan 25 2018 Richard W.M. Jones - 1:1.37.36-1 +- New upstream version 1.37.36. +- Unbreak the linker. + +* Sat Jan 20 2018 Björn Esser - 1:1.37.35-3 +- Rebuilt for switch to libxcrypt + +* Thu Jan 11 2018 Richard W.M. Jones - 1:1.37.35-2 +- Add BR rpcgen, libtirpc-devel and rebuild against updated Ruby. + +* Sun Dec 10 2017 Richard W.M. Jones - 1:1.37.35-1 +- New upstream version 1.37.35. +- Remove upstream patches. +- Add virt-builder-repository and man page. + +* Thu Dec 7 2017 Richard W.M. Jones - 1:1.37.34-4 +- Remove for libvirt >= 3.10. + +* Sun Dec 3 2017 Richard W.M. Jones - 1:1.37.34-3 +- Fix locking on NBD drives. + +* Fri Nov 17 2017 Richard W.M. Jones - 1:1.37.34-2 +- OCaml 4.06.0 rebuild. + +* Fri Nov 17 2017 Richard W.M. Jones - 1:1.37.34-1 +- New upstream version 1.37.34. + +* Thu Oct 19 2017 Richard W.M. Jones - 1:1.37.31-1 +- New upstream version 1.37.31. + +* Tue Oct 10 2017 Richard W.M. Jones - 1:1.37.29-1 +- New upstream version 1.37.29. + +* Thu Oct 05 2017 Richard W.M. Jones - 1:1.37.28-2 +- Add libguestfs-ufs (BSD) subpackage. + +* Thu Sep 28 2017 Richard W.M. Jones - 1:1.37.28-1 +- New upstream version 1.37.28. + +* Sat Sep 23 2017 Richard W.M. Jones - 1:1.37.27-1 +- New upstream version 1.37.27. + +* Sun Sep 17 2017 Richard W.M. Jones - 1:1.37.26-1 +- New upstream version 1.37.26. + +* Sat Sep 16 2017 Richard W.M. Jones - 1:1.37.25-1 +- New upstream version 1.37.25. + +* Tue Sep 05 2017 Richard W.M. Jones - 1:1.37.22-1 +- New upstream version 1.37.22. + +* Sat Aug 19 2017 Richard W.M. Jones - 1:1.37.21-2 +- Disable zfs subpackage on s390, s390x. + +* Wed Aug 09 2017 Richard W.M. Jones - 1:1.37.21-1 +- New upstream version 1.37.21. + +* Tue Aug 08 2017 Richard W.M. Jones - 1:1.37.20-2 +- OCaml 4.05.0 rebuild. + +* Fri Aug 04 2017 Richard W.M. Jones - 1:1.37.20-1 +- New upstream version 1.37.20. + +* Thu Aug 03 2017 Fedora Release Engineering - 1:1.37.19-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Sat Jul 29 2017 Richard W.M. Jones - 1:1.37.19-1 +- New upstream version 1.37.19. + +* Wed Jul 26 2017 Fedora Release Engineering - 1:1.37.18-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 18 2017 Richard W.M. Jones - 1:1.37.18-1 +- New upstream version 1.37.18. + +* Tue Jul 11 2017 Richard W.M. Jones - 1:1.37.17-2 +- New upstream version 1.37.17. +- Drop libguestfs-gobject-doc because gtk-doc is no longer provided upstream. +- Add new man page guestfs-gobject(3) to libguestfs-gobject-devel. + +* Mon Jun 26 2017 Richard W.M. Jones - 1:1.37.16-2 +- OCaml 4.04.2 rebuild. + +* Fri Jun 23 2017 Richard W.M. Jones - 1:1.37.16-1 +- New upstream version 1.37.16. + +* Tue Jun 06 2017 Jitka Plesnikova - 1:1.37.14-3 +- Perl 5.26 rebuild + +* Mon May 22 2017 Richard W.M. Jones - 1:1.37.14-2 +- Bump release and rebuild for ppc64, ppc64le and s390x. + +* Fri May 19 2017 Richard W.M. Jones - 1:1.37.14-1 +- New upstream version 1.37.14. + +* Fri May 12 2017 Richard W.M. Jones - 1:1.37.13-2 +- OCaml 4.04.1 rebuild. + +* Mon May 08 2017 Richard W.M. Jones - 1:1.37.13-1 +- New upstream version 1.37.13. + +* Wed Apr 26 2017 Richard W.M. Jones - 1:1.37.12-1 +- New upstream version 1.37.12. + +* Sat Apr 15 2017 Richard W.M. Jones - 1:1.37.11-1 +- New upstream version 1.37.11. + +* Wed Apr 12 2017 Richard W.M. Jones - 1:1.37.10-1 +- New upstream version 1.37.10. + +* Sat Apr 08 2017 Richard W.M. Jones - 1:1.37.9-1 +- New upstream version 1.37.9. + +* Fri Mar 31 2017 Richard W.M. Jones - 1:1.37.8-1 +- New upstream version 1.37.8. + +* Fri Mar 24 2017 Richard W.M. Jones - 1:1.37.7-1 +- New upstream version 1.37.7. + +* Mon Mar 20 2017 Richard W.M. Jones - 1:1.37.6-1 +- New upstream version 1.37.6. + +* Tue Mar 14 2017 Richard W.M. Jones - 1:1.37.2-1 +- New upstream version 1.37.2. + +* Tue Mar 07 2017 Richard W.M. Jones - 1:1.37.1-1 +- New upstream version 1.37.1. + +* Tue Feb 28 2017 Richard W.M. Jones - 1:1.37.0-1 +- New upstream version 1.37.0. + +* Fri Feb 24 2017 Richard W.M. Jones - 1:1.35.28-1 +- New upstream version 1.35.28. + +* Thu Feb 23 2017 Richard W.M. Jones - 1:1.35.27-1 +- New upstream version 1.35.27. + +* Wed Feb 22 2017 Richard W.M. Jones - 1:1.35.26-1 +- New upstream version 1.35.26. + +* Wed Feb 15 2017 Richard W.M. Jones - 1:1.35.25-1 +- New upstream version 1.35.25. + +* Sat Feb 11 2017 Richard W.M. Jones - 1:1.35.24-1 +- New upstream version 1.35.24. + +* Sat Feb 11 2017 Richard W.M. Jones - 1:1.35.23-1 +- New upstream version 1.35.23. + +* Fri Feb 10 2017 Richard W.M. Jones - 1:1.35.22-1 +- New upstream version 1.35.22. + +* Wed Feb 08 2017 Richard W.M. Jones - 1:1.35.21-1 +- New upstream version 1.35.21. + +* Thu Feb 02 2017 Pino Toscano - 1:1.35.20-2 +- Avoid spurious dependencies on kernel-debug etc. + +* Sat Jan 28 2017 Richard W.M. Jones - 1:1.35.20-1 +- New upstream version 1.35.20. + +* Fri Jan 13 2017 Mamoru TASAKA - 1:1.35.19-4 +- Rebuild again for f26-ruby24 sidetag + +* Thu Jan 12 2017 Igor Gnatenko - 1:1.35.19-3 +- Rebuild for readline 7.x + +* Thu Jan 12 2017 Vít Ondruch - 1:1.35.19-2 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Ruby_2.4 + +* Sat Dec 24 2016 Richard W.M. Jones - 1:1.35.19-1 +- New upstream version 1.35.19. + +* Thu Dec 22 2016 Miro Hrončok - 1:1.35.18-3 +- Second rebuild for Python 3.6 + +* Mon Dec 19 2016 Miro Hrončok - 1:1.35.18-2 +- Rebuild for Python 3.6 + +* Thu Dec 15 2016 Richard W.M. Jones - 1:1.35.18-1 +- New upstream version 1.35.18. + +* Sun Dec 11 2016 Richard W.M. Jones - 1:1.35.17-1 +- New upstream version 1.35.17. + +* Mon Nov 14 2016 Richard W.M. Jones - 1:1.35.14-4 +- Use _isa macro on dependencies (except for noarch packages). + https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/QSQ7CWSFZ3CRHH7DDGAWVUCB2KFC3OWQ/ + +* Fri Nov 11 2016 Richard W.M. Jones - 1:1.35.14-3 +- Drop libguestfs-live-service subpackage. +- Remove setting _hardened_build since it is now the default in Fedora. +- Some tidying up of the description section. +- Require Augeas 1.7.0. + +* Sat Nov 05 2016 Richard W.M. Jones - 1:1.35.14-2 +- Rebuild for OCaml 4.04.0. + +* Wed Oct 26 2016 Richard W.M. Jones - 1:1.35.14-1 +- New upstream version 1.35.14. +- Add dbus-devel BR for virt-p2v. + +* Fri Oct 21 2016 Richard W.M. Jones - 1:1.35.9-1 +- New upstream version 1.35.9. + +* Fri Oct 21 2016 Richard W.M. Jones - 1:1.35.8-2 +- Add 'Suggests: perl' for virt-edit and virt-customize. + +* Wed Oct 12 2016 Richard W.M. Jones - 1:1.35.8-1 +- New upstream version 1.35.8. + +* Thu Oct 06 2016 Richard W.M. Jones - 1:1.35.6-2 +- Split off virt-p2v into virt-p2v-maker so it doesn't depend on X + (RHBZ#1382275). + +* Fri Sep 23 2016 Richard W.M. Jones - 1:1.35.6-1 +- New upstream version 1.35.6. + +* Mon Sep 12 2016 Richard W.M. Jones - 1:1.35.5-1 +- New upstream version 1.35.5. + +* Sat Sep 03 2016 Richard W.M. Jones - 1:1.35.4-1 +- New upstream version 1.35.4. + +* Thu Sep 01 2016 Richard W.M. Jones - 1:1.35.3-1 +- New upstream version 1.35.3. + +* Fri Aug 05 2016 Richard W.M. Jones - 1:1.33.49-1 +- New upstream version 1.33.49. + +* Wed Jul 27 2016 Richard W.M. Jones - 1:1.33.46-1 +- New upstream version 1.33.46. + +* Sat Jul 23 2016 Richard W.M. Jones - 1:1.33.45-1 +- New upstream version 1.33.45. + +* Tue Jul 19 2016 Richard W.M. Jones - 1:1.33.44-1 +- New upstream version 1.33.44. + +* Tue Jul 19 2016 Fedora Release Engineering - 1:1.33.43-3 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Fri Jul 15 2016 Richard W.M. Jones - 1:1.33.43-2 +- Fix missing dependency on policycoreutils. + +* Fri Jul 15 2016 Richard W.M. Jones - 1:1.33.43-1 +- New upstream version 1.33.43. + +* Wed Jul 13 2016 Richard W.M. Jones - 1:1.33.42-2 +- Don't install libtool wrapper scripts in benchmarking subpkg. + +* Sat Jul 09 2016 Richard W.M. Jones - 1:1.33.42-1 +- New upstream version 1.33.42. + +* Wed Jul 06 2016 Richard W.M. Jones - 1:1.33.41-1 +- New upstream version 1.33.41. + +* Fri Jul 01 2016 Richard W.M. Jones - 1:1.33.40-1 +- New upstream version 1.33.40. + +* Fri Jun 24 2016 Richard W.M. Jones - 1:1.33.39-1 +- New upstream version 1.33.39. + +* Tue Jun 21 2016 Richard W.M. Jones - 1:1.33.38-2 +- Bump release and rebuild. + +* Sun Jun 19 2016 Richard W.M. Jones - 1:1.33.38-1 +- New upstream version 1.33.38. + +* Fri Jun 17 2016 Richard W.M. Jones - 1:1.33.37-1 +- New upstream version 1.33.37. + +* Mon Jun 13 2016 Richard W.M. Jones - 1:1.33.36-1 +- New upstream version 1.33.36. + +* Mon Jun 06 2016 Richard W.M. Jones - 1:1.33.35-1 +- New upstream version 1.33.35. + +* Fri Jun 03 2016 Richard W.M. Jones - 1:1.33.34-1 +- New upstream version 1.33.34. +- Now building virt-p2v with gtk3 not gtk2. + +* Fri May 27 2016 Richard W.M. Jones - 1:1.33.32-1 +- New upstream version 1.33.32. + +* Mon May 23 2016 Richard W.M. Jones - 1:1.33.30-1 +- New upstream version 1.33.30. + +* Thu May 19 2016 Jitka Plesnikova - 1:1.33.29-2 +- Perl 5.24 re-rebuild of bootstrapped packages + +* Wed May 18 2016 Richard W.M. Jones - 1:1.33.29-1 +- New upstream version 1.33.29. + +* Tue May 17 2016 Jitka Plesnikova - 1:1.33.28-2 +- Perl 5.24 rebuild + +* Mon May 09 2016 Richard W.M. Jones - 1:1.33.28-1 +- New upstream version 1.33.28. + +* Wed May 04 2016 Richard W.M. Jones - 1:1.33.27-1 +- New upstream version 1.33.27. + +* Tue May 03 2016 Richard W.M. Jones - 1:1.33.26-1 +- New upstream version 1.33.26. + +* Sun May 01 2016 Richard W.M. Jones - 1:1.33.24-1 +- New upstream version 1.33.24. + +* Mon Apr 25 2016 Richard W.M. Jones - 1:1.33.23-1 +- New upstream version 1.33.23. + +* Fri Apr 15 2016 Richard W.M. Jones - 1:1.33.20-1 +- New upstream version 1.33.20. + +* Tue Apr 12 2016 Richard W.M. Jones - 1:1.33.19-2 +- New upstream version 1.33.19. +- Build python3 in a different directory. + +* Fri Apr 08 2016 Richard W.M. Jones - 1:1.33.18-5 +- Disable tests on 32 bit arm because of libvirt RHBZ#1325085. + +* Thu Apr 07 2016 Richard W.M. Jones - 1:1.33.18-4 +- Disable tests on POWER because of RHBZ#1293024. +- Enable tests on 32 bit arm because RHBZ#1303147 supposedly fixed. +- Explicitly depend on rubygem-rdoc, needed to build Ruby docs. + +* Tue Apr 05 2016 Richard W.M. Jones - 1:1.33.18-1 +- New upstream version 1.33.18. + +* Thu Mar 31 2016 Richard W.M. Jones - 1:1.33.16-2 +- Add code to verify tarball signatures (only enabled on stable branches). + +* Fri Mar 25 2016 Richard W.M. Jones - 1:1.33.16-1 +- New upstream version 1.33.16. + +* Thu Mar 17 2016 Richard W.M. Jones - 1:1.33.15-1 +- New upstream version 1.33.15. + +* Mon Mar 07 2016 Richard W.M. Jones - 1:1.33.14-1 +- New upstream version 1.33.14. + +* Fri Feb 26 2016 Richard W.M. Jones - 1:1.33.13-1 +- New upstream version 1.33.13. + +* Thu Feb 18 2016 Orion Poplawski - 1:1.33.12-2 +- Filter perl provides + +* Fri Feb 12 2016 Richard W.M. Jones - 1:1.33.12-1 +- New upstream version 1.33.12. + +* Wed Feb 10 2016 Richard W.M. Jones - 1:1.33.11-1 +- New upstream version 1.33.11. + +* Mon Feb 08 2016 Richard W.M. Jones - 1:1.33.10-2 +- New upstream version 1.33.10. +- Add non-upstream patch to fix 'ssh root@remote virt-xyz ...' + +* Fri Feb 05 2016 Richard W.M. Jones - 1:1.33.9-1 +- New upstream version 1.33.9. + +* Wed Feb 03 2016 Richard W.M. Jones - 1:1.33.8-1 +- New upstream version 1.33.8. + +* Fri Jan 29 2016 Richard W.M. Jones - 1:1.33.7-1 +- New upstream version 1.33.7. + +* Thu Jan 28 2016 Richard W.M. Jones - 1:1.33.6-1 +- New upstream version 1.33.6. + +* Tue Jan 26 2016 Richard W.M. Jones - 1:1.33.5-1 +- New upstream version 1.33.5. + +* Fri Jan 22 2016 Richard W.M. Jones - 1:1.33.4-1 +- New upstream version 1.33.4. +- Add guestfs-building(1), new man page. + +* Thu Jan 21 2016 Richard Jones - 1:1.33.1-3 +- Remove useless python*_site* macros. +- Package python3 pyo files if present. + +* Sat Jan 16 2016 Richard Jones - 1:1.33.1-2 +- Rebuild for updated Ruby in Rawhide. + +* Mon Jan 11 2016 Richard W.M. Jones - 1:1.33.1-1 +- New upstream version 1.33.1. + +* Thu Jan 07 2016 Richard W.M. Jones - 1:1.33.0-1 +- New upstream development version 1.33.0. + +* Wed Dec 16 2015 Richard W.M. Jones - 1:1.31.30-1 +- New upstream version 1.31.30. + +* Sun Dec 06 2015 Richard W.M. Jones - 1:1.31.29-1 +- New upstream version 1.31.29. + +* Wed Nov 25 2015 Richard W.M. Jones - 1:1.31.28-1 +- New upstream version 1.31.28. + +* Fri Nov 20 2015 Richard W.M. Jones - 1:1.31.27-1 +- New upstream version 1.31.27. +- Add new tool: virt-v2v-copy-to-local. + +* Sat Nov 14 2015 Richard W.M. Jones - 1:1.31.26-1 +- New upstream version 1.31.26. + +* Wed Nov 11 2015 Richard W.M. Jones - 1:1.31.25-3 +- Drop __pycache__/*.pyo files, as these are not generated by python 3.5. + +* Tue Nov 10 2015 Fedora Release Engineering - 1:1.31.25-2 +- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 + +* Fri Nov 06 2015 Richard W.M. Jones - 1:1.31.25-1 +- New upstream version 1.31.25. + +* Fri Nov 06 2015 Richard W.M. Jones - 1:1.31.24-2 +- Rename python-libguestfs -> python2-libguestfs. + See: https://fedoraproject.org/wiki/Packaging:Python + +* Thu Nov 05 2015 Richard W.M. Jones - 1:1.31.24-1 +- New upstream version 1.31.24. + +* Sat Oct 31 2015 Richard W.M. Jones - 1:1.31.23-1 +- New upstream version 1.31.23. + +* Fri Oct 30 2015 Richard W.M. Jones - 1:1.31.22-1 +- New upstream version 1.31.22. +- Add new manual pages guestfs-{hacking,internals,security}(1). + +* Sun Oct 25 2015 Richard W.M. Jones - 1:1.31.20-1 +- New upstream version 1.31.20. +- Perl bindings switched from ExtUtils::MakeMaker to Module::Build. + +* Wed Oct 21 2015 Richard W.M. Jones - 1:1.31.19-1 +- New upstream version 1.31.19. + +* Tue Oct 20 2015 Richard W.M. Jones - 1:1.31.18-1 +- New upstream version 1.31.18. + +* Thu Oct 15 2015 Richard W.M. Jones - 1:1.31.17-1 +- New upstream version 1.31.17. + +* Tue Oct 13 2015 Richard W.M. Jones - 1:1.31.16-2 +- Add hack to supermin to get builds working temporarily. + +* Fri Oct 09 2015 Richard W.M. Jones - 1:1.31.16-1 +- New upstream version 1.31.16. + +* Fri Oct 09 2015 Richard W.M. Jones - 1:1.31.15-1 +- New upstream version 1.31.15. + +* Wed Oct 07 2015 Richard W.M. Jones - 1:1.31.13-1 +- New upstream version 1.31.13. + +* Tue Oct 06 2015 Richard W.M. Jones - 1:1.31.11-2 +- BR ocamldoc so that we build the OCaml documentation. + +* Mon Oct 05 2015 Richard W.M. Jones - 1:1.31.11-1 +- New upstream version 1.31.11. + +* Thu Oct 01 2015 Richard W.M. Jones - 1:1.31.9-4 +- New upstream version 1.31.9. +- Include patch which fixes 'make install' in OCaml directory. +- Switch to using RPM autopatch directive. +- Fix a few RPM "macro expanded in comment" warnings. +- Include OCaml bindings documentation in ocaml-libguestfs-devel package. +- Add opensuse virt-builder files. + +* Tue Sep 29 2015 Richard W.M. Jones - 1:1.31.8-1 +- New upstream version 1.31.8. + +* Mon Sep 21 2015 Richard W.M. Jones - 1:1.31.7-2 +- Remove tests, except sanity check. Testing is now done after the + package has been built. + +* Sun Sep 20 2015 Richard W.M. Jones - 1:1.31.7-1 +- New upstream version 1.31.7. + +* Sat Sep 12 2015 Richard W.M. Jones - 1:1.31.6-1 +- New upstream version 1.31.6. + +* Tue Sep 08 2015 Richard W.M. Jones - 1:1.31.5-1 +- New upstream version 1.31.5. + +* Fri Sep 04 2015 Richard W.M. Jones - 1:1.31.4-1 +- New upstream version 1.31.4. + +* Sat Aug 29 2015 Richard W.M. Jones - 1:1.31.3-1 +- New upstream version 1.31.3. +- Disable tests on armv7 because they take nearly 24 hours to run. + +* Thu Aug 13 2015 Richard W.M. Jones - 1:1.31.2-1 +- New upstream version 1.31.2. +- Enable tests on i686, arm and aarch64. +- Remove patch which is now upstream. + +* Fri Aug 7 2015 Pino Toscano - 1:1.31.1-3 +- Make libguestfs-tools-c recommend libguestfs-xfs, as the default filesystem + is XFS so we want tools to work on XFS by default. +- Remove version suffix from the docdir mentioned in the installed README. + +* Sun Aug 2 2015 Richard W.M. Jones - 1:1.31.1-2 +- Skip virt-sysprep test. + +* Fri Jul 31 2015 Richard W.M. Jones - 1:1.31.1-1 +- New upstream version 1.31.1. + +* Tue Jul 28 2015 Richard W.M. Jones - 1:1.30.0-2 +- OCaml 4.02.3 rebuild. + +* Tue Jul 21 2015 Richard W.M. Jones - 1:1.30.0-1 +- New upstream version 1.30.0. + +* Thu Jul 09 2015 Richard W.M. Jones - 1:1.29.50-1 +- New upstream version 1.29.50. +- Add virt-dib. + +* Thu Jul 02 2015 Richard W.M. Jones - 1:1.29.49-1 +- New upstream version 1.29.49. + +* Tue Jun 30 2015 Richard W.M. Jones - 1:1.29.48-1 +- New upstream version 1.29.48. + +* Thu Jun 18 2015 Richard W.M. Jones - 1:1.29.47-2 +- Bump release and rebuild. + +* Thu Jun 18 2015 Richard W.M. Jones - 1:1.29.47-1 +- New upstream version 1.29.47. - New tool: virt-get-kernel. -- Depend on java-headless instead of full java. -- New tool: virt-v2v-copy-to-local. -- Disable virt-v2v subpackage on ppc64 etc - resolves: rhbz#1287826 -- v2v: Remove VirtualBox Additions correctly - resolves: rhbz#1296606 -- Add clearer warnings sections to all man pages - resolves: rhbz#1293527 -- v2v: Disable the --in-place option. -- v2v: Support conversion of Windows > 7 - resolves: rhbz#1190669 -- Add code to verify tarball signatures. -- General performance improvements. -- v2v: Prevent duplicate -b, -n, -oa options - resolves: rhbz#1326266 - resolves: rhbz#1325825 -- v2v: Unquote UUID and LABEL in fstab (util-linux 1335671) -- v2v: Fix alignment issues in treeviews in conversion dialog - resolves: rhbz#1340407 -- p2v: spinner should be hidden when it stops spinning - resolves: rhbz#1341564 -- p2v: ethtool command is not supported on p2v client - resolves: rhbz#1341608 -- p2v: Add ifconfig command to ISO - resolves: rhbz#1342447 -- p2v: Warn if virt-p2v-make-disk used on a partition - resolves: rhbz#1342337 -- Build using OCaml with fix for CVE-2015-8869. - resolves: rhbz#1343101 -- customize: Add --uninstall option (upstream 1343375) -- p2v: Document permissions on id_rsa file - resolves: rhbz#1343414 -- p2v: Print full curl error message - resolves: rhbz#1343423 -- get-kernel: Fix --format auto - resolves: rhbz#1341984 -- v2v: Provide better information to RHEV-M - resolves: rhbz#1342398 -- customize: Give an error if --truncate-recursive path does not exist - resolves: rhbz#1345809 -- sysprep: Add --network option so that --install option can be used - resolves: rhbz#1345813 -- p2v: Print proper error if incorrect password is given - resolves: rhbz#1227599 -- p2v: Print ssh error if incorrect hostname is given - resolves: rhbz#1167916 -- p2v: Display progress of operation in non-GUI mode - resolves: rhbz#1229386 -- p2v: Add a dialog confirming the user really means to cancel - resolves: rhbz#1340464 -- p2v: log window should process colour escapes and backspaces - resolves: rhbz#1314244 -- v2v: Fix installation of virtio drivers with *.dll files - resolves: rhbz#1311373 -- p2v: Improve error message when ssh login to conversion server fails - resolves: rhbz#1348900 -- v2v: Remove --dcpath parameter from manual - resolves: rhbz#1315237 -- v2v: Fix conversion of guests with floppy drives - resolves: rhbz#1309706 -- p2v: Better error when sudo requires a password - resolves: rhbz#1340809 -- v2v: Refuse to convert if there is < 1GB free in temporary directory - resolves: rhbz#1316479 -- inspection: Get Windows drive letters for GPT disks - resolves: rhbz#1349237 -- p2v: Add disk utils and display serial number of disks - resolves: rhbz#855058 -- p2v: Fix timeout error when connecting to unresponsive ssh server - resolves: rhbz#1350363 +- Skip xfs_admin tests because of RHBZ#1233220. + +* Wed Jun 17 2015 Richard W.M. Jones - 1:1.29.46-4 +- ocaml-4.02.2 rebuild. + +* Wed Jun 17 2015 Fedora Release Engineering - 1:1.29.46-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Tue Jun 09 2015 Jitka Plesnikova - 1:1.29.46-2 +- Perl 5.22 rebuild + +* Sun Jun 07 2015 Richard W.M. Jones - 1:1.29.46-1 +- New upstream version 1.29.46. + +* Sat Jun 06 2015 Jitka Plesnikova - 1:1.29.44-2 +- Perl 5.22 rebuild + +* Thu May 28 2015 Richard W.M. Jones - 1:1.29.44-1 +- New upstream version 1.29.44. + +* Tue May 19 2015 Richard W.M. Jones - 1:1.29.43-2 +- Remove several test SKIP_* variables related to bugs which have + since been fixed. + +* Sat May 16 2015 Richard W.M. Jones - 1:1.29.43-1 +- New upstream version 1.29.43. + +* Thu May 14 2015 Richard W.M. Jones - 1:1.29.42-1 +- New upstream version 1.29.42. + +* Mon May 11 2015 Richard W.M. Jones - 1:1.29.41-1 +- New upstream version 1.29.41. + +* Thu May 07 2015 Richard W.M. Jones - 1:1.29.40-2 +- Add workaround for builder/index-parse.c autotools race. + +* Wed May 06 2015 Richard W.M. Jones - 1:1.29.40-1 +- New upstream version 1.29.40. + +* Sun May 03 2015 Richard W.M. Jones - 1:1.29.39-1 +- New upstream version 1.29.39. + +* Tue Apr 28 2015 Richard W.M. Jones - 1:1.29.38-1 +- New upstream version 1.29.38. + +* Fri Apr 24 2015 Richard W.M. Jones - 1:1.29.37-1 +- New upstream version 1.29.37. + +* Mon Apr 20 2015 Richard W.M. Jones - 1:1.29.36-2 +- Remove deprecated programs: virt-list-partitions, virt-list-filesystems, + virt-tar (RHBZ#1213298). + +* Thu Apr 16 2015 Richard W.M. Jones - 1:1.29.36-1 +- New upstream version 1.29.36. + +* Fri Apr 10 2015 Richard W.M. Jones - 1:1.29.34-1 +- New upstream version 1.29.34. +- Drop the virt-v2v test harness subpackage. + +* Wed Apr 01 2015 Richard W.M. Jones - 1:1.29.33-2 +- New upstream version 1.29.33. + +* Fri Mar 27 2015 Richard W.M. Jones - 1:1.29.32-1 +- New upstream version 1.29.32. + +* Tue Mar 24 2015 Richard W.M. Jones - 1:1.29.31-2 +- New upstream version 1.29.31. +- Remove upstream patches. + +* Fri Mar 20 2015 Richard W.M. Jones - 1:1.29.30-5 +- More upstream patches to fix virt-v2v test harness. +- Do not delete OCaml *.a files, including ones in the virt-v2v test harness. + +* Sun Mar 15 2015 Richard W.M. Jones - 1:1.29.30-4 +- Enable golang on various arches. + +* Thu Mar 12 2015 Richard W.M. Jones - 1:1.29.30-3 +- Add virt-v2v-test-harness subpackage. +- Add a couple of upstream patches to fix the virt-v2v test harness. - Remove external dependency generator. Use supermin RPM deps instead. - related: rhbz#1309796 -- p2v: Flush messages to the journal immediately - resolves: rhbz#1229386 -- customize: Fix --install on ppc64le - resolves: rhbz#1264835 -- lib: Fix finding icons in Windows 7 64 bit guests - resolevs: rhbz#1352761 -- v2v: Add virsh --quiet flag when running virt-v2v --quiet - resolves: rhbz#1358142 -- lib: Fix inspection of ISOs with latest libosinfo - resolves: rhbz#1359652 -- dib: Fix run_command exit handlers on failure - resolves: rhbz#1362357 -- dib: Rework run of extra-data.d hooks - resolves: rhbz#1362354 -- Miscellaneous fixes to man pages and --help output - resolves: rhbz#1362668 -- lib: Specify backing format for read-only files - resolves: rhbz#1354335 -- Fix --selinux-relabel option - resolves: rhbz#1362669 -- sparsify: Fix --in-place option with UEFI guest - resolves: rhbz#1364347 -- p2v: Use latest linux-firmware in ISO - resolves: rhbz#1364419 -- v2v: Fix guest name when using -i disk - resolves: rhbz#1365005 -- p2v: Fix GUI message. -- v2v: Make fstrim message clearer - resolves: rhbz#1366456 -- v2v: Fix conversion of UEFI guests when Secure Boot OVMF installed - resolves: rhbz#1367615 -- lib: Fix assert-fail if port is missing in libvirt XML - resolves: rhbz#1370424 +- Depend on fuse (for testing with fusermount etc) (RHBZ#1201507). -* Mon Sep 14 2015 Richard W.M. Jones - 1:1.28.1-1.55 -- Fix previous commit by applying the patch this time (1243493) +* Wed Mar 11 2015 Richard W.M. Jones - 1:1.29.30-1 +- New upstream version 1.29.30. -* Sun Sep 13 2015 Richard W.M. Jones - 1:1.28.1-1.54 -- v2v: Permit libguestfs-winsupport to be used by virt-win-reg and - virt-inspector (1243493) +* Thu Mar 5 2015 Richard W.M. Jones - 1:1.29.29-1 +- New upstream version 1.29.29. -* Thu Sep 10 2015 Richard W.M. Jones - 1:1.28.1-1.53 -- v2v: Error if certain options appear twice on the command line (1261242) -- v2v: Add --dcpath parameter to allow dcPath to be overridden (1256823) -- v2v: Partially revert: Fix OVF XML to enable qxl display (1260590) -- v2v: Detect AVG Technologies as AV software (1261436) - resolves: rhbz#1261281 +* Mon Mar 2 2015 Richard W.M. Jones - 1:1.29.26-3 +- Add new subpackage libguestfs-inspect-icons (RHBZ#1194158). +- Remove dependency on uml_utilities, since UML is currently broken. +- Speed python3 build by copying over the generator pod2text cache and + disabling non-Python language bindings. +- Disable mdadm test because of mdadm hangs (RHBZ#1197305). -* Tue Sep 8 2015 Richard W.M. Jones - 1:1.28.1-1.52 -- v2v: Warn if Group Policy or AV software may result in 7B boot failure - (1260689) -- v2v: Fix OVF XML to enable qxl display - resolves: rhbz#1260590 +* Wed Feb 18 2015 Richard W.M. Jones - 1:1.29.26-1 +- New upstream version 1.29.26. +- ocaml-4.02.1 rebuild. -* Tue Sep 1 2015 Richard W.M. Jones - 1:1.28.1-1.51 -- v2v: Fix handling of extra slashes in dcPath calculation - resolves: rhbz#1258342 rhbz#1256823 -- v2v: Fix -oa preallocation option - resolves: rhbz#1251909 +* Thu Feb 12 2015 Richard W.M. Jones - 1:1.29.25-1 +- New upstream version 1.29.25. +- Remove patches which are now upstream. -* Sun Aug 30 2015 Richard W.M. Jones - 1:1.28.1-1.50 -- v2v: - * When debugging, dump OVF to stderr. - * Ignore missing kernels from grub - resolves: rhbz#1230412 - * Calculate VMware dcPath correctly (1256823) - * Map empty VMware network or bridge name to default (1257895) -- p2v: - * Wait for network to come online before testing connection - resolves: rhbz#1256222 -- Fix tests to run correctly with libguestfs-winsupport 7.2. +* Thu Feb 05 2015 Richard W.M. Jones - 1:1.29.24-3 +- Upstream patch to fix virt-resize/virt-builder on aarch64 (RHBZ#1189284). -* Wed Aug 05 2015 Richard W.M. Jones - 1:1.28.1-1.49 -- p2v: Closing incoming ports on the virt-p2v ISO - resolves: rhbz#1248678 +* Wed Feb 04 2015 Richard W.M. Jones - 1:1.29.24-2 +- Upstream patch to fix performance regression in virt-builder (RHBZ#1188866). +- Change the way Python double-build is done so we only have to + apply patches in one place. -* Tue Jul 28 2015 Richard W.M. Jones - 1:1.28.1-1.48 -- v2v: Include lsof in base appliance - resolves: rhbz#1246032 +* Tue Feb 03 2015 Richard W.M. Jones - 1:1.29.24-1 +- New upstream version 1.29.24. +- Add Python 3 bindings. +- Disable btrfs-qgroup-show test. -* Thu Jul 23 2015 Richard W.M. Jones - 1:1.28.1-1.47 -- v2v: Work around 'umount: /sysroot: target is busy' - resolves: rhbz#1246032 -- v2v: Permit libguestfs-winsupport to be used by virt-win-reg and - virt-inspector - resolves: rhbz#1243493 +* Tue Jan 27 2015 Richard W.M. Jones - 1:1.29.23-1 +- New upstream version 1.29.23. -* Tue Jul 7 2015 Richard W.M. Jones - 1:1.28.1-1.46 -- v2v: Refuse to convert Windows > 7 - reverts: rhbz#1190669 -- v2v: Depend directly on libguestfs-xfs - resolves: rhbz#1240275 -- v2v: Inclusion of libguestfs-winsupport in RHEL 7.2 - resolves: rhbz#1240274, rhbz#1240276 +* Thu Jan 22 2015 Richard W.M. Jones - 1:1.29.22-2 +- New upstream version 1.29.22. +- BR ounit (will be required for building >= 1.29.23). +- Disable FUSE tests because of a bug in Rawhide. -* Mon Jul 6 2015 Richard W.M. Jones - 1:1.28.1-1.44 -- v2v: Fix error message when grub.conf is malformed - resolves: rhbz#1239053 -- v2v: Various fixes to conversion of UEFI systems - resolves: rhbz#1184690 +* Mon Jan 19 2015 Richard W.M. Jones - 1:1.29.20-2 +- Bump release for f22-ruby. -* Thu Jul 2 2015 Richard W.M. Jones - 1:1.28.1-1.43 -- virt-sysprep: Don't delete /var/spool/at/.SEQ - resolves: rhbz#1238579 +* Sun Jan 18 2015 Richard W.M. Jones - 1:1.29.20-1 +- New upstream version 1.29.20. +- Rebuild upstream with automake 1.15. +- Add upstream patch to allow LVM test to be skipped. +- Add upstream patch which fixes LUA 5.3 (beta) in Rawhide. +- Skip a couple of tests which are broken by changes in Rawhide. +- Remove bogus daemon/m4 directory which has not existed for years. -* Wed Jul 1 2015 Richard W.M. Jones - 1:1.28.1-1.42 -- v2v: Fix installation of virtio drivers in Windows 2008 and 2008 R2 - resolves: rhbz#1237869 - related: rhbz#1234351 +* Tue Dec 23 2014 Richard W.M. Jones - 1:1.29.19-1 +- New upstream version 1.29.19. -* Tue Jun 30 2015 Richard W.M. Jones - 1:1.28.1-1.41 -- v2v: Extend the timeout when converting from VMware - resolves: rhbz#1146007 -- v2v: Fix memory safety when freeing libxml2 objects. -- v2v: Add comment to OVF output if actual_size field is estimated. +* Tue Dec 16 2014 Richard W.M. Jones - 1:1.29.18-1 +- New upstream version 1.29.18. -* Thu Jun 25 2015 Richard W.M. Jones - 1:1.28.1-1.40 -- v2v: Disable support for Windows > 7. - reverts: rhbz#1190669 -- v2v: Add support for getting drivers from virtio-win ISO - resolves: rhbz#1234351 +* Tue Dec 16 2014 Richard W.M. Jones - 1:1.29.17-1 +- New upstream version 1.29.17. -* Tue Jun 16 2015 Richard W.M. Jones - 1:1.28.1-1.39 -- v2v: Depend on qemu-kvm instead of qemu-kvm-rhev (except on aarch64/power). -- v2v: Don't fail if one of the input disks is blank - resolves: rhbz#1232192 -- p2v: Fix parsing of p2v.memory parameter (1229262). +* Thu Dec 11 2014 Richard W.M. Jones - 1:1.29.14-1 +- New upstream version 1.29.14. -* Tue Jun 09 2015 Richard W.M. Jones - 1:1.28.1-1.38 -- p2v: Set conversion status when conversion is cancelled - resolves: rhbz#1226794 -- p2v: Fix kernel command line parsing - resolves: rhbz#1229340 -- p2v: In command line mode, power off machine after conversion - resolves: rhbz#1229385 -- Fix for rebased systemd in RHEL 7.2. +* Fri Dec 05 2014 Richard W.M. Jones - 1:1.29.13-1 +- New upstream version 1.29.13. -* Fri May 29 2015 Richard W.M. Jones - 1:1.28.1-1.37 -- ppc64le: Rebuild with fixed OCaml compiler - resolves: rhbz#1224676, rhbz#1224675 -- Fix virt-sparsify on qcow2 files when using qemu-kvm - resolves: rhbz#1225467 -- Remove some perl dependencies which are no longer actually used. -- Further attempts to fix qemu-kvm dependency on aarch64, ppc64le - resolves: rhbz#1177910 +* Sat Nov 29 2014 Richard W.M. Jones - 1:1.29.12-1 +- New upstream version 1.29.12. -* Tue May 19 2015 Richard W.M. Jones - 1:1.28.1-1.36 -- p2v: Fix network in virt-p2v appliance - resolves: rhbz#1222975 -- p2v: Display network card MAC and vendor in conversion dialog (855059). -- p2v: More fixes to Add Network Connection dialog - related: rhbz#1167921 -- virt-builder: Fix --selinux-relabel flag on cross-arch builds - resolves: rhbz#1222993 +* Thu Nov 27 2014 Richard W.M. Jones - 1:1.29.11-1 +- New upstream version 1.29.11. -* Tue May 12 2015 Richard W.M. Jones - 1:1.28.1-1.35 -- Further attempts to fix qemu-kvm dependency on aarch64, ppc64, ppc64le - resolves: rhbz#1177910 -- v2v: Fix memory leak in earlier fix for bug 889082 - resolves: rhbz#889082 +* Tue Nov 25 2014 Richard W.M. Jones - 1:1.29.10-1 +- New upstream version 1.29.10. -* Mon May 11 2015 Richard W.M. Jones - 1:1.28.1-1.33 -- p2v: Add restrictions for vCPUs and memory in client - resolves: rhbz#823758 -- v2v: Check if guest with same name already exists in libvirt - resolves: rhbz#889082 -- p2v: Add Network Connection dialog - resolves: rhbz#1167921 -- v2v: Fix list of operating system variants passed to RHEV - resolves: rhbz#1219857, rhbz#1213324, rhbz#1213691 -- ppc64: Remove part of temporary workaround - related: rhbz#1177910 +* Fri Nov 21 2014 Richard W.M. Jones - 1:1.29.9-1 +- New upstream version 1.29.9. -* Thu Apr 30 2015 Richard W.M. Jones - 1:1.28.1-1.32 -- v2v: Support conversion of EFI guests - resolves: rhbz#1184690 +* Tue Nov 18 2014 Richard W.M. Jones - 1:1.29.8-1 +- New upstream version 1.29.8. -* Tue Apr 28 2015 Richard W.M. Jones - 1:1.28.1-1.31 -- v2v: Keep listen address for VNC (updated fix) - resolves: rhbz#1174073 +* Sat Nov 15 2014 Richard W.M. Jones - 1:1.29.7-1 +- New upstream version 1.29.7. -* Fri Apr 24 2015 Richard W.M. Jones - 1:1.28.1-1.29 -- v2v: Convert sound card of guests - resolves: rhbz#1176493 +* Fri Nov 07 2014 Richard W.M. Jones - 1:1.29.6-1 +- New upstream version 1.29.6. +- Remove patch which is now upstream. -* Mon Apr 20 2015 Richard W.M. Jones - 1:1.28.1-1.28 -- Remove 'ssh:' URLs from documentation - resolves: rhbz#1212677 -- libguestfs-tools-c 'provides' guestfish - (NB: will be removed in RHEL 8, use 'Requires: /usr/bin/guestfish' instead) - resolves: rhbz#1212002 -- v2v: Fix: warning: unknown guest operating system: windows when converting - to RHEV targets - resolves: rhbz#1213324 -- v2v: Fix: warning: fstrim: fstrim: /sysroot/: FITRIM ioctl failed - resolves: rhbz#1168144 +* Wed Nov 05 2014 Richard W.M. Jones - 1:1.29.5-1 +- New upstream version 1.29.5. -* Thu Apr 16 2015 Richard W.M. Jones - 1:1.28.1-1.26 -- v2v: Keep listen address for VNC - resolves: rhbz#1174073 -- v2v: Preserve display port configuration when converting guests -- v2v: Support conversion of guests with disk type volume - resolves: rhbz#1146832 -- v2v: Initial support for gzipped ova imports. - related: rhbz#1186800 +* Wed Nov 5 2014 Richard W.M. Jones - 1:1.29.4-2 +- configure: Don't override upstream's qemu selection. -* Mon Apr 13 2015 Richard W.M. Jones - 1:1.28.1-1.25 -- Enable rbd (Ceph) support. -- rbd: Implement drive secrets - resolves: rhbz#1159030 -- virt-resize: Fix 'no space left on device' when resizing extended partition - resolves: rhbz#1172660 -- v2v: Update RHEV-APT to latest - resolves: rhbz#1186850 -- v2v: Update rhsrvany.exe to latest - resolves: rhbz#1187231 -- Drop dependency on selinux-policy - resolves: rhbz#1196705 -- Depend on fuse - resolves: rhbz#1201507 -- v2v: Allow configurable location for virtio drivers [1209225] -- Various fixes for setting long labels - resolves: rhbz#1164708 -- Fix mknod APIs not stripping permission bits from mode - resolves: rhbz#1182463 -- Allow LIBGUESTFS_TRACE=0, LIBGUESTFS_DEBUG=true etc - resolves: rhbz#1175196 -- Fix typo in description of ping-daemon API - resolves: rhbz#1175676 -- Disable gfs2 subpackage on !x86-64 [1211333] +* Fri Oct 31 2014 Richard W.M. Jones - 1:1.29.4-1 +- New upstream version 1.29.4. -* Mon Apr 13 2015 Richard W.M. Jones - 1:1.28.1-1.24 -- Open RHEL 7.2 branch. -- Import brew-overrides.sh into dist-git. -- copy-patches.sh: Relax arbitrary requirement to split patches into - backports and RHEL 7 specific patches. -- v2v: Add --vdsm-ovf-output option - resolves: rhbz#1176598 -- v2v: Fix -o vdsm to work with multiple data domains - resolves: rhbz#1176591 -- v2v: Support conversions of Windows >= 8 - resolves: rhbz#1190669 -- v2v: Document that vCenter >= 5.0 is required - resolves: rhbz#1174200 +* Fri Oct 31 2014 Richard W.M. Jones - 1:1.29.3-1 +- New upstream version 1.29.3. -* Thu Feb 5 2015 Richard W.M. Jones - 1:1.28.1-1.23 -- Fix virt-resize (and hence virt-builder --size) on guests using - UEFI bootloaders. +* Sat Oct 25 2014 Richard W.M. Jones - 1:1.29.2-1 +- New upstream version 1.29.2. -* Mon Jan 26 2015 Richard W.M. Jones - 1:1.28.1-1.22 -- aarch64: Increase default appliance memory size. -- Make gfs2-utils conditional on x86, as it will not be supported on ARM. -- inspection: aarch64: Backport fix for inspection of EFI guests. +* Wed Oct 22 2014 Richard W.M. Jones - 1:1.29.1-1 +- New upstream version 1.29.1. -* Fri Jan 23 2015 Richard W.M. Jones - 1:1.28.1-1.20 -- aarch64: Depend on AAVMF package. +* Fri Oct 17 2014 Richard W.M. Jones - 1:1.27.64-1 +- New upstream version 1.27.64. -* Thu Jan 22 2015 Richard W.M. Jones - 1:1.28.1-1.19 -- aarch64: Add support for AAVMF - resolves: rhbz#1184504 +* Thu Oct 16 2014 Richard W.M. Jones - 1:1.27.63-1 +- New upstream version 1.27.63. -* Mon Dec 15 2014 Richard W.M. Jones - 1:1.28.1-1.18 -- v2v: Copy graphics password from source to destination - resolves: rhbz#1174123 -- p2v: Allow ports to be reused and specify source port number - resolves: rhbz#1167774 -- p2v: Fix "Conversion was successful" dialog appearing on failure - resolves: rhbz#1167601 +* Fri Oct 10 2014 Richard W.M. Jones - 1:1.27.62-1 +- New upstream version 1.27.62. -* Wed Dec 10 2014 Richard W.M. Jones - 1:1.28.1-1.17 -- v2v: Fix modifications to default kernel for legacy grub. - resolves: rhbz#1170073 +* Thu Oct 09 2014 Richard W.M. Jones - 1:1.27.61-1 +- New upstream version 1.27.61. -* Mon Dec 8 2014 Richard W.M. Jones - 1:1.28.1-1.16 -- p2v: Wait for qemu-nbd to start up before starting virt-v2v - resolves: rhbz#1167774 +* Wed Oct 08 2014 Richard W.M. Jones - 1:1.27.60-1 +- New upstream version 1.27.60. -* Fri Dec 5 2014 Richard W.M. Jones - 1:1.28.1-1.15 -- v2v: Document Windows Group Policy problems causing 0x0000007B BSOD - resolves: rhbz#1161333 -- v2v: Fix conversion of RHEL 3 guests - resolves: rhbz#1171130 -- v2v: Fix conversion of RHEL 4 guests that use epoch - resolves: rhbz#1170685 -- v2v: Favour non-debug kernels over debug kernels - resolves: rhbz#1170073 -- p2v: Fix kickstart for virt-p2v - resolves: rhbz#1168632 -- Fixed some documentation mistakes. +* Thu Oct 02 2014 Richard W.M. Jones - 1:1.27.58-1 +- New upstream version 1.27.58. -* Thu Nov 27 2014 Richard W.M. Jones - 1:1.28.1-1.14 -- p2v: Add Reboot button to the GUI - resolves: rhbz#1165564 -- p2v: Fixes to 'Cancel Conversion' button - resolves: rhbz#1165569 -- v2v: -i ova: Remove incorrect warning for disks with no parent controller - resolves: rhbz#1167302 -- resize: Capture errors from ntfsresize - resolves: rhbz#1166618 +* Wed Oct 01 2014 Richard W.M. Jones - 1:1.27.57-1 +- New upstream version 1.27.57. -* Thu Nov 20 2014 Richard W.M. Jones - 1:1.28.1-1.13 -- v2v: Fix device mapping of /boot/grub2/device.map - resolves: rhbz#1165975 -- v2v: Fix 'no volume groups found' because of old LVM cache file - resolves: rhbz#1164853 +* Tue Sep 30 2014 Richard W.M. Jones - 1:1.27.56-1 +- New upstream version 1.27.56. -* Tue Nov 18 2014 Richard W.M. Jones - 1:1.28.1-1.12 -- v2v: Fix device remapping for RHEL guests - resolves: rhbz#1151725 +* Sat Sep 27 2014 Richard W.M. Jones - 1:1.27.55-1 +- New upstream version 1.27.55. -* Mon Nov 17 2014 Richard W.M. Jones - 1:1.28.1-1.11 -- Fix inspect-get-icon on RHEL 7 guests - resolves: rhbz#1164619 -- Fix description of set-append (append) and get-append commands - resolves: rhbz#1164732 -- Fix small typo in release notes. - resolves: rhbz#1164697 +* Wed Sep 24 2014 Richard W.M. Jones - 1:1.27.54-1 +- New upstream version 1.27.54. -* Thu Nov 13 2014 Richard W.M. Jones - 1:1.28.1-1.10 -- v2v: -o glance: Fix metadata for disk type and NIC - resolves: rhbz#1161575 -- check xfs label lengths - resolves: rhbz#1162966 +* Tue Sep 23 2014 Richard W.M. Jones - 1:1.27.53-1 +- New upstream version 1.27.53. -* Thu Nov 6 2014 Richard W.M. Jones - 1:1.28.1-1.9 -- v2v: Fix kernel detection when multiple kernels are installed - resolves: rhbz#1161250 +* Fri Sep 19 2014 Richard W.M. Jones - 1:1.27.50-1 +- New upstream version 1.27.50. -* Thu Nov 6 2014 Richard W.M. Jones - 1:1.28.1-1.8 -- p2v: Explain in the man page why the virt-p2v ISO is used. -- p2v: Ensure we are using virt-v2v >= 1.28. -- v2v: Add bounds check to Xml.xpathobj_node function. -- v2v: Ensure --bridge and --network args are documented correctly in --help -- v2v: -i libvirt vcenter: Change 'esx:' to 'vcenter:' in errors/warnings. -- v2v: Ignore small filesystems when checking for sufficient free space. -- v2v: Document minimum free filesystem space requirements. - related: rhbz#1021149 -- customize: firstboot: make sure to run Linux scripts only once - resolves: rhbz#1160043 -- customize: firstboot: fix Linux log output - resolves: rhbz#1160199 +* Thu Sep 18 2014 Richard W.M. Jones - 1:1.27.49-1 +- New upstream version 1.27.49. +- Fix guestfish colour prompts when using white-on-black terminal (RHBZ#1144201). -* Mon Nov 3 2014 Richard W.M. Jones - 1:1.28.1-1.7 -- guestfish: Fix tab completion of filenames on XFS and elsewhere - resolves: rhbz#1153844 -- v2v: Ensure are set in output so ACPI etc works - resolves: rhbz#1159258 -- v2v: Add --password-file parameter - resolves: rhbz#1158526 +* Wed Sep 17 2014 Richard W.M. Jones - 1:1.27.48-1 +- New upstream version 1.27.48. -* Wed Oct 29 2014 Richard W.M. Jones - 1:1.28.1-1.6 -- p2v: Add firmware and usb-storage module to virt-p2v-make-disk. - resolves: rhbz#1157691 +* Tue Sep 16 2014 Richard W.M. Jones - 1:1.27.47-1 +- New upstream version 1.27.47. -* Fri Oct 24 2014 Richard W.M. Jones - 1:1.28.1-1.5 -- virt-sysprep & virt-customize: Fix password setting problems - resolves: rhbz#1141626, rhbz#1147065 -- virt-inspector: document that -a option can take a URI - resolves: rhbz#1156301 -- bash-completion: use symlinks instead of copying files - resolves: rhbz#1156298 +* Mon Sep 15 2014 Richard W.M. Jones - 1:1.27.46-1 +- New upstream version 1.27.46. -* Thu Oct 23 2014 Richard W.M. Jones - 1:1.28.1-1.4 -- v2v: Fix handling of relative paths in -i ova - resolves: rhbz#1155121 -- v2v: disable uninstallation of VMware drivers on Linux for RHEL 7.1 - resolves: rhbz#1155610 +* Sun Sep 14 2014 Richard W.M. Jones - 1:1.27.45-1 +- New upstream version 1.27.45. -* Wed Oct 22 2014 Richard W.M. Jones - 1:1.28.1-1.3 -- v2v: Fix conversion from NBD sources - resolves: rhbz#1153589 -- v2v: BR zip and unzip, and require unzip, for ZIP support in -i ova mode - related: rhbz#1152998 +* Sat Sep 13 2014 Richard W.M. Jones - 1:1.27.44-1 +- New upstream version 1.27.44. -* Mon Oct 20 2014 Richard W.M. Jones - 1:1.28.1-1.2 -- v2v: Add support for ZIP and *.vmdk.gz to -i ova - resolves: rhbz#1152998 -- virt-ls: Add a field for directory files when using --csv option - resolves: rhbz#1151900 -- v2v: Mitigate hangs when run against a very slow VMware vCenter server - resolves: rhbz#1153589 -- cat, diff: Avoid double slashes in paths - resolves: rhbz#1151910 +* Thu Sep 11 2014 Richard W.M. Jones - 1:1.27.43-1 +- New upstream version 1.27.43. -* Sat Oct 18 2014 Richard W.M. Jones - 1:1.28.1-1.1 -- Final rebase to stable libguestfs branch 1.28. - resolves: rhbz#1021149 -- Drop dist tag for BuildRequires, so it builds on ppc64le. - resolves: rhbz#1149640 -- Make sure we require the latest libvirt, so virt-v2v can access ESX. -- Fix guestfish colour prompts when using white-on-black terminal - resolves: rhbz#1144201 -- Disable libguestfs UML backend mode - resolves: rhbz#1144197 -- Enable ppc64, ppc64le and aarch64. - On ppc64 we currently have to disable build-time testing of qemu. - resolves: rhbz#1125575 -- Remove unnecessary BR for libnl3 in RHEL < 7.1. -- Integrate changes from Rawhide. -- Add workaround for buggy libvirt 1.2.8. -- Move virt-v2v into a separate subpackage and make it depend on qemu-kvm-rhev. -- Add rhsrvany and RHEV Application Provisioning Tool to virt-v2v. -- Change Fedora -> RHEL in description. -- Disable some more protocol tests. -- Enable tests. -- Enable guestfish colour prompts. -- Add new tool virt-log. -- Enabling bash-completions subpackage means we need to BR bash-completion. -- Package libguestfs 1.27/1.28 for RHEL 7.1. -- Enable bash-completion. +* Thu Sep 11 2014 Richard W.M. Jones - 1:1.27.42-1 +- New upstream version 1.27.42. -* Mon Mar 3 2014 Richard W.M. Jones - 1:1.22.6-22 -- Fix Ruby bindings - resolves: rhbz#1072079 +* Tue Sep 09 2014 Richard W.M. Jones - 1:1.27.41-1 +- New upstream version 1.27.41. -* Wed Feb 12 2014 Richard W.M. Jones - 1:1.22.6-21 -- Fix segfault in guestfs_list_filesystems when presented with a - corrupt btrfs filesystem - resolves: rhbz#1064008 +* Mon Sep 08 2014 Jitka Plesnikova - 1:1.27.39-2 +- Perl 5.20 re-rebuild of bootstrapped packages -* Tue Feb 11 2014 Richard W.M. Jones - 1:1.22.6-20 -- Valid GUIDs when used as parameter to part-set-gpt-type - resolves: rhbz#1008417 +* Sat Sep 06 2014 Richard W.M. Jones - 1:1.27.39-1 +- New upstream version 1.27.39. +- Package virt-p2v ISO build tools together with virt-v2v in + a separate virt-v2v subpackage. -* Wed Feb 05 2014 Richard W.M. Jones - 1:1.22.6-19 -- Fix placement of *.py[co] files - resolves: rhbz#1061155 -- Remove bogus license file from daemon - resolves: rhbz#1061160 -- Prevent virt-sparsify from overwriting block or char devices - resolves: rhbz#1056556 -- mount-local should give a clearer error if root is not mounted - resolves: rhbz#1057492 +* Fri Sep 05 2014 Richard W.M. Jones - 1:1.27.38-1 +- New upstream version 1.27.38. -* Fri Dec 27 2013 Daniel Mach - 1:1.22.6-18 -- Mass rebuild 2013-12-27 +* Thu Sep 04 2014 Richard W.M. Jones - 1:1.27.37-1 +- New upstream version 1.27.37. -* Thu Dec 05 2013 Richard W.M. Jones - 1:1.22.6-17 -- Rebuild for updated procps SONAME. - resolves: rhbz#1037795 +* Wed Sep 03 2014 Jitka Plesnikova - 1:1.27.36-2 +- Perl 5.20 rebuild -* Wed Nov 20 2013 Richard W.M. Jones - 1:1.22.6-16 -- Allow virt-win-reg command to work with URIs - resolves: rhbz#912193 +* Tue Sep 02 2014 Richard W.M. Jones - 1:1.27.36-1 +- New upstream version 1.27.36. -* Thu Oct 31 2013 Richard W.M. Jones - 1:1.22.6-15 -- Add libguestfs-tools.conf(5) man page - resolves: rhbz#1019891 -- Drop PHP bindings - resolves: rhbz#1020021 -- Disable Haskell & Erlang (in case someone has these dependencies - installed and tries to rebuild the package). +* Mon Sep 01 2014 Richard W.M. Jones - 1:1.27.35-1 +- New upstream version 1.27.35. -* Wed Oct 16 2013 Richard W.M. Jones - 1:1.22.6-12 -- Backport: "daemon: Fix xfs_info parser because of new format." - which is required to fix libguestfs tests. - related: rhbz#1019503 +* Sat Aug 30 2014 Richard W.M. Jones - 1:1.27.34-1 +- New upstream version 1.27.34. -* Wed Oct 16 2013 Richard W.M. Jones - 1:1.22.6-11 -- Further fixes for kvmclock - resolves: rhbz#998109 -- Document that blockdev-setbsz is deprecated and should not be used - resolves: rhbz#1016465 +* Fri Aug 29 2014 Jitka Plesnikova - 1:1.27.33-3 +- Perl 5.20 rebuild -* Wed Oct 16 2013 Richard W.M. Jones - 1:1.22.6-10 -- Fix CVE-2013-4419: insecure temporary directory handling for - guestfish's network socket - resolves: rhbz#1019503 +* Fri Aug 29 2014 Richard W.M. Jones - 1:1.27.33-2 +- New upstream version 1.27.33. +- Enable LVM filtering test (thanks Pino Toscano). -* Thu Sep 26 2013 Richard W.M. Jones - 1:1.22.6-9 -- Use 'host-passthrough' instead of 'host-model' (RHBZ#1011922) -- Fix mount-loop failed to setup loop device: No such file or directory - resolves: rhbz#1011907 +* Mon Aug 25 2014 Richard W.M. Jones - 1:1.27.31-1 +- New upstream version 1.27.31. -* Fri Sep 13 2013 Richard W.M. Jones - 1:1.22.6-8 -- Backport 'cachemode' property of 'add_drive' - resolves: rhbz#1003291 -- Improve error reporting from aug_init - related: rhbz# 1003685 +* Thu Aug 21 2014 Richard W.M. Jones - 1:1.27.30-1 +- New upstream version 1.27.30. -* Thu Aug 29 2013 Richard W.M. Jones - 1:1.22.6-5 -- Various fixes to tar-out 'excludes' - resolves: rhbz#1001875 -- Document use of glob + rsync-out - resolves: rhbz#1001876 -- Document mke2fs blockscount - resolves: rhbz#1002032 -- Fix virt-format MBR partition type byte, add --label option to - virt-format and virt-make-fs, and allow labels to be set on DOS filesystems - resolves: rhbz#1000428 +* Wed Aug 20 2014 Richard W.M. Jones - 1:1.27.28-1 +- New upstream version 1.27.28. + +* Sun Aug 17 2014 Fedora Release Engineering - 1:1.27.27-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Aug 15 2014 Richard W.M. Jones - 1:1.27.27-1 +- New upstream version 1.27.27. + +* Fri Aug 15 2014 Richard W.M. Jones - 1:1.27.26-2 +- Java is now java-1.8.0-openjdk in Rawhide. + +* Thu Aug 14 2014 Richard W.M. Jones - 1:1.27.26-1 +- New upstream version 1.27.26. + +* Thu Aug 14 2014 Richard W.M. Jones - 1:1.27.25-2 +- Require mingw32-srvany >= 1.0-13 because otherwise we have a broken symlink. +- Skip virt-v2v tests since they require rhsrvany.exe which is not + available during the tests. + +* Tue Aug 05 2014 Richard W.M. Jones - 1:1.27.25-1 +- New upstream version 1.27.25. + +* Mon Jul 28 2014 Richard W.M. Jones - 1:1.27.24-3 +- Rebuild on aarch64. + +* Sun Jul 27 2014 Richard W.M. Jones - 1:1.27.24-2 +- New upstream version 1.27.24. +- Remove patch now upstream. + +* Fri Jul 25 2014 Richard W.M. Jones - 1:1.27.23-3 +- Skip LVM test which is failing. + +* Thu Jul 24 2014 Richard W.M. Jones - 1:1.27.23-2 +- Enable tests on aarch64, in order to study which tests fail. + +* Wed Jul 23 2014 Richard W.M. Jones - 1:1.27.23-1 +- New upstream version 1.27.23. + +* Tue Jul 22 2014 Kalev Lember - 1:1.27.22-3 +- Rebuilt for gobject-introspection 1.41.4 + +* Mon Jul 21 2014 Richard W.M. Jones - 1:1.27.22-2 +- New upstream version 1.27.22. +- Disable golang since the Fedora package is broken again. + +* Wed Jul 16 2014 Peter Robinson 1:1.27.21-2 +- Disable tests on aarch64 +- ntfs-3g available on all arches +- hfsplus-tools on all arches +- KVM available on ARMv7 and aarch64 + +* Tue Jul 08 2014 Richard W.M. Jones - 1:1.27.21-1 +- New upstream version 1.27.21. + +* Wed Jul 02 2014 Richard W.M. Jones - 1:1.27.20-1 +- New upstream version 1.27.20. + +* Tue Jun 24 2014 Richard W.M. Jones - 1:1.27.19-1 +- New upstream version 1.27.19. + +* Mon Jun 16 2014 Richard W.M. Jones - 1:1.27.18-1 +- New upstream version 1.27.18. + +* Sat Jun 14 2014 Richard W.M. Jones - 1:1.27.16-2 +- Install guestfish colour prompts. + +* Sat Jun 14 2014 Richard W.M. Jones - 1:1.27.16-1 +- New upstream version 1.27.16. + +* Wed Jun 11 2014 Richard W.M. Jones - 1:1.27.15-1 +- New upstream version 1.27.15. + +* Sat Jun 07 2014 Fedora Release Engineering - 1:1.27.14-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Fri May 30 2014 Richard W.M. Jones - 1:1.27.14-1 +- New upstream version 1.27.14. + +* Sun May 25 2014 Richard W.M. Jones - 1:1.27.13-1 +- New upstream version 1.27.13. + +* Fri May 23 2014 Richard W.M. Jones - 1:1.27.12-2 +- New upstream version 1.27.12. +- Enable golang since it is now working on Rawhide. +- Fix golang installation again. +- Delete guestfs-p2v-iso(1) (internal documentation). + +* Fri May 16 2014 Richard W.M. Jones - 1:1.27.11-3 +- Try re-enabling x86-64 tests. + Requires supermin >= 5.1.8-3 which supports xz-compressed kernel modules. + +* Fri May 16 2014 Richard W.M. Jones - 1:1.27.11-2 +- New upstream version 1.27.11. + +* Fri May 16 2014 Richard W.M. Jones - 1:1.27.10-1 +- New upstream version 1.27.10. + +* Thu May 08 2014 Richard W.M. Jones - 1:1.27.9-1 +- New upstream version 1.27.9. + +* Sat May 3 2014 Richard W.M. Jones - 1:1.27.8-2 +- Remove ruby(release) version. Fix for Ruby 2.1. + +* Fri May 02 2014 Richard W.M. Jones - 1:1.27.8-1 +- New upstream version 1.27.8. + +* Sat Apr 26 2014 Richard W.M. Jones - 1:1.27.7-1 +- New upstream version 1.27.7. + +* Tue Apr 22 2014 Richard W.M. Jones - 1:1.27.6-1 +- New upstream version 1.27.6. + +* Wed Apr 16 2014 Richard W.M. Jones - 1:1.27.5-2 +- Remove /var/run/libguestfs, which is not used. + +* Wed Apr 16 2014 Richard W.M. Jones - 1:1.27.5-1 +- New upstream version 1.27.5. + +* Tue Apr 15 2014 Richard W.M. Jones - 1:1.27.4-1 +- New upstream version 1.27.4. + +* Tue Apr 8 2014 Richard W.M. Jones - 1:1.27.3-3 +- Re-enable virt-sparsify --in-place test, see: + https://bugzilla.redhat.com/show_bug.cgi?id=1079210#c4 + +* Mon Apr 07 2014 Richard W.M. Jones - 1:1.27.3-2 +- Do not use rubygem-minitest. Temporary workaround, see: + https://bugzilla.redhat.com/show_bug.cgi?id=1085029#c2 + +* Sun Apr 06 2014 Richard W.M. Jones - 1:1.27.3-1 +- New upstream version 1.27.3. + +* Mon Mar 31 2014 Richard W.M. Jones - 1:1.27.2-1 +- New upstream version 1.27.2. + +* Fri Mar 28 2014 Richard W.M. Jones - 1:1.27.0-1 +- New upstream version 1.27.0. + +* Wed Mar 26 2014 Richard W.M. Jones - 1:1.25.49-1 +- New upstream version 1.25.49. + +* Tue Mar 25 2014 Richard W.M. Jones - 1:1.25.47-1 +- New upstream version 1.25.47. +- Include new tool: virt-customize. + +* Thu Mar 20 2014 Richard W.M. Jones - 1:1.25.46-1 +- New upstream version 1.25.46. + +* Thu Mar 20 2014 Richard W.M. Jones - 1:1.25.45-2 +- Further split libguestfs appliance dependencies. + +* Mon Mar 17 2014 Richard W.M. Jones - 1:1.25.45-1 +- New upstream version 1.25.45. + +* Fri Mar 14 2014 Richard W.M. Jones - 1:1.25.44-2 +- Try to patch fstrim so it works in Koji/Rawhide. + +* Thu Mar 13 2014 Richard W.M. Jones - 1:1.25.44-1 +- New upstream version 1.25.44. + +* Sat Mar 08 2014 Richard W.M. Jones - 1:1.25.43-1 +- New upstream version 1.25.43. + +* Thu Mar 06 2014 Richard W.M. Jones - 1:1.25.42-1 +- New upstream version 1.25.42. + +* Tue Mar 04 2014 Richard W.M. Jones - 1:1.25.41-1 +- New upstream version 1.25.41. + +* Mon Mar 03 2014 Richard W.M. Jones - 1:1.25.40-1 +- New upstream version 1.25.40. + +* Sun Mar 02 2014 Richard W.M. Jones - 1:1.25.39-2 +- New upstream version 1.25.39. + +* Fri Feb 28 2014 Richard W.M. Jones - 1:1.25.38-4 +- Disable hfsplus subpackage on arm & ppc. +- Disable zfs subpackage on arm. +- Disable tests on x86. + +* Thu Feb 27 2014 Richard W.M. Jones - 1:1.25.38-3 +- Ensure dependencies needed by the daemon are added to base libguestfs. + +* Wed Feb 26 2014 Richard W.M. Jones - 1:1.25.38-2 +- New upstream version 1.25.38. +- Requires new supermin 5.1.0. +- Split the dependencies into subpackages, at least for the less common + filesystem types. +- In the dependency generator, we can now generate ordinary dependencies! + +* Sat Feb 22 2014 Richard W.M. Jones - 1:1.25.37-2 +- New upstream version 1.25.37. +- Disable tests on ARM because of RHBZ#1066581. + +* Tue Feb 18 2014 Richard W.M. Jones - 1:1.25.36-5 +- Add upstream patches, workaround for libvirt on ARM / ppc64 bug. +- Run make quickcheck (and fail early) before doing full make check. + +* Mon Feb 17 2014 Richard W.M. Jones - 1:1.25.36-1 +- New upstream version 1.25.36. + +* Sun Feb 16 2014 Richard W.M. Jones - 1:1.25.34-1 +- Enable tests on i686 as both of the referenced bugs (RHBZ#998722 & + RHBZ#998692) are now supposed to be fixed. +- Enable tests on ARM as the bug (RHBZ#990258) is supposed to be fixed. + +* Thu Feb 13 2014 Richard W.M. Jones - 1:1.25.34-1 +- New upstream version 1.25.34. +- Reenable tests as the kernel bug is fixed. + +* Wed Feb 05 2014 Richard W.M. Jones - 1:1.25.33-1 +- New upstream version 1.25.33. + +* Tue Feb 04 2014 Richard W.M. Jones - 1:1.25.32-2 +- Since Python package is not noarch, do not put Python files into + shared /usr/lib/python2.X/site-packages (RHBZ#1061155). + +* Tue Feb 04 2014 Richard W.M. Jones - 1:1.25.32-1 +- New upstream version 1.25.32. + +* Wed Jan 29 2014 Richard W.M. Jones - 1:1.25.31-2 +- virt-make-fs has been rewritten in C. +- qemu-img is now required by the core library (for guestfs_disk_create). +- perl(String::ShellQuote) is no longer used. + +* Wed Jan 29 2014 Richard W.M. Jones - 1:1.25.31-1 +- New upstream version 1.25.31. + +* Sat Jan 25 2014 Richard W.M. Jones - 1:1.25.29-1 +- New upstream version 1.25.29. + +* Fri Jan 24 2014 Richard W.M. Jones - 1:1.25.27-1 +- New upstream version 1.25.27. + +* Wed Jan 22 2014 Richard W.M. Jones - 1:1.25.26-1 +- New upstream version 1.25.26. + +* Wed Jan 22 2014 Richard W.M. Jones - 1:1.25.25-2 +- Update to latest Fedora golang packaging draft. +- See: https://fedoraproject.org/wiki/PackagingDrafts/Go + +* Tue Jan 21 2014 Richard W.M. Jones - 1:1.25.25-1 +- New upstream version 1.25.25. + +* Sun Jan 19 2014 Richard W.M. Jones - 1:1.25.24-1 +- New upstream version 1.25.24. + +* Sat Jan 18 2014 Richard W.M. Jones - 1:1.25.23-1 +- New upstream version 1.25.23. + +* Tue Jan 14 2014 Richard W.M. Jones - 1:1.25.21-1 +- New upstream version 1.25.21. + +* Mon Jan 13 2014 Richard W.M. Jones - 1:1.25.20-1 +- New upstream version 1.25.20. + +* Thu Jan 02 2014 Richard W.M. Jones - 1:1.25.19-1 +- New upstream version 1.25.19. + +* Thu Dec 19 2013 Richard W.M. Jones - 1:1.25.18-1 +- New upstream version 1.25.18. + +* Sat Dec 14 2013 Richard W.M. Jones - 1:1.25.15-1 +- New upstream version 1.25.15. + +* Thu Dec 12 2013 Richard W.M. Jones - 1:1.25.14-1 +- New upstream version 1.25.14. + +* Mon Dec 09 2013 Richard W.M. Jones - 1:1.25.13-1 +- New upstream version 1.25.13. + +* Fri Dec 06 2013 Richard W.M. Jones - 1:1.25.12-3 +- Build golang package only on x86 and ARM. The golang package in Fedora + uses the same ExclusiveArch. Thanks: Dan Horák. + +* Wed Dec 04 2013 Richard W.M. Jones - 1:1.25.12-2 +- Rebuild for procps SONAME bump. + +* Mon Dec 02 2013 Richard W.M. Jones - 1:1.25.12-1 +- New upstream version 1.25.12. + +* Mon Nov 25 2013 Richard W.M. Jones - 1:1.25.11-3 +- Disable NBD test, buggy in qemu 1.7.0 (filed as RHBZ#1034433). + +* Sat Nov 23 2013 Richard W.M. Jones - 1:1.25.11-2 +- Disable mdadm test, buggy in kernel 3.13 (filed as RHBZ#1033971). + +* Sat Nov 23 2013 Richard W.M. Jones - 1:1.25.11-1 +- New upstream version 1.25.11. + +* Wed Nov 20 2013 Richard W.M. Jones - 1:1.25.8-2 +- Rebuild to resolve broken dependency on krb libraries. +- Remove obsolete Obsoletes. +- Fix Source URL. +- Require java-headless instead of java: + https://fedoraproject.org/wiki/Changes/HeadlessJava +- Backport upstream patch to fix btrfs. + +* Thu Nov 14 2013 Richard W.M. Jones - 1:1.25.8-1 +- New upstream version 1.25.8. + +* Sat Nov 09 2013 Richard W.M. Jones - 1:1.25.7-1 +- New upstream version 1.25.7. + +* Tue Nov 05 2013 Richard W.M. Jones - 1:1.25.6-2 +- New upstream version 1.25.6. +- Add virt-index-validate tool & man page. + +* Tue Nov 05 2013 Richard W.M. Jones - 1:1.25.3-2 +- Remove patches, now upstream. +- +BR flex & bison, required by libguestfs >= 1.25.4. +- +BR xz-devel (for liblzma) to accelerate virt-builder in >= 1.25.5. + +* Fri Nov 01 2013 Richard W.M. Jones - 1:1.25.3-1 +- New upstream version 1.25.3. + +* Wed Oct 30 2013 Richard W.M. Jones - 1:1.25.2-1 +- New upstream version 1.25.2. + +* Sat Oct 26 2013 Richard W.M. Jones - 1:1.25.1-1 +- New upstream version 1.25.1. + +* Tue Oct 22 2013 Richard W.M. Jones - 1:1.25.0-2 +- Don't use versioned jar file (RHBZ#1022133). + +* Sat Oct 19 2013 Richard W.M. Jones - 1:1.25.0-1 +- New upstream version 1.25.0. + +* Tue Oct 15 2013 Richard W.M. Jones - 1:1.23.33-1 +- New upstream version 1.23.33. + +* Mon Oct 14 2013 Richard W.M. Jones - 1:1.23.32-1 +- New upstream version 1.23.32. + +* Sun Oct 13 2013 Richard W.M. Jones - 1:1.23.31-1 +- New upstream version 1.23.31. + +* Fri Oct 11 2013 Richard W.M. Jones - 1:1.23.30-1 +- New upstream version 1.23.30. + +* Tue Oct 08 2013 Richard W.M. Jones - 1:1.23.28-1 +- New upstream version 1.23.28. + +* Mon Oct 07 2013 Richard W.M. Jones - 1:1.23.27-1 +- New upstream version 1.23.27. + +* Fri Oct 4 2013 Richard W.M. Jones - 1:1.23.25-1 +- New upstream version 1.23.25. +- Add virt-builder and its dependencies. + +* Mon Sep 30 2013 Richard W.M. Jones - 1:1.23.23-2 +- New upstream version 1.23.23. +- Remove patch which is now upstream. + +* Thu Sep 12 2013 Richard W.M. Jones - 1:1.23.22-2 +- Add patch to debug parallel tests. + +* Wed Sep 11 2013 Richard W.M. Jones - 1:1.23.22-1 +- New upstream version 1.23.22. + +* Mon Sep 9 2013 Richard W.M. Jones - 1:1.23.21-2 +- Disable golang bindings on ppc64 (no golang package available). + +* Sat Sep 7 2013 Richard W.M. Jones - 1:1.23.21-1 +- New upstream version 1.23.21. +- Remove patches which are now upstream. +- Requires supermin >= 4.1.5 (technically only on ARM for device tree + support, but might as well have it everywhere). + +* Tue Sep 3 2013 Richard W.M. Jones - 1:1.23.20-5 +- Enable debugging messages in parallel virt-alignment-scan, virt-df + in order to debug possible race condition seen in Koji. + +* Mon Sep 2 2013 Richard W.M. Jones - 1:1.23.20-4 +- Rebuild now that RHBZ#1003495 is supposed to be fixed. + +* Sun Sep 1 2013 Richard W.M. Jones - 1:1.23.20-2 +- New upstream version 1.23.20. + +* Thu Aug 29 2013 Richard W.M. Jones - 1:1.23.19-1 +- New upstream version 1.23.19. +- Remove 2 x patches which are upstream. + +* Thu Aug 29 2013 Richard W.M. Jones - 1:1.23.18-4 +- Enable gzip-compressed appliance. +- Note this requires supermin >= 4.1.4. + +* Wed Aug 28 2013 Richard W.M. Jones - 1:1.23.18-3 - Fix javadoc location to use _javadocdir macro. - Call ldconfig in java post and postun scripts. - Do not explicitly depend on perl-devel. @@ -2042,130 +2986,297 @@ rm ocaml/html/.gitignore - Create new subpackage gobject-doc for the huge HTML documentation. - Make javadoc, gobject-doc, bash-completion, man-pages-*, tools packages 'noarch'. -- Enable gzip-compressed appliance. -- Note this requires supermin >= 4.1.4. -* Tue Aug 27 2013 Richard W.M. Jones - 1:1.22.6-4 -- New upstream stable version 1.22.6. - resolves: rhbz#995712, rhbz#998750, rhbz#998485 -- Backport set-UUID API and related - resolves: rhbz#995176 -- Enable kvmclock - resolves: rhbz#998109 -- Add upstream APIs guestfs_add_drive_scratch, guestfs_remount. +* Mon Aug 19 2013 Richard W.M. Jones - 1:1.23.18-2 +- New upstream version 1.23.18. +- Disable 32 bit x86 tests because of RHBZ#998722 & RHBZ#998692. -* Tue Jul 30 2013 Richard W.M. Jones - 1:1.22.5-3 -- Backport support for virt-sysprep -a URI option - resolves: rhbz#968785 +* Thu Aug 15 2013 Richard W.M. Jones - 1:1.23.17-1 +- New upstream version 1.23.17. +- Enable tests as cpu host-model is no longer used on TCG. -* Mon Jul 29 2013 Richard W.M. Jones - 1:1.22.5-2 -- New upstream stable version 1.22.5. -- Fix virt-sysprep --firstboot option - resolves: rhbz#988862 -- Disable unsupported remote drives - resolves: rhbz#962113 -- cap-get-file returns empty string instead of error if no capabilities - resolves: rhbz#989356 +* Tue Aug 13 2013 Richard W.M. Jones - 1:1.23.16-1 +- New upstream version 1.23.16. -* Fri Jul 19 2013 Richard W.M. Jones - 1:1.22.4-2 -- New upstream stable version 1.22.4. -- Move virt-sysprep to libguestfs-tools-c package - resolves: rhbz#975573 -- Remove 9p APIs from RHEL - resolves: rhbz#921710 -- Reenable swapon test - resolves: rhbz#911674 -- Reenable file architecture test - resolves: rhbz#911678 -- Fix mkfs blocksize option when using xfs - resolves: rhbz#976250 -- Fix double-free when kernel link fails during launch - resolves: rhbz#983691 -- Fix disk-format "JSON parse error" when target file does not exist - resolves: rhbz#980338 -- Fix documentation for acl-set-file - resolves: rhbz#985856 -- libguestfs-devel should depend on full ENVR of libguestfs-tools-c. -- Require /usr/bin/vi instead of /bin/vi for UsrMove. +* Sun Aug 11 2013 Richard W.M. Jones - 1:1.23.15-1 +- New upstream version 1.23.15. -* Mon Jun 3 2013 Richard W.M. Jones - 1:1.22.2-1 -- New upstream version 1.22.2. -- Do not need to remove guestfsd man page, since libguestfs no longer - installs it. +* Tue Aug 6 2013 Richard W.M. Jones - 1:1.23.14-1 +- New upstream version 1.23.14. -* Mon May 20 2013 Daniel Mach - 1:1.21.33-1.1.el7 -- Rebuild for cyrus-sasl +* Sun Aug 4 2013 Richard W.M. Jones - 1:1.23.13-2 +- Disable all tests because Rawhide kernel is broken (RHBZ#991808). -* Mon Apr 29 2013 Richard W.M. Jones - 1:1.21.33-1.el7 -- New upstream version 1.21.33. -- Rebuild for renamed Kerberos library. - resolves: rhbz#957616 -- Skip gnulib tests which fail. -- Skip NBD test since there is no NBD in RHEL. +* Sat Aug 3 2013 Richard W.M. Jones - 1:1.23.13-1 +- New upstream version 1.23.13. -* Wed Apr 17 2013 Richard W.M. Jones - 1:1.21.31-1.el7.1 -- Rebase RHEL 7 onto libguestfs 1.21. -- Update spec file from Rawhide. +* Fri Aug 02 2013 Petr Pisar - 1:1.23.12-2 +- Perl 5.18 rebuild -* Tue Apr 9 2013 Richard W.M. Jones - 1:1.20.5-4 -- In RHEL 7, 'ruby(abi)' has been replaced by 'ruby(release)' - and the version of the ruby ABI/release is now 2.0.0. +* Tue Jul 30 2013 Richard W.M. Jones - 1:1.23.12-1 +- New upstream version 1.23.12. +- Disable ARM tests because of libvirt error: + XML error: No PCI buses available [code=27 domain=10] (RHBZ#990258). -* Fri Apr 5 2013 Richard W.M. Jones - 1:1.20.5-3 -- Remove man pages of deprecated programs. +* Tue Jul 30 2013 Richard W.M. Jones - 1:1.23.11-2 +- Enable ARM builds (thanks Dan Berrange). -* Tue Apr 2 2013 Richard W.M. Jones - 1:1.20.5-2 -- Remove deprecated programs virt-tar, virt-list-filesystems and - virt-list-partitions from RHEL 7. +* Mon Jul 29 2013 Richard W.M. Jones - 1:1.23.11-1 +- New upstream version 1.23.11. +- +BR systemd-devel (for systemd journal processing). +- Disable ARM builds for now. -* Sun Mar 31 2013 Richard W.M. Jones - 1:1.20.5-1 -- New upstream version 1.20.5. -- Remove ruby vendor patch. -- Set INSTALLDIRS=vendor on both make and make install rules. +* Tue Jul 23 2013 Richard W.M. Jones - 1:1.23.10-1 +- New upstream version 1.23.10. -* Tue Mar 5 2013 Richard W.M. Jones - 1:1.20.3-1 -- New upstream version 1.20.3. +* Fri Jul 19 2013 Richard W.M. Jones - 1:1.23.9-1 +- New upstream version 1.23.9. +- Remove 5 x patches which are all upstream. -* Fri Feb 15 2013 Richard W.M. Jones - 1:1.20.2-1 -- New upstream version 1.20.2. -- Synchronize list of tests to be skipped with local list. -- Use openjdk instead of java (GCJ). -- Add BRs: libcap. -- Ship the gobject pkgconfig file. +* Thu Jul 11 2013 Richard W.M. Jones - 1:1.23.8-5 +- Add patches to ./run so we capture errors when i686 tests time out. +- Include upstream patch to fix double-free if appliance + building fails (RHBZ#983218). -* Mon Feb 11 2013 Richard W.M. Jones - 1:1.20.1-7 -- 'febootstrap' has been renamed 'supermin'. - resolves: rhbz#909573 +* Tue Jul 9 2013 Richard W.M. Jones - 1:1.23.8-2 +- New upstream version 1.23.8. +- Try enabling golang bindings. +- Add upstream patch to fix golang bindings. -* Sat Jan 19 2013 Richard W.M. Jones - 1:1.20.1-6 -- Add explicit BR on seabios-bin to work around RHBZ#901542. +* Wed Jul 3 2013 Richard W.M. Jones - 1:1.23.7-1 +- New upstream version 1.23.7. +- Disable golang bindings. -* Fri Jan 18 2013 Richard W.M. Jones - 1:1.20.1-5 +* Thu Jun 27 2013 Richard W.M. Jones - 1:1.23.6-2 +- Re-enable tests on i686, supposedly TCG problems are fixed + (RHBZ#857026 etc.). + +* Wed Jun 26 2013 Richard W.M. Jones - 1:1.23.6-1 +- New upstream version 1.23.6. + +* Tue Jun 18 2013 Richard W.M. Jones - 1:1.23.5-1 +- New upstream version 1.23.5. +- Fix hostname inspection because of change in Augeas (RHBZ#975412). +- Upstream libguestfs now requires Augeas >= 1.0.0. +- Kernel bug which affected mdadm is fixed (RHBZ#962079). + +* Fri Jun 14 2013 Richard W.M. Jones - 1:1.23.4-1 +- New upstream version 1.23.4. + +* Mon Jun 10 2013 Richard W.M. Jones - 1:1.23.3-1 +- New upstream version 1.23.3. + +* Wed Jun 5 2013 Richard W.M. Jones - 1:1.23.2-2 +- libguestfs-devel should depend on an explicit version of + libguestfs-tools-c, in order that the latest package is pulled in. + +* Mon Jun 3 2013 Richard W.M. Jones - 1:1.23.2-1 +- New upstream version 1.23.2. + +* Tue May 28 2013 Richard W.M. Jones - 1:1.23.1-1 +- New upstream development branch 1.23. +- New upstream version 1.21.1. + +* Tue May 21 2013 Richard W.M. Jones - 1:1.21.40-3 +- New upstream version 1.21.40. + +* Wed May 15 2013 Richard W.M. Jones - 1:1.21.39-1 +- New upstream version 1.21.39. + +* Mon May 13 2013 Richard W.M. Jones - 1:1.21.38-2 - Bump and rebuild. -* Fri Dec 21 2012 Richard W.M. Jones - 1:1.20.1-4 -- Go over all non-upstream patches from RHEL 6 and add appropriate ones - to RHEL 7: - * Emphasize libguestfs-winsupport. - * Remove libguestfs-live ('unix' attach-method). - * Exclude iptables. - * Ignore /etc/release file if /etc/redhat-release file exists. - resolves: rhbz#889536, rhbz#889537, rhbz#889538, rhbz#873219 -- Do not number patches. +* Sat May 11 2013 Richard W.M. Jones - 1:1.21.38-1 +- New upstream version 1.21.38. -* Thu Dec 20 2012 Richard W.M. Jones - 1:1.20.1-3 -- New upstream version 1.20.1. +* Thu May 9 2013 Richard W.M. Jones - 1:1.21.37-1 +- New upstream version 1.21.37. -* Tue Dec 18 2012 Richard W.M. Jones - 1:1.20.0-5 -- Remove RHEL-conditionals, since I have branched spec file for RHEL 7. +* Sun May 5 2013 Richard W.M. Jones - 1:1.21.36-2 +- Bump and rebuild. + +* Thu May 2 2013 Richard W.M. Jones - 1:1.21.36-1 +- New upstream version 1.21.36. + +* Tue Apr 30 2013 Richard W.M. Jones - 1:1.21.35-1 +- New upstream version 1.21.35. + +* Mon Apr 29 2013 Richard W.M. Jones - 1:1.21.34-2 +- New upstream version 1.21.34. + +* Thu Apr 25 2013 Richard W.M. Jones - 1:1.21.33-1 +- New upstream version 1.21.33. + +* Tue Apr 23 2013 Richard W.M. Jones - 1:1.21.32-1 +- New upstream version 1.21.32. +- Fix stray backslash in spec file. +- Enable btrfs tests, since these are now stable enough not to fail usually. +- Skip gnulib tests which fail. + +* Wed Apr 17 2013 Richard W.M. Jones - 1:1.21.31-1 +- New upstream version 1.21.31. +- Rebuild against new krb5 (RHBZ#953001). + +* Tue Apr 16 2013 Richard W.M. Jones - 1:1.21.30-1 +- New upstream version 1.21.30. + +* Sat Apr 13 2013 Richard W.M. Jones - 1:1.21.29-1 +- New upstream version 1.21.29. + +* Thu Apr 11 2013 Richard W.M. Jones - 1:1.21.28-3 +- SYSLINUX only exists on x86 arches so make that dependency conditional + (thanks Dennis Gilmore). + +* Tue Apr 9 2013 Richard W.M. Jones - 1:1.21.28-2 +- New upstream version 1.21.28. +- Change attach-method -> backend in a few places. +- Simplify make install section so it fits on a single page. + +* Thu Apr 4 2013 Richard W.M. Jones - 1:1.21.27-1 +- New upstream version 1.21.27. +- Add new appliance BRs: syslinux, syslinux-extlinux. +- Add a dependency on libosinfo (partial fix for RHBZ#948324). + +* Tue Apr 2 2013 Richard W.M. Jones - 1:1.21.26-4 +- New upstream version 1.21.26. +- Use ./configure --with-default-backend=.. instead of attach-method. +- Remove Sys::Guestfs::Lib (removed upstream). +- Detect if network is available. + libguestfs_buildnet macro no longer needed. +- Enable hardened build (-fPIE, RELRO). +- Remove BRs: ncurses-devel and versioned parted. + +* Sat Mar 30 2013 Richard W.M. Jones - 1:1.21.25-1 +- New upstream version 1.21.25. + +* Fri Mar 29 2013 Richard W.M. Jones - 1:1.21.24-1 +- New upstream version 1.21.24. +- Remove patches, now upstream. + +* Fri Mar 29 2013 Richard W.M. Jones - 1:1.21.23-3 +- Add patch for broken 'file' command in Rawhide (RHBZ#928995). + +* Thu Mar 28 2013 Richard W.M. Jones - 1:1.21.23-2 +- New upstream version 1.21.23. +- Remove 'Group' which is not required by modern RPM. +- Add patch to use new-style demand-loaded bash-completion scripts. +- Spin bash-completion scripts into a new libguestfs-bash-completion package. + +* Mon Mar 18 2013 Richard W.M. Jones - 1:1.21.22-1 +- New upstream version 1.21.22. + +* Sat Mar 16 2013 Richard W.M. Jones - 1:1.21.21-2 +- Set INSTALLDIRS on both make and make install rules. + +* Fri Mar 15 2013 Richard W.M. Jones - 1:1.21.21-1 +- New upstream version 1.21.21. +- Remove ruby vendor patch. + +* Wed Mar 13 2013 Richard W.M. Jones - 1:1.21.20-1 +- New upstream version 1.21.20. +- In Fedora 19, 'ruby(abi)' has been replaced by 'ruby(release)' + and the version of the ruby ABI/release is now 2.0.0. + +* Mon Mar 11 2013 Richard W.M. Jones - 1:1.21.19-1 +- New upstream version 1.21.19. + +* Thu Mar 7 2013 Richard W.M. Jones - 1:1.21.18-1 +- New upstream version 1.21.18. + +* Tue Mar 5 2013 Richard W.M. Jones - 1:1.21.17-1 +- New upstream version 1.21.17. +- New program 'guestunmount'. + +* Fri Mar 1 2013 Richard W.M. Jones - 1:1.21.16-1 +- New upstream version 1.21.16. +- Re-enable tests, since kernel patch is upstream. + +* Tue Feb 26 2013 Richard W.M. Jones - 1:1.21.15-1 +- New upstream version 1.21.15. + +* Mon Feb 25 2013 Richard W.M. Jones - 1:1.21.14-2 +- New upstream version 1.21.14. +- Disable tests because of Rawhide kernel bug that prevents booting. + +* Wed Feb 20 2013 Richard W.M. Jones - 1:1.21.13-1 +- New upstream version 1.21.13. + +* Tue Feb 19 2013 Richard W.M. Jones - 1:1.21.12-1 +- New upstream version 1.21.12. +- Remove patch, now upstream. + +* Thu Feb 14 2013 Richard W.M. Jones - 1:1.21.11-2 +- New upstream version 1.21.11. +- Add experimental patch to capture stack trace of segfaults in the appliance. + +* Mon Feb 11 2013 Richard W.M. Jones - 1:1.21.10-1 +- New upstream version 1.21.10. + +* Sat Feb 9 2013 Richard W.M. Jones - 1:1.21.9-1 +- New upstream version 1.21.9. + +* Thu Feb 7 2013 Richard W.M. Jones - 1:1.21.8-2 +- Bump and rebuild. + +* Tue Feb 5 2013 Richard W.M. Jones - 1:1.21.8-1 +- New upstream version 1.21.8. +- Remove patch which is now upstream. +- 'febootstrap' with renamed to 'supermin' upstream. + . Depend on supermin >= 4.1.1. + . Use new --with-supermin-packager-config option. + +* Tue Feb 5 2013 Richard W.M. Jones - 1:1.21.7-4 +- Skip set_label tests because of RHBZ#906777. +- Disable btrfs tests again because RHBZ#863978 is not fixed. + +* Mon Feb 4 2013 Richard W.M. Jones - 1:1.21.7-2 +- New development version 1.21.7. +- Re-enable btrfs tests, apparently fixed upstream. + +* Mon Jan 28 2013 Richard W.M. Jones - 1:1.21.6-1 +- New development version 1.21.6. + +* Sat Jan 26 2013 Richard W.M. Jones - 1:1.21.5-3 +- Bump and rebuild. + +* Fri Jan 25 2013 Richard W.M. Jones - 1:1.21.5-2 +- Bump and rebuild. + +* Mon Jan 21 2013 Richard W.M. Jones - 1:1.21.5-1 +- New development version 1.21.5. +- Remove upstream patch. + +* Mon Jan 21 2013 Richard W.M. Jones - 1:1.21.4-3 +- Add upstream patch to allow btrfs tests to be skipped. +- Skip btrfs tests because btrfs has been broken forever (RHBZ#863978). + +* Sat Jan 19 2013 Richard W.M. Jones - 1:1.21.4-2 +- Depend on openjdk instead of java. + +* Thu Jan 17 2013 Richard W.M. Jones - 1:1.21.4-1 +- New upstream version 1.21.4. +- Add libguestfs-gobject-1.0.pc. +- Remove automake 1.13 hack, fixed upstream. +- Add explicit dependency on libcap, needed by the appliance. + +* Thu Jan 17 2013 Richard W.M. Jones - 1:1.21.3-2 +- New upstream version 1.21.3. + +* Sat Jan 12 2013 Richard W.M. Jones - 1:1.21.2-3 +- Bump and rebuild. + +* Sat Dec 22 2012 Richard W.M. Jones - 1:1.21.2-2 +- New upstream version 1.21.2. +- Use new --with-febootstrap-packager-config option. + +* Mon Dec 17 2012 Richard W.M. Jones - 1:1.21.1-3 +- Remove all RHEL-specific hacks since I've now branched RHEL 7. - Add BR gdisk. -- Change to using git to manage patches. -- Add copy-patches.sh script. -- Disable libguestfs live (RHEL only). -- "Fedora" -> "RHEL" in replacement README file. -- "fedora" -> "rhel" in version extra field. -* Mon Dec 17 2012 Richard W.M. Jones - 1:1.20.0-2 +* Mon Dec 17 2012 Richard W.M. Jones - 1:1.21.1-2 +- New upstream version 1.21.1 (development branch). +- Fix source URL. +- Rebase ruby site/vendor patch. - Use 'make check -k' so we get to see all test failures at once. - For RHEL 7: * Do not depend on perl(Expect) (only needed to test virt-rescue). diff --git a/sources b/sources new file mode 100644 index 0000000..55ab89f --- /dev/null +++ b/sources @@ -0,0 +1,2 @@ +SHA512 (libguestfs-1.52.2.tar.gz) = 5eb4fbcc8e8879932a212c38c515598cd229e0e10b3e86d5655a10f30f5cc8c3df4e6f4b60095ccdaddbd493114ea84d9c0cdb9db7496dc83283fc4d369ece71 +SHA512 (libguestfs.keyring) = 297a15edc7c220222b9f650e0a9361ae132d3f0fed04aeb2237a1d9c3f6dac6f336846434f66480faed72635a33f659e849b052e74b88d1508aeff03f8c9a2ac diff --git a/SOURCES/yum.conf.in b/yum.conf.in similarity index 100% rename from SOURCES/yum.conf.in rename to yum.conf.in