From 0d57fb15f15e82c05f41353ed284d0881ae48d49 Mon Sep 17 00:00:00 2001 From: Michele Simionato Date: Sun, 18 Oct 2026 04:28:02 +0200 Subject: [PATCH 1/7] Attribute the rates of the atomic groups to their own sources With disagg_by_src the atomic groups of a task were computed together and all their rates were attributed to the source of the first group in mean_rates_by_src; moreover the ruptures of the other groups were not stored. Now there is a result per group, stored in the RateMap of the first group of the task. Added test_case_27_other. --- openquake/calculators/classical.py | 28 ++++- openquake/calculators/tests/classical_test.py | 20 ++- openquake/qa_tests_data/classical/README.md | 1 + .../classical/case_27/job_other.ini | 41 +++++++ .../case_27/source_model_logic_tree_other.xml | 15 +++ .../classical/case_27/source_model_other.hdf5 | Bin 0 -> 68151 bytes .../classical/case_27/source_model_other.xml | 115 ++++++++++++++++++ 7 files changed, 214 insertions(+), 6 deletions(-) create mode 100644 openquake/qa_tests_data/classical/case_27/job_other.ini create mode 100644 openquake/qa_tests_data/classical/case_27/source_model_logic_tree_other.xml create mode 100644 openquake/qa_tests_data/classical/case_27/source_model_other.hdf5 create mode 100644 openquake/qa_tests_data/classical/case_27/source_model_other.xml diff --git a/openquake/calculators/classical.py b/openquake/calculators/classical.py index db304b0226a..32741255e49 100644 --- a/openquake/calculators/classical.py +++ b/openquake/calculators/classical.py @@ -389,7 +389,18 @@ def bysrc_results(grps, sites, cmaker, gid_dic, full_lt, remove_zeros, # mutex ones must be, since mutually exclusive ruptures are # modelled with nonparametric sources) and no uncertainty can be # applied to a nonparametric source (the calculation would fail) - yield baseclassical(grps, sites, cmaker, remove_zeros, as_rmap=as_rmap) + if cmaker.oq.disagg_by_src: + # one result per group, since the groups can contain different + # sources and the rates are attributed to the source of each + # result (see 'basename' in RmapMaker.make); the groups are + # independent, so the sum of the results is the same; + # tested in classical/case_27_other + for grp in grps: + yield baseclassical([grp], sites, cmaker, remove_zeros, + as_rmap=as_rmap) + else: + yield baseclassical(grps, sites, cmaker, remove_zeros, + as_rmap=as_rmap) return grp = grps[0] if grp.atomic: @@ -496,8 +507,13 @@ def classical_bysrc(grp_keys, tilegetter, cmaker, dstore, monitor): """ grps, sites, gid_dic, full_lt = read_task_input( grp_keys, tilegetter, cmaker, dstore, monitor) - yield from bysrc_results(grps, sites, cmaker, gid_dic, full_lt, - remove_zeros=False) + # the RateMap in the master is the one of the first group (see + # get_rmap), also for the results of the other atomic groups + rmap_id = int(grp_keys[0].split('-')[0]) + for dic in bysrc_results(grps, sites, cmaker, gid_dic, full_lt, + remove_zeros=False): + dic['rmap_id'] = rmap_id + yield dic def classical(grp_keys, tilegetter, cmaker, dstore, monitor): @@ -751,8 +767,10 @@ def agg_dicts(self, acc, dic): chunkno = dic.get('chunkno') # None with the current impl. _store(rmap, self.num_chunks, self.datastore, chunkno) else: - # aggregating rates is ultra-fast compared to storing - self.rmap[grp_id] += rmap + # aggregating rates is ultra-fast compared to storing; NB: the + # results of the atomic groups go in the RateMap of the first + # group of the task, see classical_bysrc + self.rmap[dic.pop('rmap_id', grp_id)] += rmap return acc def create_rup(self): diff --git a/openquake/calculators/tests/classical_test.py b/openquake/calculators/tests/classical_test.py index 221b21334b8..27a02448105 100644 --- a/openquake/calculators/tests/classical_test.py +++ b/openquake/calculators/tests/classical_test.py @@ -396,7 +396,9 @@ def test_case_27(self): # Nankai mutex model # make sure probs_occur are stored as expected probs_occur = self.calc.datastore['rup/probs_occur'][:] tot_probs_occur = sum(len(po) for po in probs_occur) - self.assertEqual(tot_probs_occur, 4) # 2 x 2 + # 2 atomic groups x 2 ruptures x 2 probabilities; there were 4 + # when the ruptures of the second atomic group were not stored + self.assertEqual(tot_probs_occur, 8) # check mean_rates_by_src [fname] = export(('mean_rates_by_src', 'csv'), self.calc.datastore) @@ -419,6 +421,22 @@ def test_case_27(self): # Nankai mutex model fname = general.gettemp(text_table(rel, ext='org')) self.assertEqualFiles('expected/rel_source.org', fname) + def test_case_27_other(self): + # the second atomic group has sources named other:03, other:04; + # with disagg_by_src the rates of each atomic group must be + # attributed to its own source, while they were all attributed to + # the first group of the task, i.e. case=0 and other=9.39E-3 + self.run_calc(case_27.__file__, 'job_other.ini') + mrs = self.calc.datastore['mean_rates_by_src'] + rates = dict(zip(mrs.src_id, mrs.array[0, 0, 0])) # site 0, PGV + aac([rates['case'], rates['other']], [5.1798E-3, 4.2115E-3], + rtol=1E-4) + # the total is the same as in case_27, where both groups are 'case' + aac(rates['case'] + rates['other'], 9.3913E-3, rtol=1E-4) + # the ruptures of both atomic groups are stored, see test_case_27 + probs_occur = self.calc.datastore['rup/probs_occur'][:] + self.assertEqual(sum(len(po) for po in probs_occur), 8) + def test_case_27_labels(self): # two close sites with different labels and the same gsim: the # atomic groups must be computed for both, while they were diff --git a/openquake/qa_tests_data/classical/README.md b/openquake/qa_tests_data/classical/README.md index 1724a680ad6..1f6ef0debbf 100644 --- a/openquake/qa_tests_data/classical/README.md +++ b/openquake/qa_tests_data/classical/README.md @@ -22,6 +22,7 @@ |case\_25|Test negative depths| |case\_26|Test YoungsCoppersmith1985MFD| |case\_27|Nankai mutex model, including disaggregation| +|case\_27\_other|Nankai mutex model with disagg\_by\_src and atomic groups with different source names| |case\_27\_labels|Nankai mutex model with site\_labels| |case\_28|Test hypoDepthDist (and down-dip fractions for hypo placement) with a simple fault source| |case\_29|Non-parametric source with one rupture represente by 2 kite surfaces| diff --git a/openquake/qa_tests_data/classical/case_27/job_other.ini b/openquake/qa_tests_data/classical/case_27/job_other.ini new file mode 100644 index 00000000000..bbfb9aac60f --- /dev/null +++ b/openquake/qa_tests_data/classical/case_27/job_other.ini @@ -0,0 +1,41 @@ +[general] + +description = Nankai mutex model with atomic groups with different source names +calculation_mode = classical +random_seed = 1066 + +[geometry] + +sites = 135.68 35.68 + +[logic_tree] + +# end branch enumeration +number_of_logic_tree_samples = 0 + +[erf] + +# km +rupture_mesh_spacing = 1. +width_of_mfd_bin = 1. +area_source_discretization = + +[site_params] + +reference_vs30_type = measured +reference_vs30_value = 400.0 +reference_depth_to_2pt5km_per_sec = 1. +reference_depth_to_1pt0km_per_sec = 100. + +[calculation] + +source_model_logic_tree_file = source_model_logic_tree_other.xml +gsim_logic_tree_file = gsim_logic_tree.xml +# years +investigation_time = 50. +intensity_measure_types_and_levels = {"PGV": [20]} +# km +maximum_distance = 200. +truncation_level = 99. +disagg_by_src = true +poes = .02 diff --git a/openquake/qa_tests_data/classical/case_27/source_model_logic_tree_other.xml b/openquake/qa_tests_data/classical/case_27/source_model_logic_tree_other.xml new file mode 100644 index 00000000000..f0887b1b75d --- /dev/null +++ b/openquake/qa_tests_data/classical/case_27/source_model_logic_tree_other.xml @@ -0,0 +1,15 @@ + + + + + + + source_model_other.xml + 1.0 + + + + + diff --git a/openquake/qa_tests_data/classical/case_27/source_model_other.hdf5 b/openquake/qa_tests_data/classical/case_27/source_model_other.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..d9e868cf0ef8a4ea44be7041173419bb2e35f226 GIT binary patch literal 68151 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 literal 0 HcmV?d00001 diff --git a/openquake/qa_tests_data/classical/case_27/source_model_other.xml b/openquake/qa_tests_data/classical/case_27/source_model_other.xml new file mode 100644 index 00000000000..dfe6a9de052 --- /dev/null +++ b/openquake/qa_tests_data/classical/case_27/source_model_other.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + 135.705 35.898 + + + + 64.995 + + + 65.00500000000001 + + + + PointMSR + + + 1 + + + + 5.0 5.1 5.199999999999999 5.299999999999999 5.399999999999999 5.499999999999998 5.599999999999998 5.6999999999999975 5.799999999999997 5.899999999999997 5.9999999999999964 6.099999999999996 6.199999999999996 6.299999999999995 6.399999999999995 6.499999999999995 6.599999999999994 6.699999999999994 6.799999999999994 6.899999999999993 6.999999999999993 7.0999999999999925 7.199999999999992 7.299999999999992 7.3999999999999915 7.499999999999991 + + + 0.0017404297316440736 0.0014146743971195982 0.0011498905204148596 0.0009346661052410158 0.0007597251327641438 0.0006175277718075182 0.0005019454175039715 0.00040799655279595776 0.0003316320486023118 0.00026956064924197487 0.00021910712166088434 0.00017809695479484682 0.00014476263969314965 0.00011766749114306046 9.56437275615485e-05 7.774214044171201e-05 6.319118414293873e-05 5.136372282392555e-05 4.175000133508116e-05 3.393567513504588e-05 2.758395233639655e-05 2.242107821543914e-05 1.8224536578811047e-05 1.48134594742065e-05 1.2040831910595241e-05 9.7871556169343e-06 + + + + + + + + + + + + + + + + + + + + 135.805 35.898 + + + + 60.995 + + + 61.5 + + + + PointMSR + + + 1 + + + + 5.0 5.1 5.199999999999999 5.299999999999999 5.399999999999999 5.499999999999998 5.599999999999998 5.6999999999999975 5.799999999999997 5.899999999999997 5.9999999999999964 6.099999999999996 6.199999999999996 6.299999999999995 6.399999999999995 6.499999999999995 6.599999999999994 6.699999999999994 6.799999999999994 6.899999999999993 6.999999999999993 7.0999999999999925 7.199999999999992 7.299999999999992 7.3999999999999915 7.499999999999991 + + + 0.0017404297316440736 0.0014146743971195982 0.0011498905204148596 0.0009346661052410158 0.0007597251327641438 0.0006175277718075182 0.0005019454175039715 0.00040799655279595776 0.0003316320486023118 0.00026956064924197487 0.00021910712166088434 0.00017809695479484682 0.00014476263969314965 0.00011766749114306046 9.56437275615485e-05 7.774214044171201e-05 6.319118414293873e-05 5.136372282392555e-05 4.175000133508116e-05 3.393567513504588e-05 2.758395233639655e-05 2.242107821543914e-05 1.8224536578811047e-05 1.48134594742065e-05 1.2040831910595241e-05 9.7871556169343e-06 + + + + + + + + + + + + From 1a30789e5e67879aa8fd447a4a297d677d93d74c Mon Sep 17 00:00:00 2001 From: Michele Simionato Date: Sun, 18 Oct 2026 04:28:14 +0200 Subject: [PATCH 2/7] Changelog entry for the atomic groups with disagg_by_src [ci skip] --- debian/changelog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/debian/changelog b/debian/changelog index 2afd8c3b8a6..2e5430a7b98 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,8 @@ [Michele Simionato] + * Fixed a bug affecting previous versions of the engine: with + disagg_by_src the rates of multiple atomic groups were all attributed + to the source of the first group in mean_rates_by_src, and the + ruptures of the other groups were not stored * Fixed a bug affecting previous versions of the engine: with site_labels the atomic groups (cluster or mutex sources) were computed only for the sites of the last label. This affects the From c1eb1c6f350dc331adb04523d797c221722d38e1 Mon Sep 17 00:00:00 2001 From: Michele Simionato Date: Sun, 18 Oct 2026 04:37:06 +0200 Subject: [PATCH 3/7] Store the ruptures of all the atomic groups of a task With few sites the atomic groups of a task were merged in a single result, keeping only the rup_data of the first group, so the disaggregation missed the ruptures of the other groups. Now classical_bysrc returns a result per atomic group, while the classical task (many sites, no rup_data) still merges them. Moved the logic in _atomic_results to respect the function-length limit. Added test_case_27_nodbs. --- debian/changelog | 3 ++ openquake/calculators/classical.py | 54 +++++++++++-------- openquake/calculators/tests/classical_test.py | 12 +++++ openquake/qa_tests_data/classical/README.md | 1 + 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/debian/changelog b/debian/changelog index 2e5430a7b98..5feb3340c34 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,7 @@ [Michele Simionato] + * Fixed a bug affecting previous versions of the engine: with few sites + only the ruptures of the first atomic group of a task were stored, + so the disaggregation missed the ruptures of the other atomic groups * Fixed a bug affecting previous versions of the engine: with disagg_by_src the rates of multiple atomic groups were all attributed to the source of the first group in mean_rates_by_src, and the diff --git a/openquake/calculators/classical.py b/openquake/calculators/classical.py index 32741255e49..5f5339fa4ef 100644 --- a/openquake/calculators/classical.py +++ b/openquake/calculators/classical.py @@ -363,8 +363,34 @@ def _make_results(pairs, sites, remove_zeros, as_rmap): return dics +def _atomic_results(grps, sites, cmaker, remove_zeros, as_rmap, + merge_atomic): + # yield the results of the atomic groups collapsed in a single task + # (see get_allargs and bysrc_results); they contribute to the same RateMap in the master, with the gids of + # all the realizations; the uncertainties are not applied, which is + # fine because the sources of an atomic group are nonparametric + # (the mutex ones must be, since mutually exclusive ruptures are + # modelled with nonparametric sources) and no uncertainty can be + # applied to a nonparametric source (the calculation would fail) + if merge_atomic: + # with many sites a single result is much lighter, and there + # are no rup_data nor mean_rates_by_src to keep separated + yield baseclassical(grps, sites, cmaker, remove_zeros, + as_rmap=as_rmap) + else: + # one result per group, since the rates are attributed to the + # source of each result (see 'basename' in RmapMaker.make) and + # the rup_data of different groups cannot be concatenated + # (different shapes of probs_occur); the groups are + # independent, so the sum of the results is the same; + # tested in classical/case_27_other and case_27_nodbs + for grp in grps: + yield baseclassical([grp], sites, cmaker, remove_zeros, + as_rmap=as_rmap) + + def bysrc_results(grps, sites, cmaker, gid_dic, full_lt, remove_zeros, - as_rmap=True): + as_rmap=True, merge_atomic=True): """ Yield the results of a classical task as RateMaps: the CSM is built without applying the uncertainties, so cmakers_groups_gkeys applies them one @@ -379,28 +405,12 @@ def bysrc_results(grps, sites, cmaker, gid_dic, full_lt, remove_zeros, :param remove_zeros: if True the sites with zero rates are removed :param as_rmap: if False the rates are returned as arrays of rates, stored right away by the master, see baseclassical + :param merge_atomic: if True the atomic groups of the task are + returned in a single result, otherwise in a result per group """ if len(grps) > 1: - # the atomic groups collapsed in a single task (see get_allargs) - # contribute to the same RateMap in the master, so they must be - # returned in a single result, with the gids of all the - # realizations; the uncertainties are not applied, which is fine - # because the sources of an atomic group are nonparametric (the - # mutex ones must be, since mutually exclusive ruptures are - # modelled with nonparametric sources) and no uncertainty can be - # applied to a nonparametric source (the calculation would fail) - if cmaker.oq.disagg_by_src: - # one result per group, since the groups can contain different - # sources and the rates are attributed to the source of each - # result (see 'basename' in RmapMaker.make); the groups are - # independent, so the sum of the results is the same; - # tested in classical/case_27_other - for grp in grps: - yield baseclassical([grp], sites, cmaker, remove_zeros, - as_rmap=as_rmap) - else: - yield baseclassical(grps, sites, cmaker, remove_zeros, - as_rmap=as_rmap) + yield from _atomic_results(grps, sites, cmaker, remove_zeros, + as_rmap, merge_atomic) return grp = grps[0] if grp.atomic: @@ -511,7 +521,7 @@ def classical_bysrc(grp_keys, tilegetter, cmaker, dstore, monitor): # get_rmap), also for the results of the other atomic groups rmap_id = int(grp_keys[0].split('-')[0]) for dic in bysrc_results(grps, sites, cmaker, gid_dic, full_lt, - remove_zeros=False): + remove_zeros=False, merge_atomic=False): dic['rmap_id'] = rmap_id yield dic diff --git a/openquake/calculators/tests/classical_test.py b/openquake/calculators/tests/classical_test.py index 27a02448105..d7c964562dd 100644 --- a/openquake/calculators/tests/classical_test.py +++ b/openquake/calculators/tests/classical_test.py @@ -437,6 +437,18 @@ def test_case_27_other(self): probs_occur = self.calc.datastore['rup/probs_occur'][:] self.assertEqual(sum(len(po) for po in probs_occur), 8) + def test_case_27_nodbs(self): + # without disagg_by_src the ruptures of both atomic groups must be + # stored, while only the ones of the first group were stored + # (4 probs_occur instead of 8), so the disaggregation missed them; + # concurrent_tasks=1 puts both atomic groups in the same task + self.run_calc(case_27.__file__, 'job.ini', disagg_by_src='false', + concurrent_tasks='1') + dstore = self.calc.datastore + probs_occur = dstore['rup/probs_occur'][:] + self.assertEqual(sum(len(po) for po in probs_occur), 8) + aac(dstore['hcurves-stats'][0, 0, 0], [0.3777862], rtol=1E-5) + def test_case_27_labels(self): # two close sites with different labels and the same gsim: the # atomic groups must be computed for both, while they were diff --git a/openquake/qa_tests_data/classical/README.md b/openquake/qa_tests_data/classical/README.md index 1f6ef0debbf..e41a88262ea 100644 --- a/openquake/qa_tests_data/classical/README.md +++ b/openquake/qa_tests_data/classical/README.md @@ -22,6 +22,7 @@ |case\_25|Test negative depths| |case\_26|Test YoungsCoppersmith1985MFD| |case\_27|Nankai mutex model, including disaggregation| +|case\_27\_nodbs|Nankai mutex model without disagg\_by\_src, storing the ruptures of all the atomic groups| |case\_27\_other|Nankai mutex model with disagg\_by\_src and atomic groups with different source names| |case\_27\_labels|Nankai mutex model with site\_labels| |case\_28|Test hypoDepthDist (and down-dip fractions for hypo placement) with a simple fault source| From ef5a2b67ea09b939bf38d55f0d6085517e131c43 Mon Sep 17 00:00:00 2001 From: Michele Simionato Date: Sun, 18 Oct 2026 04:43:47 +0200 Subject: [PATCH 4/7] Moved test_case_27_nodbs into disagg/case_18 The ruptures lost when several atomic groups shared a task changed the disaggregation (Mag sum .19 instead of .41), not the hazard curves, so the test is now a disaggregation test comparing the Mag and Dist outputs with expected files. --- openquake/calculators/classical.py | 2 +- openquake/calculators/tests/classical_test.py | 12 -- openquake/calculators/tests/disagg_test.py | 16 ++- openquake/qa_tests_data/classical/README.md | 1 - openquake/qa_tests_data/disagg/README.md | 1 + .../qa_tests_data/disagg/case_18/__init__.py | 0 .../disagg/case_18/expected_output/Dist-0.csv | 22 ++++ .../disagg/case_18/expected_output/Mag-0.csv | 44 +++++++ .../disagg/case_18/gsim_logic_tree.xml | 18 +++ .../qa_tests_data/disagg/case_18/job.ini | 48 ++++++++ .../disagg/case_18/source_model.hdf5 | Bin 0 -> 68151 bytes .../disagg/case_18/source_model.xml | 115 ++++++++++++++++++ .../case_18/source_model_logic_tree.xml | 15 +++ 13 files changed, 279 insertions(+), 15 deletions(-) create mode 100644 openquake/qa_tests_data/disagg/case_18/__init__.py create mode 100644 openquake/qa_tests_data/disagg/case_18/expected_output/Dist-0.csv create mode 100644 openquake/qa_tests_data/disagg/case_18/expected_output/Mag-0.csv create mode 100644 openquake/qa_tests_data/disagg/case_18/gsim_logic_tree.xml create mode 100644 openquake/qa_tests_data/disagg/case_18/job.ini create mode 100644 openquake/qa_tests_data/disagg/case_18/source_model.hdf5 create mode 100644 openquake/qa_tests_data/disagg/case_18/source_model.xml create mode 100644 openquake/qa_tests_data/disagg/case_18/source_model_logic_tree.xml diff --git a/openquake/calculators/classical.py b/openquake/calculators/classical.py index 5f5339fa4ef..10c99e75273 100644 --- a/openquake/calculators/classical.py +++ b/openquake/calculators/classical.py @@ -383,7 +383,7 @@ def _atomic_results(grps, sites, cmaker, remove_zeros, as_rmap, # the rup_data of different groups cannot be concatenated # (different shapes of probs_occur); the groups are # independent, so the sum of the results is the same; - # tested in classical/case_27_other and case_27_nodbs + # tested in classical/case_27_other and disagg/case_18 for grp in grps: yield baseclassical([grp], sites, cmaker, remove_zeros, as_rmap=as_rmap) diff --git a/openquake/calculators/tests/classical_test.py b/openquake/calculators/tests/classical_test.py index d7c964562dd..27a02448105 100644 --- a/openquake/calculators/tests/classical_test.py +++ b/openquake/calculators/tests/classical_test.py @@ -437,18 +437,6 @@ def test_case_27_other(self): probs_occur = self.calc.datastore['rup/probs_occur'][:] self.assertEqual(sum(len(po) for po in probs_occur), 8) - def test_case_27_nodbs(self): - # without disagg_by_src the ruptures of both atomic groups must be - # stored, while only the ones of the first group were stored - # (4 probs_occur instead of 8), so the disaggregation missed them; - # concurrent_tasks=1 puts both atomic groups in the same task - self.run_calc(case_27.__file__, 'job.ini', disagg_by_src='false', - concurrent_tasks='1') - dstore = self.calc.datastore - probs_occur = dstore['rup/probs_occur'][:] - self.assertEqual(sum(len(po) for po in probs_occur), 8) - aac(dstore['hcurves-stats'][0, 0, 0], [0.3777862], rtol=1E-5) - def test_case_27_labels(self): # two close sites with different labels and the same gsim: the # atomic groups must be computed for both, while they were diff --git a/openquake/calculators/tests/disagg_test.py b/openquake/calculators/tests/disagg_test.py index 34f85e91206..a2ef77e6f12 100644 --- a/openquake/calculators/tests/disagg_test.py +++ b/openquake/calculators/tests/disagg_test.py @@ -29,7 +29,7 @@ from openquake.qa_tests_data.disagg import ( case_1, case_2, case_3, case_4, case_5, case_6, case_7, case_8, case_9, case_10, case_11, case_12, case_13, case_14, case_15, case_16, case_17, - case_master) + case_18, case_master) aae = numpy.testing.assert_almost_equal ae = numpy.testing.assert_equal @@ -287,6 +287,20 @@ def test_case_17(self): # it depends on the maxMagGRRelative uncertainty on the source 1 aae(dstore.read_df("mce").MCE, [0.46, 1.6310, 1.51], 4) + def test_case_18(self): + # Nankai mutex model with two atomic groups in the same task (see + # concurrent_tasks in job.ini): the ruptures of both groups must + # be stored, while only the ones of the first group were stored + # (4 probs_occur instead of 8), so the disaggregation missed the + # large Nankai ruptures of the second group (Mag sum .19 vs .41) + self.run_calc(case_18.__file__, 'job.ini') + probs_occur = self.calc.datastore['rup/probs_occur'][:] + self.assertEqual(sum(len(po) for po in probs_occur), 8) + fnames = export(('disagg-rlzs', 'csv'), self.calc.datastore) + for fname in fnames: + self.assertEqualFiles( + 'expected_output/' + strip_calc_id(fname), fname) + def test_case_master(self): # this tests exercise the case of a complex logic tree self.run_calc(case_master.__file__, 'job.ini') diff --git a/openquake/qa_tests_data/classical/README.md b/openquake/qa_tests_data/classical/README.md index e41a88262ea..1f6ef0debbf 100644 --- a/openquake/qa_tests_data/classical/README.md +++ b/openquake/qa_tests_data/classical/README.md @@ -22,7 +22,6 @@ |case\_25|Test negative depths| |case\_26|Test YoungsCoppersmith1985MFD| |case\_27|Nankai mutex model, including disaggregation| -|case\_27\_nodbs|Nankai mutex model without disagg\_by\_src, storing the ruptures of all the atomic groups| |case\_27\_other|Nankai mutex model with disagg\_by\_src and atomic groups with different source names| |case\_27\_labels|Nankai mutex model with site\_labels| |case\_28|Test hypoDepthDist (and down-dip fractions for hypo placement) with a simple fault source| diff --git a/openquake/qa_tests_data/disagg/README.md b/openquake/qa_tests_data/disagg/README.md index 093d14fac83..690a4638225 100644 --- a/openquake/qa_tests_data/disagg/README.md +++ b/openquake/qa_tests_data/disagg/README.md @@ -13,5 +13,6 @@ | case_11 | | | case_12 | Source fragments and alternatives of fragments | | case_16 | Check the NZ22 K20 GMM has required attributes | +| case_18 | Nankai mutex model with two atomic groups in the same task | diff --git a/openquake/qa_tests_data/disagg/case_18/__init__.py b/openquake/qa_tests_data/disagg/case_18/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/openquake/qa_tests_data/disagg/case_18/expected_output/Dist-0.csv b/openquake/qa_tests_data/disagg/case_18/expected_output/Dist-0.csv new file mode 100644 index 00000000000..b12fb44cc28 --- /dev/null +++ b/openquake/qa_tests_data/disagg/case_18/expected_output/Dist-0.csv @@ -0,0 +1,22 @@ +#,,,,"generated_by='OpenQuake engine 3.27.0-gitc1eb1c6f35', start_date='2026-10-18T02:42:48', checksum=2496305347, investigation_time=50.0, mag_bin_edges=[5.0, 5.1000000000000005, 5.2, 5.300000000000001, 5.4, 5.5, 5.6000000000000005, 5.7, 5.800000000000001, 5.9, 6.0, 6.1000000000000005, 6.2, 6.300000000000001, 6.4, 6.5, 6.6000000000000005, 6.7, 6.800000000000001, 6.9, 7.0, 7.1000000000000005, 7.2, 7.300000000000001, 7.4, 7.5, 7.6000000000000005, 7.7, 7.800000000000001, 7.9, 8.0, 8.1, 8.200000000000001, 8.3, 8.4, 8.5, 8.6, 8.700000000000001, 8.8, 8.9, 9.0, 9.1, 9.200000000000001], dist_bin_edges=[0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 170.0, 180.0, 190.0, 200.0], lon_bin_edges=[133.46570921391037, 135.68, 137.89429078608964], lat_bin_edges=[33.88136, 35.68, 37.47864], eps_bin_edges=[-3.0, 3.0], tectonic_region_types=['Subduction Interface'], lon=135.68, lat=35.68, weights=[1.0], rlz_ids=[0]" +imt,iml,poe,dist,rlz0 +PGV,2.00000E+01,2.00000E-02,5.00000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,1.50000E+01,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,2.50000E+01,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,3.50000E+01,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,4.50000E+01,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.50000E+01,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,6.50000E+01,4.80213E-03 +PGV,2.00000E+01,2.00000E-02,7.50000E+01,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.50000E+01,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,9.50000E+01,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,1.05000E+02,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,1.15000E+02,2.72122E-01 +PGV,2.00000E+01,2.00000E-02,1.25000E+02,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,1.35000E+02,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,1.45000E+02,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,1.55000E+02,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,1.65000E+02,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,1.75000E+02,1.19650E-01 +PGV,2.00000E+01,2.00000E-02,1.85000E+02,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,1.95000E+02,0.00000E+00 diff --git a/openquake/qa_tests_data/disagg/case_18/expected_output/Mag-0.csv b/openquake/qa_tests_data/disagg/case_18/expected_output/Mag-0.csv new file mode 100644 index 00000000000..36d82ea7f7a --- /dev/null +++ b/openquake/qa_tests_data/disagg/case_18/expected_output/Mag-0.csv @@ -0,0 +1,44 @@ +#,,,,"generated_by='OpenQuake engine 3.27.0-gitc1eb1c6f35', start_date='2026-10-18T02:42:48', checksum=2496305347, investigation_time=50.0, mag_bin_edges=[5.0, 5.1000000000000005, 5.2, 5.300000000000001, 5.4, 5.5, 5.6000000000000005, 5.7, 5.800000000000001, 5.9, 6.0, 6.1000000000000005, 6.2, 6.300000000000001, 6.4, 6.5, 6.6000000000000005, 6.7, 6.800000000000001, 6.9, 7.0, 7.1000000000000005, 7.2, 7.300000000000001, 7.4, 7.5, 7.6000000000000005, 7.7, 7.800000000000001, 7.9, 8.0, 8.1, 8.200000000000001, 8.3, 8.4, 8.5, 8.6, 8.700000000000001, 8.8, 8.9, 9.0, 9.1, 9.200000000000001], dist_bin_edges=[0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 170.0, 180.0, 190.0, 200.0], lon_bin_edges=[133.46570921391037, 135.68, 137.89429078608964], lat_bin_edges=[33.88136, 35.68, 37.47864], eps_bin_edges=[-3.0, 3.0], tectonic_region_types=['Subduction Interface'], lon=135.68, lat=35.68, weights=[1.0], rlz_ids=[0]" +imt,iml,poe,mag,rlz0 +PGV,2.00000E+01,2.00000E-02,5.05000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.15000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.25000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.35000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.45000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.55000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.65000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.75000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.85000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,5.95000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,6.05000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,6.15000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,6.25000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,6.35000E+00,1.37909E-05 +PGV,2.00000E+01,2.00000E-02,6.45000E+00,1.25290E-04 +PGV,2.00000E+01,2.00000E-02,6.55000E+00,1.41311E-04 +PGV,2.00000E+01,2.00000E-02,6.65000E+00,2.16021E-04 +PGV,2.00000E+01,2.00000E-02,6.75000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,6.85000E+00,3.04486E-04 +PGV,2.00000E+01,2.00000E-02,6.95000E+00,8.91542E-04 +PGV,2.00000E+01,2.00000E-02,7.05000E+00,5.70299E-04 +PGV,2.00000E+01,2.00000E-02,7.15000E+00,6.25585E-04 +PGV,2.00000E+01,2.00000E-02,7.25000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,7.35000E+00,6.52384E-04 +PGV,2.00000E+01,2.00000E-02,7.45000E+00,1.27113E-03 +PGV,2.00000E+01,2.00000E-02,7.55000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,7.65000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,7.75000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,7.85000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,7.95000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.05000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.15000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.25000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.35000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.45000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.55000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.65000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.75000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,8.85000E+00,5.73661E-02 +PGV,2.00000E+01,2.00000E-02,8.95000E+00,2.24905E-01 +PGV,2.00000E+01,2.00000E-02,9.05000E+00,0.00000E+00 +PGV,2.00000E+01,2.00000E-02,9.15000E+00,1.22968E-01 diff --git a/openquake/qa_tests_data/disagg/case_18/gsim_logic_tree.xml b/openquake/qa_tests_data/disagg/case_18/gsim_logic_tree.xml new file mode 100644 index 00000000000..1316c6801bc --- /dev/null +++ b/openquake/qa_tests_data/disagg/case_18/gsim_logic_tree.xml @@ -0,0 +1,18 @@ + + + + + + + + + SiMidorikawa1999SInter + 1.0 + + + + + + diff --git a/openquake/qa_tests_data/disagg/case_18/job.ini b/openquake/qa_tests_data/disagg/case_18/job.ini new file mode 100644 index 00000000000..050613dae68 --- /dev/null +++ b/openquake/qa_tests_data/disagg/case_18/job.ini @@ -0,0 +1,48 @@ +[general] + +description = Nankai mutex model with two atomic groups in the same task +calculation_mode = disaggregation +random_seed = 1066 +# NB: concurrent_tasks = 1 puts both atomic groups in the same task, so +# the disaggregation needs the ruptures of both, while only the ones of +# the first group used to be stored +concurrent_tasks = 1 + +[geometry] + +sites = 135.68 35.68 + +[logic_tree] + +number_of_logic_tree_samples = 0 + +[erf] + +rupture_mesh_spacing = 1. +width_of_mfd_bin = 1. +area_source_discretization = + +[site_params] + +reference_vs30_type = measured +reference_vs30_value = 400.0 +reference_depth_to_2pt5km_per_sec = 1. +reference_depth_to_1pt0km_per_sec = 100. + +[calculation] + +source_model_logic_tree_file = source_model_logic_tree.xml +gsim_logic_tree_file = gsim_logic_tree.xml +investigation_time = 50. +intensity_measure_types_and_levels = {"PGV": [20]} +maximum_distance = 200. +truncation_level = 3 + +[disaggregation] + +poes_disagg = 0.02 +mag_bin_width = 0.1 +distance_bin_width = 10.0 +coordinate_bin_width = 1.0 +num_epsilon_bins = 6 +disagg_outputs = Mag Dist diff --git a/openquake/qa_tests_data/disagg/case_18/source_model.hdf5 b/openquake/qa_tests_data/disagg/case_18/source_model.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..d9e868cf0ef8a4ea44be7041173419bb2e35f226 GIT binary patch literal 68151 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 literal 0 HcmV?d00001 diff --git a/openquake/qa_tests_data/disagg/case_18/source_model.xml b/openquake/qa_tests_data/disagg/case_18/source_model.xml new file mode 100644 index 00000000000..dfe6a9de052 --- /dev/null +++ b/openquake/qa_tests_data/disagg/case_18/source_model.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + 135.705 35.898 + + + + 64.995 + + + 65.00500000000001 + + + + PointMSR + + + 1 + + + + 5.0 5.1 5.199999999999999 5.299999999999999 5.399999999999999 5.499999999999998 5.599999999999998 5.6999999999999975 5.799999999999997 5.899999999999997 5.9999999999999964 6.099999999999996 6.199999999999996 6.299999999999995 6.399999999999995 6.499999999999995 6.599999999999994 6.699999999999994 6.799999999999994 6.899999999999993 6.999999999999993 7.0999999999999925 7.199999999999992 7.299999999999992 7.3999999999999915 7.499999999999991 + + + 0.0017404297316440736 0.0014146743971195982 0.0011498905204148596 0.0009346661052410158 0.0007597251327641438 0.0006175277718075182 0.0005019454175039715 0.00040799655279595776 0.0003316320486023118 0.00026956064924197487 0.00021910712166088434 0.00017809695479484682 0.00014476263969314965 0.00011766749114306046 9.56437275615485e-05 7.774214044171201e-05 6.319118414293873e-05 5.136372282392555e-05 4.175000133508116e-05 3.393567513504588e-05 2.758395233639655e-05 2.242107821543914e-05 1.8224536578811047e-05 1.48134594742065e-05 1.2040831910595241e-05 9.7871556169343e-06 + + + + + + + + + + + + + + + + + + + + 135.805 35.898 + + + + 60.995 + + + 61.5 + + + + PointMSR + + + 1 + + + + 5.0 5.1 5.199999999999999 5.299999999999999 5.399999999999999 5.499999999999998 5.599999999999998 5.6999999999999975 5.799999999999997 5.899999999999997 5.9999999999999964 6.099999999999996 6.199999999999996 6.299999999999995 6.399999999999995 6.499999999999995 6.599999999999994 6.699999999999994 6.799999999999994 6.899999999999993 6.999999999999993 7.0999999999999925 7.199999999999992 7.299999999999992 7.3999999999999915 7.499999999999991 + + + 0.0017404297316440736 0.0014146743971195982 0.0011498905204148596 0.0009346661052410158 0.0007597251327641438 0.0006175277718075182 0.0005019454175039715 0.00040799655279595776 0.0003316320486023118 0.00026956064924197487 0.00021910712166088434 0.00017809695479484682 0.00014476263969314965 0.00011766749114306046 9.56437275615485e-05 7.774214044171201e-05 6.319118414293873e-05 5.136372282392555e-05 4.175000133508116e-05 3.393567513504588e-05 2.758395233639655e-05 2.242107821543914e-05 1.8224536578811047e-05 1.48134594742065e-05 1.2040831910595241e-05 9.7871556169343e-06 + + + + + + + + + + + + diff --git a/openquake/qa_tests_data/disagg/case_18/source_model_logic_tree.xml b/openquake/qa_tests_data/disagg/case_18/source_model_logic_tree.xml new file mode 100644 index 00000000000..f951f3d04c4 --- /dev/null +++ b/openquake/qa_tests_data/disagg/case_18/source_model_logic_tree.xml @@ -0,0 +1,15 @@ + + + + + + + source_model.xml + 1.0 + + + + + From 511578e6a3bb33f0e179626e943ded2e51a6636d Mon Sep 17 00:00:00 2001 From: Michele Simionato Date: Sun, 18 Oct 2026 04:52:00 +0200 Subject: [PATCH 5/7] disagg/case_18 uses the input files of classical/case_27, avoiding duplication --- .../disagg/case_18/gsim_logic_tree.xml | 18 --- .../qa_tests_data/disagg/case_18/job.ini | 4 +- .../disagg/case_18/source_model.hdf5 | Bin 68151 -> 0 bytes .../disagg/case_18/source_model.xml | 115 ------------------ .../case_18/source_model_logic_tree.xml | 15 --- 5 files changed, 2 insertions(+), 150 deletions(-) delete mode 100644 openquake/qa_tests_data/disagg/case_18/gsim_logic_tree.xml delete mode 100644 openquake/qa_tests_data/disagg/case_18/source_model.hdf5 delete mode 100644 openquake/qa_tests_data/disagg/case_18/source_model.xml delete mode 100644 openquake/qa_tests_data/disagg/case_18/source_model_logic_tree.xml diff --git a/openquake/qa_tests_data/disagg/case_18/gsim_logic_tree.xml b/openquake/qa_tests_data/disagg/case_18/gsim_logic_tree.xml deleted file mode 100644 index 1316c6801bc..00000000000 --- a/openquake/qa_tests_data/disagg/case_18/gsim_logic_tree.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - SiMidorikawa1999SInter - 1.0 - - - - - - diff --git a/openquake/qa_tests_data/disagg/case_18/job.ini b/openquake/qa_tests_data/disagg/case_18/job.ini index 050613dae68..eabdc04715a 100644 --- a/openquake/qa_tests_data/disagg/case_18/job.ini +++ b/openquake/qa_tests_data/disagg/case_18/job.ini @@ -31,8 +31,8 @@ reference_depth_to_1pt0km_per_sec = 100. [calculation] -source_model_logic_tree_file = source_model_logic_tree.xml -gsim_logic_tree_file = gsim_logic_tree.xml +source_model_logic_tree_file = ../../classical/case_27/source_model_logic_tree_other.xml +gsim_logic_tree_file = ../../classical/case_27/gsim_logic_tree.xml investigation_time = 50. intensity_measure_types_and_levels = {"PGV": [20]} maximum_distance = 200. diff --git a/openquake/qa_tests_data/disagg/case_18/source_model.hdf5 b/openquake/qa_tests_data/disagg/case_18/source_model.hdf5 deleted file mode 100644 index d9e868cf0ef8a4ea44be7041173419bb2e35f226..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68151 zcmeGF3p~^9{|Aois3RSe%3&SuZb>XD6YjgaPxqa^|L^Df_&*-M-*)Z&dOxqj>v|oo>zZw^>k@E8 z&tT=UP0Pfl9!r*pEfibz^>+3moOx(0oA)(q7SEQSow=DV6%)HRgHz{E-^>%6dWwl{ zn8{x~!~gqwr_A*A#Y8n{`OngsW@49s(|0>&GyXsN|0)X{(LZ=%N@2?xtu<%phnaCU z1H~NAxjSj?R-K`H#2_A*oNj3CR+}xK!Fy-%?6}=LoADhrJ)&nef3wGd{Z31jGwo+- z!m{~Oqk8fBsUf@k`VGi=cL#{0BlHGo!F2n@Qd1>Mubp#tz3c(K;B3a82w#*^cKR`kr!4{yE!0zw&0^9^#H3N8yPx@F!NMsU|M}Q4BT@KTxuXULkLZcblUz14 zAjLM%jG&H(`&Swq)H@_LZ{bXi&P*%j^!o*H?KD4`Dff$s9TS;<>fycoD=Ag@O2op& zztZdEcZYtgJ7jh|YE3s3o7MGu{ENDarqIIqVhiTSifpq`Y{9ZwEzU`Kn*2nPS*!o! z%n*(JsW-}5FZ|5<^A~=tK5Y=uDmL?ORu&n)ch>qdrWFgDS*!HQw2|MJWkRPp^l!GC z|9u(IXS&Sk_riCx{rsGIwK|?Xuoy5fZ$5C|Zm-tpeQOs=$%#oBEts4t5xaGFx477R zk9pEwtwr41)dhC<8v|}`DP1ilzkb0JuU6d#_@&1zK>5fyUBXcH0;@+)Q1?>rU0QkY z!S=0JFPiOew6qMkcPIG6S*v4V0qc&a(Dc@y*Az{0Qfe_J@&Vz9n zW8{K!mj_zvNV;9=JZ}zjj7lTaW2l{tb!3;zAIS-LLljyd&)4O^c~?zh#(m*znxi8f z)+guVPkJ^@x^5}f!M7DL<*|m0I{4Tu;g%aRBp{!P##FFIjL&}&n7tGhb@nnTg-t{F zV7?_1{FXEQ+I|*aw8!K)5(t0XVe&IZEv#<_I-BT|Wi)jQ1@Z_q&XAnIsAKoR$8+@jjh3Kt#}FJ40)sOpr!eZ-v~MA^wripucZtxd@XCL@R=)Kx{F3D0Gu_vJ z2N5{gL2I0P(Ix4@c)Qm@o^>j%`rm^*&|0>uixO9h>I4`}K)gne*MV9MxtIO}=(ssN zAG$wYbLk>*FbVrQV*Imxs}cP2kHC$3dVY~YE9#@gAPd=Q%DoI8OyR%AjMx7Ys3@f1 znXShvCW-Y21pGmxm2a3%ARzL4OXZ3@k{y!jg-71fnO* zDVgY+hvRhdd5wq$!#O2e0ivP6eMfA=(Yd9MlDO1kR3SM_J1taeZV8M!6<)*2OPOnZ zt^Fe%=^j}F#}%Mvb4xcyWKPp;b+qQDf=JVk0_lv;EvjaXb8iufwn%axZKEZc(C3yy zyi<3^R%gz=fhS4iyBsWSZl0!h7eY_dHbus%(BtQjDD_GipVfS`a)+MD(|?+}Qu{ML zyLE@A&zY6>+b*bjArro*4KCcHeYVO~PAOk=B9t_W%3BAzD(Zl=1I1@Yj^#(%8_S zSN>>dQ$=cNd-ZRt(bsjVV63$1l{>|_It$LudyEz2{X1{_=8qBf0fv}hWxr|;tgkYK zQjLD!6+B|=5aVeyV6|QY7??sWKU&|N!O-X@`*lO~8TH&T5Z3fBVtd28{X`i<;M(v8 z)$&{@M*xI))=IP<)V?G>_*Cw--#0*(?P7a<&yaT8b0H#xw_z|b_I0S|XOq^W+Lsmn z6Cf%mHP0rl8wn6|Sz5=L6u*&%FFbC{?m3KE(YU6x6Df2%x9WY9>|#fxFXT*vDgUp8 z>VnN+6;nO=)C$pZZLT0I4oJaK9*MF z;asTJ5&5gI_mjY&fB~V(un;tyheIK-BVx#ioy7h8Uxr!vxhIFXENa33Rfk_StIE`P zk0q*CBG4;(|1Y&I1e$t?dS!RS{?`rrHxCxOnk2Nd?vxcMb%YNcgC!MxwxeZvSQP$O zp>Q6JV-?`lnq+Nr@62f_&`G`N=lOe&j=a=gv)$nSk^4v191YxY-|yj(^B?rKSUZyT zWmoSvAzd`9SA--uYSEuWMF{ZEpQn&+#rZ71{nY=$MT9brfEB8#@qt0^e0Hl#CIsP< z8A|p4-HC|W5;GL)^z!2uDq>GnA?E_NsZD{&bJTXt<>FpYi;Uy;?QhH?PkhU=fN%O`uIb8o`o0Z;U$rAg6*p#qFA_|jL2tkK{AGO+M3NRsO&Q=U zDiWBQ3r7xn@-G*Gs=gThuF(vC6Fu;ni~cOQ*rKm3$Ve0N*)78Rx&6TCtI4eM_-Cj% zls-4k3F}GL4@If7F!;71faB<*B2dMJph1F`wrdX8vjr~MJn8sFd;+5*EFH_QC#hA| zfQ`7PvJq#g77s8bfLB)~TlTR~TX>`fA#c!ACuYEGz1l~TRnvJQvDqyH3(=m0SjkGE z2DXED1Qo^#tH-cqBG)Lc!WZtd?N*VS7a~|;e>8Qn6|oyek9!Vw;B)8#Xq=i$vQ|<3VQd& z`Ib!44wHw{WEJR+Ca-(#%u z3>6;4w|gxgb8o*`bXj(uLKm!a=?6TkRn3#Umy02O5RUpDJOzFq+TEztWxl9u{-`Oo z>EMJIY1KRAyQRZRIyZS8vx<4B$!)vNR;e_7>+f@IYYULzd?YSzZR6UJ#l=;xPJcM#Do$j3lH5O;u+%Zc4 z*TRbnl|w{g<+6*&i!mO^c0IvzTb7P$5T()ktXfM8vvUm`xv^1k*kyR@#Jo7K_uj@}0x*+UAYE%iL^x$oAq_6AQQ9v57Ke z3h5tRKTCTj+rytw8vC(JZ{y<}l26(#)Vb>rQD*bVRQdsm=;FpR6D~&H6jwy1#onwR zc6qNlie}z97Y5cP9RH1b%XxnGTk=`zE_m$NT~r1sRbv%VQFunysAZ$qO5QDpZ6P;p zQWxl8LVib_a~L+ymP|Q@i&fo>HFt|0g$zq{T877lXTwpQnmu-X%elAM&*X2%n)_I^ zwDo`3?}-4FK`Zh5z;Hyx(g;Dl)10J!#wc^ z_|-yt)ZTH0Y#DeGs!0>FvPu3lYY)XYwVy5cv?x%#^UM`tuKkJPTY!1~SYZD3BmLtb z{k*a5wF((4FOeT=K*UScNIzB6CZ$)ftaEcJWefR^H&JIi= zk>d>WL#;KuHqnm{s|}y*A$KMWOLt0e+M@^$shtdvLJ(W>t&thu;)^pwcr{$Go_VY@ zn9x>JS={qT7NZb=j3ChRO^29KO5;Kc8tM;8do=q9KFyG`7JG_%39x}H`%co6Z0bn{ z?jh?aGXq>-QqM(7dOXC;2NX-}-xw=%*5L)fTY&Jeduxd49y_7~i1%{S9ttnKj%hFw zk4LngLh0%2KFBCihQzYBAgyx^+1B#^M9qFgoB#+nwQ@v1^1Q z!lyQrBy-O3!P}CZT#_LqRO@U;C#>QrC$tsTq&YlkqPz+ALTP*v=N$@LGq6V3qU714 z!pSw$Ww1!UN4n&$!8hTyk00g^$3=7_F0;s|+QZAx<0uP704L_Lw=&&n(7_M(hsI6e zGtfdw)9P*J(CixHbrxqK6||hsY}z^<@RpIf?c{47$6|6r?TYcm0bcj0k-5LQkr-{w z*X3^(o}{imEno`ZH&DLvYPBFlBU|$H1fpAK^1MDtUM`j_ zhCi7-AD;{ULnoH5Mq|&fwBW%XtCvhZ8t|tUn-(7Aq+~3zh&Tp-JZ$i;-lGv``gtVX zisyZuS>9l~KRm^s!>MjB^ErnZVJI&9SbzMQ@li%jlOFTJPI+BH zR8JAUU=QSp@fs>09#N3!&?sw%_e+aXJJXU!FIttIBGWyNH&R~86nz`m0=X0pl`TKl zQFHafqo=icYy7SB?jGIMvh_=9+D5^_74aVTZpntt->9B&D&G3Zu_uqVY*nqjz02_C z?aQlk5BY3S-TLWJ;@f4JtCqSA?aHF|>SU`Rz3pQdRAfRdDNUIvseCCi&*w}(Peb9& zr?wV(Q_@D~`$0;O_A~k2*2IOnI*9 zdtG-*nmDCLaU^T$NUo||XKVgD2Nb#+73f}5o`9)%hNe7WcOPcFcXmKKJKPsGQpTv1 zz$CY}b}uK-7+;93rt0|Xaw83!WeT>zXuJEl07{WVMde3LuH^t|18gt^a}CXggk&^T zSYSc`z(8rO?njX?VOMNnhDHUB1VH$C!`6qMiE@|!OGM5*L2lC1+^E2Toi<>|twX*B z4F0!>4gza7ly?C(p1{8ZZbkpE5&|%A+_C@D4Bv^)o?`_zhA_{Bj!PP?!T%*P@oDl{ zfd#j;C1^YzdkNV310vme$Mc!pr8$zWlA3R;cFB+}Ds@|K(B)HPNxW&!`1rI^h0*3%c0Ly8txRHm@{}ce)CvMPu@1#|D^FDyZq;1 zx_g!eB2|+04AkJyIRT&_{squg#Z_{`n42d5&ze62@p6E4507J7Cl%;=v8ijJ@g@xc zzXUXCNyl0)6T_3^zc#+iXq>tGH8!dBZ-Di`*yJy1-!F>Z>6Fq+^7v)(XH|A%Mv2sD zDg2Ye>nn&~u)}*mo`J}Gl0dYUvhUtsH>7-j&~$J4Io68W)vm_>19!Z{Tb^43?e%g-I%#{ zOlJY(?hPfuY4(K?|3PG6S^2uK&#@i~9Y^O(K9)s9RdLnhMybMRQ*|_n zBLapHpMIJ##12c#%+|m{$CL9&qM99|LU?_f1ZnJzzXo=YVhrJW)wh|5VCk1*9CH}m zI5rIkO^R!H$f@2C;o2aYk^uT4-P8pgrm%XfNF_s9ovw#?-ik7w;AD0$8|||Xk7~%6 z)9y`Q!-|@h{i>-PvL+F z@?Cg#h!nX^TZs2aoDh(r310>!AU;JEMVVj-%o{dDXhV=>IHR5^8rY70V+c&71Ye|2 zNi@mFtKKH!SrV-~6D`tnG&#>+l>gNT%wh00eUTm5k_Ol}12T#~)C-g9MUyc-v-;CA=V+i=5cmkDSSVyHXIUHXBUkU+2p#wpt7$TXAKc2mrsLI`Yt46&JH4s{oU~?X_~Qq!k`hn-_H0eq-AA9- ztl9Ofef*$RGS|T%^o=(mRki5~_<3E^hBnK3$y_>|161siy}N$^!M=8W zwCV-KS)<7LVogi|oXNvv4dC%U*R%(iFMwICtH!fhclA5uHdfZAS2Ky{49}svcuOZR z?^w>)1$I0^Tn;Z5$!b;PAwPEjZ@bB&3xqQ7Wb(4;C61SzjRLI>(%zP_c%0v2-F~b?%zT#I? zf)x7q-UitUkDWuVmFz9BE>${Ww_?9<04$CH6M_lseCk$oYL7RQ5uPuZuhq*83wF%C zF>m~EvypL`YL%}nlV>Acv1+{=9&^2856_~Ly#a|YVMtCib`pmuA348)8Y`~udJsf!$D#$RUTX@AO<%^B@P@WO5a9CK_!57WbyeCs07Wq<`4K6kv zs)QT@bN@buCHj+eFlJPdyN#>XU4fK;XVn~(M2T=J8(H3^p2d|Az`F8IH7o2BInsQB zILvjINV(z^T^jE75`9J264kL~!ZnoFe5+r*lwq}>M9&Huxz!XgT1=N7KUeNwSm_ag zHeCV;4>XNK-RXCID~vuQw>HT1c*SmzH;FR5>{(-1`9xZex3zr*w`Jt#2#@z&aZYPZB-gTaz!uBcyP`{>4q@+flQhofuLblbjmmf*WhJsO2U7qZ_D@Zo z6Lmo9(lLJgr>g*if$|oX9x|UpQe;*<@j6$mbs+i5;RW=%dQ7DT3N-Mk}UVo zJ1)7?t=MB#{$;#5nngCosdlFY)gkkLE;eA_RX2%s6lk4VBGvm`Od z;<>ydzphDH;R1hhFE8H}feRZ796_e5eB`PYYgV{Q*{3U{nx>JVSzp>6-k2tP9q-@s z26s%}yg1c#U5XS$k>KKRsv}9uo_b&qt%x&iblimxV?#TP+~PwzIrm0SUqvXrv5&N_ zX!Jh8jUO!@J@Z_`+&i2CZ+b?#;7$nqbW`~bqPD3!5c-&IR->&YT|Qw)rJmv^jRqEn zf6n;gT^69@q}BhherbA!N31^a=wQ)7Q*)kFM$wa+z@E@iDb|^Ez@ro?K>hL{SNYeh z$Hps(&+_A*P#72cGh1{5N7l0D_p9tnDka!bx*Fn zlj0|Vuh4Dm+A~(BkmoQna{X(JOUL`+T3lRIw+BB!^MPS%iZOZDy*TgYQz%z;zC&vq6+l3@(m%~x08biau%P186( z62c0|#ldp8zk6WA8C9Cm@`0oHevv!?X|fn|6)9#?TtiRxdP2?g_lf51$V1Z(L_KYbY+`(tqQBX^*SK9F}R{)oIQb%4~!nl z_>9mlM1`>8xzy(llZeb@bB+_>LiQ)MQWHE43F1oV4sp;l{>eJsU^cC_*rRS_1J$Ko zKf(!nv9f0YG13@NQ^)|nk@sq(EwusLdGZ9nG$_V4xn|GjiNZgVyc zdzSuVJhrRqv_jv3_uj{$teX|4uyiC5>t2B?9C6ek{>{IUXB2BYA*dILYyj{~U$6y-1 zpN24#X$YEzxu>V$_37Z^?e^2KXgZv`^TIStpDqo&HVvDnORp%?L zTYQgy(KhR5;(VXt>5dlvwJt@?^!*<@LS&#bb-!JKG(2ZAzgdAwX7VO9)AN69 z$N%dU=*EmrC+;6#_+yFw%PSCSMu6mk$>C{({g&ukQSi9gbdYhQsqJ@jRTKCn0FEv_hs5tlXx{!BXFKAW67SUhfYwF6%)~~Kv_wn=Q zt??&h6I1;pw(i(!7IS;?L4U3GtqbX9%QFuzTlPr57E>z`?`Qey^{LgeuN#hAM^O>F z^*OOjBrX~UxtlGYxik8)UGYPZPH2s3io49`77NF&mOEn~!aaIFShm0mHfFVH$!A$U z^obxP!Dx0fqzMMQY6>1qbcs{%d8bi*otoF()thZ5tQU@f`KI5I9D#7CVytX3xm~Am z1-nCDvO^zMXXhdPV^Zcr>;~4~`I!7%sKrRsrkNCm4*d&Z)kH%$UAb`nE9wC?9geS# z2e`wOUC;jsA@~T(7@VFl56_aEi3IjQg}VTpfGo4QCKm|xe0Dp$ z4Q)?PnsY+%w@wAEUlyNJ8>d0OvqQEl@^MFlaYus@c1}r~YvVb`m~}G+7b@kcg)8vF zT$N^-K|FS`1qh`%hu*7cfjmIA^v7t_hdEm*IOJeDY%;TNZb9z!`ymIdwW)2claprS zb9A3U#pXsCxhgCwrfP1n^rAk}r&Os4E=+=b_2Ex99wazE5Q(PV=skXYP7axpX`|dV zYwhf~fyXlNoCu$^pC%2h#c8CzOXk?;SZPmaRl=h=jgh*SVY)sEj$!m9lJJf5TzoI` zx)Ykzw;{>L3XaYme4Ivj^;6kI6*RP3Pkm({(lp0zUZ+isk|q)#1+DaZIgsp1|7i*l z*;q6^M2XMf+IyI5K!2JH4Wp;|HVxU~Ju4NmbN)Gi`>)t;ut*y)%X})i2pf`2A}7^g zPvtI&x8C%e1GyKXp1WZ1fOf6K>nYNXcr<%Elk;yx&oKJ0Ue0!$qnt=7F2?){gNhyB z_I|wmv5A8;`kLVq~y=uz^|5aP`maJwW!`ADw$9F2H zTL;GP2#nYCA5qD)(9S%+vvE&jdc{5_q9x~X4x^wxjqB{hK-7r7{>*J+BV6RDtxCz` zRXM?SLTeYI=gRwVZl=4^Zu|vv+4~44Q|X0x$&i2l z_?nTd?jzi?R>*Z>O1?@dPv!|~9+7Z2Hl#oKUj8zHI*)8@2^p~U_Vm^7?LYTIT)H

+I=8y@ZN~E8^{q?#-lb<5zTpL9d05d#+No5>LE97<5%Rb5LiEV2%zRK z>8DEd+6+4`=YMd2JXu%JM1MO$D5UPYxVj1a2cl@t2E!+)@=qdBg_v8yrB5)o`4Gji zjNFKG0^jDG7s#ChOXoY^-@oRK(UW?|dPq7$9F2y#60 zX6MCmj_Ds9s6+4eD=hQfIlZ<;5hGd<5}_~T`Qna|>)-Q-!V&4+MFf;!H#2iuGT=%6V&2yw`YfM;U$@{<#Fm4i_Rir;`m89DHbCGxLZgO#JSYoUk zRWs+_mY8#8xlPdx+gtHzyd;S&Ce)T4H!T!}T5LxU@I$2(+6lXpHRVe`<|A)JRv_m>-vyq9c;6GkCmgqm}Pv={3WCIcQ1`~ z6*bCt_-n?u-K=^JH%D$4ss~y)L3cy|cE#8^pIfKDy1;lrGE3wJ}(wgpt(cc$Ohsk)8ZDtv`}O8Sr!dB-aW z>a;A|L+IzTrwm^xG!O*)9HU4<)tJOqr#o)O#pgSoGM^w;HA#NiPB}B6VX|H)=ACk; zwk7bS!%M(}CW`^ahLZ{}80U@y$8A(7Q9PsetpJ*Da#rHdX5>jo5?z1PZ5e(q@G|dM znFdsRB$5So3-Ue=I&W)JlwV8ujA%wStfa(3Z|54PGa40!b?5^OR3XZUgX=|8B0XfP)Aa0N>KO%b%@kpK(OIdyr65e$%GONxf zcZKjZvK|WEI8@q@CI;`jaR_*smGSk_dtos^QkN7Rq zx!xzmuCJ)su+{P*l)dRRW?h9ib9+;F2b3&6^2qBMUb?T)wmVS(dZ%-g73mSX3GeTb zinPwDJ?zBTHf|0-rJHBjnOZKH8ES@D)*F!3<{zz)CRoS~Dnak?1>Rp9tMUF}Gm3YV zwIyO1|AS8iFP^;IJE@Lw+gc$7x0cS>8D;9huVAm{N?$u|rLZ@RbIC6~lukuA$&{dW zko<=%)|d+Cb;}ijL?4HnwU3;hCtKlG2S;m!?+Dy9wCa$=mUD-2tzwujTD~ zen-!q1^NfRn6DUUKel<(Z8wSK%`1A-AI?{lkO1 zFpcLq-51jkm(ta9*k`<6Xk2aCsQz15VfMbr48prI_pbJv*RL2&@EB2_xPa0wc-PyP zFEX|dq^^waHHz%9c&1$|*C*j2Ubvv+=FkDy({JFU91fw942_`txcIx;{{)p&5~2&! z=A0s7rs(zcI9%UP{}}zILT|@fg&1L>U?Mm>R_GM3P-_~xG zn!}cF(YEliVwVf%s#t5l+^Xx_G1T>bzE2mro1w|dc%c4U-OskPPwjcHD=>>4O!?P+ z^3z*-BN>diU5V1DihtkE`*r{ACm5s1{)mGw`o~*-zuBWJ+8GSTBi?x5Z=(|0TU(YPyaoI1SI{|W;&PM=YmPh(Q$dbpPv@daFV(G zBgrsr4u?fVImi2HrT#QI@(^>`r4RjtJ^qTZx8bnvPtzwj&wi&tLQrAq9MTh*ch*(> z+BuyyAv%)c6ZcGS`sZyH@n}x!oRT;Bou#I>=m3eB;5mPVm1N(G4TYDE+&Ep>4)|uf z__tff|9&qN4Na4_ickx3{oFixxTjem>-BukhPl8W(tG%wNvvz(| zUbGj7=|!KGwe1h^lM-+6>1CM@By1StO2p9M08;G6`oaD z#p@bGpweDsXfL&u(8xjD3;{NbT&>nN>Q3qNDnw$^SrWtvy~Jrh{YQdg-3~#CfyD+Eld>kp)+I$E}rXcFmf^$hM_DA2G;YQk9jA0-0USZ zO+;#ej#gCAc#2V|)TaFhy1St|iA`&@ujqC!SjSZwKiz(qDfsMzcZtP7JCqAu;atgQ zSib*@1Kmt0fJ$SldBk}5KJPVc^6~F0UK*ug(tX&)iLj;oW*~nZcPH>F^8G}{#~>Z9 zbwA_;@9hBoqyyH7Yf4K`<`Q!1p`-w|79n~>Y_@*h% zg|s}1eY;op>81WP6Op{%0dFO7GMFxmcD|x76ifx6>L$roI)b%Ou}!Fq*T_F$X@Jh{ zqZ`_#p{4Dgse>aSfKNGHCJN#k0DlOxE87gPFfT}hvVH1;y5(^iK9V(Q?9SK?2}s7? zLh+iB41Me+oigv9sI`mL>`F?QYxiM*>p4|aE%R3N;QYUm`mG22@ z{};85sGJxE<~;B4N$Q}}*izw%3H%LEVjRnNzKNMn&6n+*DCfM#lqfAy_a@<{?vlmC zV9pUL>h6=m+ZZRYT?7dB(IoL9U4C7!$(uns5+8ncyH`&@xzub z9{$D0Y3EAYR7vMOK2wv}3i1j9T-{_?RKHUK&WZ}z#TuE=6NMi0{IhSF4i5@&B}>^I zt{}>CZ1$CgD#TLOOQK9RV_03svWHLtt0P~kY4aX0=*?Ct^Jj1WvJEK<2$D>c&{IfL zs+A#-_4yji-Z4|YGhpB-_GwOUAb8{`A{zdL|yo!^;0(;hxsXYouzSU)D& z#=40^+x9G=rR1f{3@eNo)=eJL&~6IR#p(IqE*Hi5*!6NfqD6T9e`cf^pLWs-bDoYAoEeEa(&rDnXRhbOEZgnyuX zgBaS~YrBqK*OSx3uf|(8xNR$nnq=;@OHc3atXg$OF>5d9HsC`}zcFY+u$XM_iz;QW zMUac>h}$o6FQbxAgG<@YZ_P76FBm~*Sj&TOZ=17X@$Roj@g$-bxM`W`9iYus(gK9q zXkj|A5AP@i9na5-MI0`I-eW*Gym9{aiEz<(PNk@b`4*?iNjzky-DuKI2G+IHzt6=d z=5(W99HfpGk9tu%tfI*zN2lZRCP6w{5<|86^mz`9Gd-(|@5d!53?H~J`Q{E@rzoE$ z2-I>e%&7mpK+FABhDOB`1jna>LFlg;YQ>;X0{G>+il{Emz0g=jY@aXJiwP=GLOz>t zZ6_f|oF^7|$q7lzvh@KMaUV7iQ;(_;Uw^YM%Y#M<nf>>{#WnKWTok(BDg1o7lxS=pc^u$ zcx5BUM6E1D%qS`DcW=oLNubSVkQ*9vD}VLKu-cW zAmPTTkjj($cN+Gj%7*_ORB-BK`zs#YcrIdga(|PEnWm_zB{-`4i|1V0f7?wHy4MnX zH_VaWXC6}d68VYpUL;2a=ViB7cgZ0(2{v*nuF~9lr)f``PI$`b&w&*<%9+2xERL06 z>b;Y|snhAN*ehz=U!fTbM|!zDv*GOg-(o0Yi}u|#XUV=Q@ElN`BN}ER!BTX>o%xsI zSdLL5tyqpRqMsJ1+6F^Au|(DAC^6u z3FsDGPvck#lSqW(|DKQ{`9u0!-IsUNL&|NS|o3U z=9I1w{*y#^vKm^&!O7IxMIxq5$u(u%s3|*&ye{%b9`d*uPK%9TMh`X; zOv?UEJ`8x>FDQc2UH_BX%-)xCH4UT*GuT+~-~G>KEWV*R2kXu_0f;QZMuBO#q`}4@ zaY|-!c;4t4Ql*Wz5~SxZ0MK3aE&N-V5(GhsDBJm0d6CGBQyi$KmE435xBv7srcLfA z=JK#@Skdc{=!fYqqL<#1hd%f~pXifP`X{AM>z_6{`RUS0)^o#k%KG{z8@5d%i3;^t zI3X5}FXKBo*Tkr~=e%NDyD-u+5EcH<$fUzBcXLrLaUFUjir#W5I?a z9%Z3Y=z5{fv5^z8+D8a&rv2TyxRjc~WVXRz+ez-5dX{=2$&70NyGs;)<~vB?i8vsO zhi37%Yq9T+V^b%dQ`Qy=UyPeJx)0TIG7E9`gxFMsMW3L|r)E*0vr=60lS0bc?sJPV ztHy~OkXD`rftQvcw`Wo*i9b0trf>Bm|n?zCf3$aQkR0 zEO*Eu+3VqWY_``K)0p!*)?5i9XA1``eyO9$>OOod+!UIdd;SE1pUegC%=*kHNRcgU zuhKKJdKGJ$3MyDQ|KsvW9x3A;$wFvCQ}#aSne`Dn?VHys&@*?1XlN#R=s7@%k1ga= zUTtXHh$H}f$fkkhP4df1nrxPYQ|9YJOo+a>(3KQdJ5zON#OIZTs9;L?g09o+75cpu zF7Yj~)FbBpigG&fTJ4(Ig-mr`*k_AC%o9$K+e1pmUHnI&*UsBCpCLqHT)cap3t9PY zHm7VQ=@zjhGs|Reeu+cF_WayNCkYL&j9mt>p3Fk)gnTnD$b$E_Po6i#R8F!o5LQwS znqyQ+PF~MmBTKhj?D6w!uXLOmObBuy8z;l8}hT zNBgWimph(WJLwe2pcg={V0tt>_S}xN>sK#_uOx))pBp=ys9ElnToc~w z*b;}Z&o@F-CXR8|dwe9K?h`hGlF;*rg;DBTZ6mkwi1`#E4N_bK2eDWL*?IT?P#t-~ zSD!(1A2zOTFQbEa$H;#6&xAs09Dn>FiRcG0$?hbU`-k*j{UENmsM}EVd6~0?Cp8%) zd2d8?7LIa)!|;6MTc)zs;+ip|>h^wekH0#q)2*f&HM}SeqA{da;h{cI)qe#$k~U`a z1&G8)vVBuo+smDk#tOUqFXB`ys#iM~ddHVV;L?qWt;5%t%f}Ys@RgGb2}L-`Vcr1% zpqt!XMB9i{iokEN6qfmBMgo+tyIW^KCKmH7)iAF$>xGbXAQR!o!1H7`r$FNT+q`ah zZ)a*|yHBWc7ENrxRPkgS?vnN~Q|`2~A5oSYuv>?d!3l&#kls^%&&*(;SRg4&>=~KOQK>WPk-vuNShBeh9=22G}G)Zy` zZn35J+mD0tgEbCqAig9k+@cYEL2y)w&OG5=K?z`D1t<8T37A~nk5NUIa`z7>n_e6e zBYj$3qJ6uhSCd5O>E#Z4gn)-P;?O~E%$mD`4RVR-(u&FAas>@?^>g`mfQglyRRp5F zv^%bpy?qScSzWxMI1=WkK|cAmD65dG?V(yhyvDmpek$4GrE-z=Ku|-?Wy^iq7Uey- zhpp=rKuged=uW_bd;pJ_^+?xwq)*-@(G1m2xp(j5KnoGKv)y$bF#&$`cmjmbRt+PZ zE@yayO3<~=a6!2R)ngA;cmuH_UyZO3hBN)6h~Zdl@&;kSLjD#(wg+&lA-?+%=a~Es z`ft9UebElB;rNl3{n$^FYZ!TL!^xO=5Juj}_5w!EZ~%MTSb)8P#yiGO{4L3p?LeYI=)w{U6bj((^IDs6@~n+s@$5mx0x-I=ru-H~ zdA`cHNg2X?Bu#mE!P;po}+l~1CYq^RpDTtJy0R&(-#ZLvqfHoB51#4kZiN-PG;YUG*{t%Ae54AX!^k*m4wAd^b@= zhZc>$@0Kk0!=t4XfE8FqnOx{eXZrEjG&N{)O+%!X`QHHbRf5b^e!)PW{#2EkxK#Hc zz6(_pD+`<$F&v0rekL7OcZ z$6}Q&tffLVCtP)OPSLdJMdNvX*ubN;@{!BY7g^%)e?{6@nBQ zB0{bsRYP>7kCP#A_CTKklw||=ZTMI+$&pF>Cx`rpv?8adXmdm^wDt5zm{K}IE+aPE z;rLWVg8gx4S9`#;-0sAXgDjrycMkp$zu9phGNXv2$n^$Orjw5~`m=I^yGTGo>gTE9 z0^;-^WA$F0GhdMBa8q(|#)EHXUPC9G{bQsm`CHeM||7QwE(L zWX4ltYZ@?Uks_1UtI=li3bw^fA`4n43<^bOVwiNKX+u+n8e)G0xCFz`Uki|&BR?wt zwxzpagD%-FD`elG_KVBpo5oy;tF5rJ^|%Gm<8sZf8E=yj;_ClU^m_+;FKt#3Y<=Rl zY`>AN1`h_Thcf=GTCj~C$0)}pR5d0QA|#sz;V)dteo(Ib^EUR`4xD)ZxUOX$qhzMY zguMXz0~PWb|LpiX3qUgJXL7!37F_6lRp1ImZ2i+-nAjsfHXm0(WHk5EJE=d^gUw$% z+vQgU3_8-deO^B1jEvL&-?u?ze$;z z$_LwKQ? z1$`#(pMkBf%4{W(%25mhJ5$IpL;3_I*&{Ke;h~n9A^nJ4+BWFV!4r{W(=|nmo-hpL z$T(m}sth#2wIR6hqz2vKdypNX|9uv;3hNjDXZ_KR9{Rh=*3Z9oHq{Nr)707HsZxAl z1=fY(Dt|v>=-=@ZSa=?yEqPS8_D4vuvl#5!7O;&8gSXH60!>NO6lf~tp<{c$- zO~_m`-f^BK?*I{dAO={oHX#IVChcZe7i4pT>gHNqN5tv=o8@< zqN!b1^nqbCCedXwa%SZB5v`Z2vaiq-YK+$?&?iELp`15JGXsVHhr2g{Yw~#h$F;OY zYXxsqgj7+{qM)L3lPV%A3L+{XM+8Jv6hwp&a#>NiiGUITA#w(}PdSq)S457;89*SC z009Do5JE1J{A1D9w%U*Od;MPjS6;B0o!!~ldG>jd-ORj4oy?p|V_0uhUu~7!-`uo1 zlcP@ar|z)l_ED9nJE>vR;vl3gkR?9I(jSFJ8)Bl{y(0kjHst0BmC62socK3(8_>L? z>x2zfg0q5BuWWCwcnQmrrNV-9JBi*17V}d=FB4Mmqi7d>dyM%iR0~&LL4E~yHFue6pkCmc&4^QVC%g@0 zQrwFB`z1CpmSPRuHA0a%40GT7aokxO@=X0EAl6D}8PL<+)l=v&YL8yhQqfF=W`GxI z1d@U~bRHvukTjM3@_xt@E|?v(2d@l|%B7e;V=s?0eH|xA15s6ZzUyQ!HkE_N)G~X3 zjGOWU52MT9*aad>*iq$(%c47oAWZuZ)2E!K)=7+iqx+P54m7E0tD z^X6R6cUFSVosnQE_om8tM;po(@cU-F%LUA*;=#IQ>bZ?!XORpb&k!DM=S*J6uQLqT zGZ{N01AE#M5O4u!BWo=7YJg`p>20jUGI8;ZvM*VZhhlFIO47w&!jFfqWc+mJB!9!W z-*a>qp~rhbbgmVAq%+F!wK^qW>P)JnORQKGr<-$pc+WWIC3>c>V@T*TS&Ogl1eOuU zNV-$vz|G)2T5ok;V-!V>)}2|t_skd?5pv(N^lXsw7aKoj?Ze) zX>=U7d*YsBii-ljj2SWOi(;|>Hw*=uz$bt_x%F_zQdm+so^kUT+k~MuXbOvmXuvx< z_puKTf5ThswRU)6V~buBlegIWM8amGZ9I!xhwyev(h^1cVVOx4T$NPH_0ea~ZYrJ| zebeYTc5{nXVRPd*qs8y^cg+Me>qb*{kq#O7(p+dYwRs#vSqsf(y_?xWT)7bVIbD2FzM0 zP)7WMOH%W0n7eOB6@6b$;iNPi87(k76)-5Do zy8s0_Ec5Aa41>eR$=$$n1|cw`KKi9TZh5Qoq0aGu8KtpCe82#1flz;Xr`QU+QW&%e zsZwt-t}>$L?R8QQ?JN#;Xf%4NHNBc?n}u-MkStWr79J(rud|dSxj%Y?-p$!LTQOrh zZJ>Lf!9r&GH$^2j2~P`la{SfXmotS~hQ@|xNnW8jNO&JTy@oIvGAKWHPb8;P!BUrZhVjMmuvryk)BA@?ju{aTlqHUbsNgKnjUPGdt0+g+u?`c$rBIL$@R+Do zwG?>ccm$TLRCPE=@|x}|w=sngO8>?1JkT|_qR+6oIqFqu5WlOX^;TngwbF;}1ifPjlA!4o{AU9I*~80UBvcq_2%4BjLMh$){P}_fGWQqIzcdp1 ze=RQjV_=BT_i^F!7dvu4t-#+xVqx=<>HY_|#?AvnB+O$w zEXaA!(VT~G7`QXv&~~1!A39Ga&2#%7%#-8u;0~|i=1Gfru42kO`D8xHWX02Y(qKNX zAFp7Zq|En?;_X}cY1{k`41xa(FvMT!ue8kvV2EAsfgwIvz^-H9Gw>b1Yx3c${0{*` zkjv&xQwb_mpSQ^eK!^|JR{}#U_MI2_S73;^5A}ZlLu`P&Zz?sbXCG)B;Q38$#r1)sj6e_QRJwc~#eG!6Z|J*`J~Ec>)Z|HHr#Gw&4$CNy3BUsK@Y zC(y$3`D?OklS}fa75LjV`S8T~u+~4&UwM~(?g=FSUZdv^cKXjhfy&=MfmGgeQs>iw zzO0#7y?Xwk64EqJzMSV;cFmLD&p%Xb2Ik4k`JA8MPRx^}`MzzOdGgjg*YbU0*!FpD zliAXXpSI2K_r1fKc>y16@mKmQZS&y?^yqym(GM1=Cj{*L51M?qDxbY`{%g=Qs_zqX zi*_U3=coMtlmEUwZVJxe*)c~?U1%L~`2vNpZ-18N80a#;M1JS^)-q7SM0oA44?#M8 ztC%06*S<{NIS+HY3*fZ0dt-{vk)Wn1-Amq&mfv1J=C~Yq1I8z|1-@8xrDfy2 zW8Z~6SsoF(O`dung+gQBW{xhT;xSwXWKJpm+Ow^MvA9P-WdIV_y}shLmgmj=0IVI8WFQQ2@fjRby()Q8IYqDOO<5*aX%TI>= zHTCC2Ukg|Z&9)b)!_jzCN-DDzJX$d$B?-(hyrjAt_K7T@^pWa>B=Fhr!H=?-zE5VF z2-aqM%=C8{Kv4b3+z|u6zZ43Rz<#)EMM>qKa+>~;;dDCAwnfO!g#0P7>BnhK`CPE4 zfH9H~V_Ft4nFt+GF8_4lfm}i0{Z!86$Mk;k{N$s`Igyh&obm$e^_ioV-O7gYa184hT>d?y?6REf&^la;AbELS_lvYqM=%66k~Zs9CSjvfa^h`#=efYT6wAiw_mm`WC+~yV#bMYe{&bk8lj+c{A&fZhnVBmHZXDAayHb1IQ{8A zlfRvQfA*;S!y!5zR+>?forP6wV3HZ5b<;wQUwQr<0+;annfX5*xPOo`cKF@Mv7ujukA z$pPFm-UKaT+ZT`fDIpwMz6s6N{!AZhu=#6$$N1aN9YDexd+_6)D-XWz_mIEI@g97R zVRd6F7zs43)+oPI=3_?+*bi;%%-4u0FF?nz1qBP{DFFx=to~qelyiH21HC|hvxGiPd=IsZYTCa-IpY^OOIoEJSw2fR~*Knh)BkSVNi@tdQ zxc$=(p31Us5&`x;7%bP&Llev`N6Kk}FU~eX6LQ&Rk>jIsG-UEx;qJ+`0QOalIwP8M zsHtbA9C>Ld>S)1AqVW2hN)9H30oVX&aMG!B2(`W5r?8elA3xJ$ka&7J7)f4h3E zJhsXA$AJ|uP9%6QQ8)5E*Qs?!c|e}5Lo!@bc|+OGgS!8YN*0hF;P<%3&u*J`L!o*v zIQQ*NQnaH(u9F>#jtgPQJeC|9GqPLT&!urKtgs+Y1Yqo@e!R96YQ;XB;Zel_|6t~9 zcN?OC=BNMu_FdWd~pz8q*D5-kiimOlOu;1n=hs0E@@6zc#It# z+TS9dQ!>f{KV%d$jY0xquEJ$u8ppN1G6v#gT-)a^}FBtKJVcoejeA8`@HeCE|FNuR4x?ruR z;1FTX#`kD1y<4Z0c?zpwUtpG|h|(iC{7TP><|b2WdEvb6tTk0@Sj*eGH$u#(FJv%} zIy9=xMix9LUrpzxFszN^Y=h_?Fzhv0)42Tu#MM@4^=BX8vj31{yumJVpc8 zT<81C)CqBP?QYh0RJ}SiV@zrP#>Q$EoF`g7P>4hhcP=~YXlGd_Zr?rqm>CgEfdYg;7mqW;B|UB}%8`;; zbKxPTb-+C_HWo~@3m?6X*R#Ee+cEi^4^2_7`3`bGX-5d%&i#xuHq6;hO+O!Qp8Ezn zQ&JN!)W2~+);mJDt26o6#EUlYI2q2HXO+i;@Toz)6q3YZ5ksVuQ_}SNg_E#QNVsA1V>5~qLM5k5D-mhqz@51{PzX7Rf#K>gjYM$&Sq%$-+213fn(-eMR z6C6No6kM~au-ltifT)S*tS-ljcg}W%{LCNoy30L5vO?)G$nKu}#B%qgc4iv^?@>07mf$>gq3;tq2_7W~(d9ErK}OSEvm&e- z%i7AE;pP3T2Ahk8lSg$k?d<5PohA-Lc;K~1r<545oZ*MhKYQ7tVJ-#AAU-N{WJ!WCAlct_x!Ak0T^TLsr$Qxe84Tfi`B zcE$;4P2;m^r+7;HK&0+bge71?*e-ZB_L6Bd{w6=S*>AYJvq(q&94K=ctOxIWd~D3~ zoRyUzg6o}&F*NrBaCsL1`DR)SLHdkhXOxa>f!{eG?-oOH@p7SuCf6D>p7(~Xyt-dl z-Z@ZgWVT=z-FSy>;2D< z*3H`v?HJ@c*jbVKh6xS`P0H>3Ni#}`w=mwHRfYC!&C!-5^Ln73a~$j3U~~KiE5nsQ zh;DzZk}D}N_jo9vf3=CkeKnwLEe5D4YgUI96R>TX)+JUTlo5gGjHL}RX|2_sLNe<) zoi%r|lIdSMG@)Ifo?x?HRbPSLhypbRVU@$Q(&}uyVWWq^p5wy^m5J=(ZYS%A|5ZT)c1sb z{$>Z{e#5;Q>aa}-1{UCFv&B930o2}z5$@<;Ui`^w7BxkCXtI<8>$3rtb@X#hZ_4%^ z0KZoHM3KkDWR$W{+N>*mHn2qXPkBB3z7>Dx7y(8RCjnHgK0aagO;h>E7r9js=75IE zR;W7Ji^GzaZ;M8RU;BC`scq3N(oz=gn6!I9pwr+iQd!G9(%>Jsg4OX7h2Ovj|ET&1 zkx*J`1Odz**2{CvyV4)B*Z`t2f_uWf-M_@|f8x#Cglnw9VIEUZ>SNQs(ff$fsepe| zSeGlN$I9jQWgPog-T&>d|I|;aQs5h{8kvU7G$ISrs=_&9a0=D_e_upT?muJ@J?W4Y zt4vTd`+q^B-^^lNZmZ0BsnFwT>d`TyEx72HqWsikEaLx#BL5~?(L^~jR+&44{eMKI z2)`YDoWs(~m}Ye%z`w2a-`_d^w1oc!PpT1749!d&Un~Kq=#7P!Cr_sT&lV*MjZBK4N(0xV zoBuOsR^coT{qgct3Eh+sdMM&ZQlR4<#|^=oH$)zZbc`*^N^4(#t)Cs%)D`*^ck@(R zep>9+y~N3#YKw0pzCEyPMrG0MCjf(solb>5+(x)chpB)VbBkSWmL)f?7sO!55?s=_mDt6BRjP;D5 zUM?AZpqK)W(`hrZPXI>3Z9S^5#d5R2CnC)rLXt>!d}S8x$1KLxMyPTpd}F8A;&Jr= z@s*KWf6snU^7#DZD9*T7J*|A=If zz_Uxq-!Pz$p^f%)IYubllS&Dg-B<)Pf_^jM(IQr!z`PcJH$mAw33`pWCyEb(kY1EG z2Z)_UH2lTKvbgKBxPBuZ_e9r52rF;M4cfiDn+IJ)0e&w!7TOjhrYACoA-{n9@qk&q zCzLQ&e}E`}N`UMSpWWRBP$1--K?Uwb(s9QFCD>7^zB^|(Za6GaeFR=bc{(VH>wCoW z&vyGpv`%3DOTtZ|&JNnNXj(t=0&w_^>K@W8O(-+1MAEo}+TD!3VK_tXD!=5)WBuBQ zcCF5XDzI@X+BH6rdj}Ex_zC)xP?89ptwp+t8~4Dgat%#(i58Cap z9)J=01`f#hKznf`2w!m}h^bH$(uHVb5(gccH0~*hMHgKrBLz|6QHrRKI;f`~!9#SZ}gU(VJdjHHXr6VqMRCdm?hC3SpUe zyiF@F!68UyfAfAYUe5(lXWwtSlCne;!>t!`d{hWlaQE15s70wQV(A=32(74I z*?z0XbMA`ks(5yp&1?Fj(w3Z;{8R^DB~ab%AUjS@A}9*TgATE}u;)Gea6SrFQ5SEb*Zfyo)> z1A3Lnc23VB&~z}QiT?xtxTcv{1Gbf~iLY<0`T^uEyb?R> zo@o6HVKcWHx(}vwlVwi3J-`VJVFqjfX@m<6`)?@YWva1;)PTVyb|tJn_in3fK~hn- z$E@N8)SDf=D{Q%!&^+(SXz(%oiV$Hobu(l?do9(aO>);2J*0Vb+S$}MCJpOs;OYpc zJM}3XZzwTv81BxlDugT3*wxDtZXs6BkOqX_w^eGEgfM09dN#24u&o}h0V&?VgqF-e z{4E?%JO`2eEf8O5UTZcSo@)QX>J zZyIIR5_cl?_oyJ&h0wF97qjGUW_ZSz9!;p%T}FdMHbx3ixtS55I;sxq4);*+jAxkG znQzqB(f6#>?{IE|ir*c=dIBSw9|YZaQ%AY-SpRCso-K@><61&FmiZ)FyP0_|XjW<1-PY*<&RrO3&cTy(UAWGQWV?~!fs+-E`tHijq#490`v!nCiVmd@#)Z=J=k(8#w>Svqh%}cSlKMiE zJFe5nMIlK0yRgRV#;LWE;>ikimJGFEz`BCA`au6uMsp2BBMiM`rDU(<8d|hFA|<0F323Ua zl^oDIgRc@S6Gb4NL)on6>n_Dd#+*GL@K&)k@k^-t$wY9}W^M(z=oj8@wicUA74g8c zAbw)5|J0t(!3k2;ep~2#zR9=BCy9mBN|!+(_d8w)aW*c zR;Q-sh>Kpby2`3NYyf!@+Hhb(sXL_!?a9y4CS-dUoBEE>3h7}kh!Mt+i$n$j+(Ad3 zVO1CK?9O6mSUS-jCFiiA9lyR3lhc4JJoKAi193%A&^C(a2Ek&{JuyjlJLPV+TlBko z=~^?0UdBhS5`cCnqgmC~{ZtXtLsXUji*z^MDhVOUE+DeXpn4c%^t1JG9@~=}oXGhd zn>ad!$zjvpTNtqJ75SUniZ|xl$7m=C544u=jnvq(IseF&Ez!?R%UzDPZaRL2(R!A_ zLKKtCQNXwS4U}$zcV}~wz|&;T&s!h2xj%lTs}&6$MQzDvb-vbypSR+(I(s<2k5{ zUB0#te3izD5L6tE;p{|rV_n_S4{bTw!`tj$u80z?@BoF?mUY4Q`Tzof%utQ}L{A2F zZiqE@n>X&SO~q+5vP(TLz;lOX3L;}<3uxy5uwWHpf_tn;$ZQQlQtpVF zAQ=Bgk%>n|xx?hOG10pdjD z$bVaL%{Cc?huc|+4-#H$%q$W8+oF||k~4P~kq8=55PWUnZVeFSkKPbJ0glKE{QozL zt^&hn$aC$6*4+=~M`Q%I44?dO6>oEljkAU0E+1k9+usKvKK*1c;hzE!x%`F?A&bAY z-q5<-8~d5a&flduJX*(zWtn}wAHx^K$$<+RT^d$52%shRt|Lw&iHe$jFjvE=Zk6)k%=#T-$I zJ#M=xHX-QH=1t3kj_XPP9ihQ131Mj5Qg!FGc0X!98ldiR{xM!9^}+Ok?WwSn$4>Cy zj`m9kZ36IYAqg_MkK1qsgPYZ%UlvWClN6f;GptGnK*1i(UFETl^P8_d&hPiQE%L3q zH??>U=r7qjS5nPX2=!hDDLKd=G zV4fwZ6M%X>o*FMJuLei*V{J&J1`EZpGQIn%}+6vgYU6w;}4ck|FMBtLh#c}^bgdUGAIdK{OR z=?HjHMqKC7ML!RE?ghFHU(K~g(LL7IgBAf^Al2s5-fAr+T$_61$TQ8a6WCOP7Uen{ zEOy^tJdLK7SW9ks0oRES@^B9ctHA5TV^>HKb2=r95CJbdcF%?H-*DwIW9-|N9_Q$0 zd!ossOq`Z}MDi-sZqhZeeE8mIVVLBU7jim|rhX^nN3eHs>vg*5L|%zAa`ja`aI-;6 zP{k_H<)P-XqdbDFME)&z+;F>`>HMh=A)blE?)1t{O3)|??&vYwwhNo@`C~EXCD$k`u zKsds5Hf%R?ALK?%`_NF*64LJSMxm+a*DXLtrmf+`mgbhv0j|T7nw!#ro~Hn zxbFzywjLeF3ZvAQw-m9cJDAUo-2J^OL4Pxb#t=1Z=9%N)@d5?Rkll|$OBE#ru^ekoz zelKdfYolAyVED69MW1!bUi*ocb0}x}(3!|~t82gv%mvNnAq z;n8^4`>J%GXS1j*|JdBqV9ro5$AX`vZrOY(hJ2|W6mB$>pTc;Ajun(%&(b9~8f1l^ zitk6ObXe-577c9Y8ORXm16oqg0QE$#-8WJoN4=p|;ntD|svWk2$M|CnF*nY{g6}I% z=-CjvWcS0Jph{luuQO1UgePZ^On3K6BxF!OlWF%Wd&kf{2v$uiBksoBHj`JD;h7tN zTMS5ZN$kbh<|i;ErB)JioF(-TeF5#piYn(Wy{pYD9YGayLNFB}O}*dKDYJSsMq?iH@!&8AkwQ#5&a zO!HKhhbKKahSHq=tar6!B%FP*c1Y5w?yjxC4JGDaoJbM8u_JT7ApJ_c1j$eR_NEJcTjZbEb0>m$H} z$snv@aGM?#u1E{XtxeXb4M7q0&~^CQuXbDf=;N3QU2;VW8gCQxulyfB67>F~7lBus z|4@HVhc{;Sje8GH&aAh+|KBvk$MSQ1FareLV}LOucsl7NMJZLDlW5o;AUOG3&3}!k zrnp&P5}ik-qTdS|S2X>!+}>w;?=<+W8CKs4_1E!d<&A$A^1Euv07UGc{eAU-rl0ry zMNQioj2-yTUc%;}*fZ^p)p4W0D1GE+{2S3#WGJn}A_8?!%8vcPen20y_=pY(H~Cx7 zCvxq-N;~yPGE54PJ-`W!)I$j?Y7<|U6n#vR)p7Ymc*`HvpoGkGq>kjjxBN@T-$_z7 zJsHPsYU;ntECTmPQDA4ypjaIHSFe_S2=&58Rc-y4ihWX6+n-y`lj@4$zxDehv&Ty^ zz`)HOhq}Khob}6v$6bB~)@+*fNVAb;7eDQG>8w6ps6Kp#7Q@-ymK7Bnuojf)>$_CYo7tuU9iQj@kqOItNc*%zg3O({F(vX8t}2ujK} zm9nK{aoeTrD^m8pwmHtIv@06iegiP7+$u_jnsCD=*Y#~lE*ePfekH98x>w4JyWA=5Jt^gBwT&xF%?gm(MnP&fd8yrk zq;^YX9iI&QgweTX4m-J0vCwxm@78}LHQJp?*}f&^@;Bwvk@LpWwFHeFGkB^ZyHyG< z5~6DX7&~Z?E+bv_X2LXsHpJ!JBJ&;r5{7g%_uw2u+m8H{`UQ4KS+5{=HTgr^HGQaqK-SNk*rPJ8emK73n5#G3$aUsn{ zL$j$|I(yRb!f+`|y6U7xgG*{7rs0as2a>C(WaYJ}tdqYB)0~!e?&N9}7 zA6L*I?6RMHNS}sy%-D(Jl?_Zt`J!GDI_Cj&gby>@V1PkVOh|2Pe>Pj+faDLd+s-BH z@E_~ws$%5#LS38db#BVV8_{3uY#70vnk2BJACNMW-~C^g#2(StMKvc&3yDPAgL6Up z_N@8vhdL>XEy1wA-+DtiUTasxyT;6*pvNZk7Rb&1#KX;c?Jps5iaH)%D(`BPrASTE zB0(a-f(J#)(|3#dw*CbC$W76Z;1V2|++WFb=HV6w8v>f~^TSaT954h8<6IK`b_+wK%qpJ~ZTGV` z)CzT=b3@22j1h0XUA_&1B1K-n;4vh{xFIg;H(VBkJYN?ckDug5rgb&;?TGn zQMNT$rn7JXKrgy$Sng_0ej?|I-yblJCr-Up?% ztku1sTDIF-iB`XaSi3XW9qbuGt9{P=2ET##gF?w>n;~j+s=N${E-m720mC5)-{P0@ zG@oN+#G9t}ztxbT*jx3xj2fcBo^ys%)z4AiNL~-wN5XD1=<4nrB3Z;5EN2|1nskjP;`8vv>h2F=F(J0A`eb2S zrq=S-zjgaHR~GMi7G~qoZ)_nur8OnCeO@s}J<+5$om#iklu#w~f3Bg6$Qs6mSmGdS zj0pmc=`OCh0%$KqRaseVS{ABId`5<41f8|A0Z z;`qy3*9pp&A^Xz%cL7J1q-)N2h05@Q%MTJx7;H3;A>ggixo1TulB@3;hRiwpAzlp0@Ly6RL*x}7YKI-I ztlQ$gas}b2g2^zdwlHy=R{jgM!kSunh>EkL;;U*g5LZK|)b`q@oMtNIt#-naa2h|) z%QBK(c%ZrEu#S0Ls)JiZ`L)b;k2k5|Zr*h1*$2lrj^?cAaV;riqN-ZS3}8cd8HMJU zoi{K`*b20bpNe7ct6Pb+vo{f^g&%H#(2Z=g?#!JyV&c&b&LB7%n228+2FIg%^jA#l zh3diOXs)c@QC_TJn_#PK3gKb7$UIW>6iQ^BGemQ3sNM*w@-v0QE&S)o>pbwVikz*(QTyn@k{I)%2qA+XO*Ua3-FxcR;--{eE7r-<#U?}&sI-wg{#3c zrc*jrDm9nvVZKB+0*8zRTW8Cx>G`>hb5iWvbwuPt*h#^w>Y*|o`6S$x{vP)U9?F2-FQy8uu=m7qrBxOA^RH*Y-%}<7& zhMk%l@nRsKVkXu2;#&!Y1F^JBijp=eLse!Uh0J!-)jZ{;jKFkstXv5HIRQmU71r`! znr3(;Lc9r~3eY9&=9zq7hcJJB!>?79@s}NF1C`hNW{wV0URU;lXzZ5fLDOlAhq&aLMpfmiJr+NrTv|oY0STfJ4xOTLnMd;W zTk!;62O6V`^|V9g#9j87U$(lPr8XwVk^q9lRGz?G#h2NLb6PgRabc~LZL4!ohF1-I|*l3no4&4miSJy2dqQ<;5e$K}q(gC+}9;NMQZ%Qj+gsn2BR_(Zb+v7o!Qi{=Xwhqx%a5aD}R43?eu-DeIjRxx@_ZSE-_>EmJ zhg<66cdb;`i_bB{^jGLw?l=3j{-)0#oF@E!bRR{& zS}hk#$i`B7HFtPilQStX*ro7KKN~$mno%P0EbdJnRduv3=;lP?=nb}IbxR_B_@Jas zG6NKu|A*qLBzMDc1=m(S+j1bG1pCS!^`nU?pz-dfAnHDYWLN*pD=)&~TG&roy{i=@@Mt%3YeT*8UUD*_S-Oe&{AT&nocv@{Ta@L#zW&%9^kcJMe^6jPK5`1~ zWOBk5qtLmvq3YN1Lth(nYJu%)N!6_lj~%P&938z|U*N;IUW6Bpo%{sc;h&=~{~qdD z8?N55)2IEk)>vKV#DJS>LuXj`zX^iW@VWUEk)NFQE^d?9>A^=I;KQ~GKN%&NjA;M- z2p`Ka5p@Z6Rsy%lisQroMHFPHl6{8rc>2@#U0-&3N`{|gi61IG{Ssiwj{+%)@625% zHTUmz*|eox`ByAV;eT0@?kOUQ(Db#lb2dSbt<}4d@yGDe**Qs`%&}~IQocsm->0T~ z%H&zNLhek%tAOs$M2Mz*I(GD(QtPBjss1Ur)RqLmkE2~Fji2uH=}=UX)Z%{cEdG~R z)owpTd7lOo|M;InSpTHpyJg@iT?T(2pM(i_{g2_Wf5`gu{G^k;YCwS$fi7a||31WL z#A{0LmIUeD;`jG(+-^U7QI`e-Dp#^BX>C040&5AVfI8PrlMbrAYLY4kzycQ*UH=3z<_ zZagy2YIbSC7s3I1NvHV_u)+DxkH;!+LVnh@{3j&gGU>Fxao_18`t^y)4% zD!JhfI&9b3w12`nj`Op84}2W1w6Eh2>aU&jd_pa8Pr0>#!VfUmf8Zs5vKLr7-+vhR z-F%xmp*~4gv#^JKU*L`L&NbuR%ENxv0|TW*JN>SeJf{9125$dY+k9uW&(HatiYIX0 zejtG$W4Z>~9bazwyMKseq52PgH{PA+xMfLG)bvl_dTg)#mXbz_ntN3Wm+KX@Y}1`Z z8xOve+juZ=*(MHRwecC(RUGwT)68?htw}ETP6?i*az^}r<{$ZmyuYxz33{dc&Y@U1!KM844`vha<; zl~9Tt(cZ!tCL6Al<545&l=pb-;7=RUb_k~NwG-al5N}Sn$FQP`UC;L?pEnq$$db8% z>m`)cbZ}MaglFZ>x}`5l&ALuJl7Jg4j%A_6G{4c3Cegm{XnyC3j`)gQq(xcuO)PyI zzuSH})t=(F>7EpsW0*FfeGS`XbQcQ|>3hppLjb=p>clc!s{jKuH!Wkn5FTBtwVasi zh!4u6<%hRC;`*?9kHXf4lZfS{8h(@`%0KM9yuZOBA4)5o)T;Crd#y(30(&MzaM*0z zbXk1dT}YZ^0(uuIN*l3=%v_CFH1Iud^yg5*S{i93>uvARwa6dGBP_fO$9%U59yn#dSKO=UhNl+Z6F&mSklkTe(wHiA}i8COJ9O5v{u{s(}5JMbM>_UY7~fTA^r4 zg3C+jyMq}UJ`tUx&XK3x;lJR$Z1t=G^|~&f1S+r*w>Xt|8M#&XpQzh{0QcYvB+@u> zkCm(kHC8lUXB_2!Y%R`I6Em7qsfp(@l15hgTG5k0*dv=J60L4PEFGce zRRej)sB5`p@?;Y#Z_Nf&U@YXWZx;KcFgurboUpt3rt%(qAhE`AB6m~H_cyi1F&2fA z$3h35#vRgixZJqjHzkogmr$r21HS3X@J_1lB5+7)8|0WBc=DSruk+>#zQeuwsr+Ng zq*l>xO8+L1QI|!H{UZN!0#dM+KtqBA)4CP|hq=oUGh($aNFLxt^BuU1PvqMJ@q~Wh zwy9>Jo~LNI)wjL!x&EwpRiZ+{%*ZLk^~vX_5KokoO_wx2p^9D$BR%4_c*GL!}U7M+6hPhL!kVoRi)`(Js z+jfFA#GT*Py0g(^>?SptYxEuFBqlF>Bl8s45;a)*9WeY?P{4C!{1gLO$^_WfV9vs3 z$(S>&m{gNR{fT%M!aULK5oM5Gu5a1ClQuvWdg7LNb}uG~ZO6>xnef`CWy;I>W=hwF z^h8hD2BxIj2CLah8oqW6h=ME$I5F3Vg z3}}lCu*QxGYFeWPy{KE+kM)~NQ{-AjGP6sq(WgL#a?S}Wwf0E{eOvk(>CH>;fFyN( zi0aDByqr`EufBr@lf757*b_%Oiw)KS7jhxT+rjN7?L%44k1H0lK>?mt>E#l;MARet zpx0P~4=s`tJnT7Kc80iI%gd1AUS~eNoZnZr)S8lOO}x>SyIZ1QZT^Gal4k~nuRKj= zPCSm{gy+b6<1JM!N~~&CJqv#}+$V3tH#6LXxVP&^gwl>_!yw5EzfQ-54%^Ml_)IJ? zD7g`u4b0Z=;2n)WUCS6JE(5N^4kl+*k}Fea5Bv;GwWe?{a%$!%=f(UyKnUJ=1tExS zc?cB1ajD>AQpwTNmEo4uZJZVSc#(QG#arn@?RLo1a+IbV?Oqkee}MR_?H$ZPU)&ms z)u?JVGh5pQUZWf3mmr7|{nQ8S@XTO6@XTO?7}zEbuHC#nIZMxoXZ-f^3XSEyu{AM) zma}1Nv9Z{LzIN@bK{);J08cIytv@6hO7%R3C+ijkW3seUbI9;b)2rB&sx#SaZ!w*@ zlwljf$=NX^*%7ZMFg;s&iW!yLMVEf*ENj`x4;Gvzs(BlFZ>JTjo7=FC#e?q3tikJA z%e)~*a1ASd2cLcA5u7^PF)Sa2RM8qE9$u;;f-ws}e5aZ4Ig|X1q z)jP2K0et1yX{ObA!x+i9Mxo)(S?>##7cZk;Tdnc1D2Xg7!aFJ5uTcp012Gm*)r3iY zl!mH>eOAwAZso}Cm0RWa#AqftT~c^6EIsoe@7XHZm$tpk*Q{55KiyF<4?>AW_n5B zl3uJca!om14a?okgVzq%?x}<9#4aqJb7_L zqO$sIF*yU@^}}OO+U&YD>CEq1&z0K4N-V=w=Oz!b6FEw#j(`!hgc02o_r9y6I-TBk z9ek4TDu_alG|#&nO_A9KEX9U9#3W=34w2i|m={cDwziz5lpG5<4aYdb0WKV5u;F*Y z%kfD$>a#8TGsNqK4B%{oWX>UtXO`U${$UOBEF7Imuyrd5zl;WEm*1bO_ltvTg=tC= zP6d`Zjm zc*(-%#)+fSbGB}2sv;?zf+s!PUUhYTSnKZB&(~0^Qjn#K1}+?k_zA; z)uQnJHyfAi*>=#bk@|DWp@W@O=bNi;_pY*6@KM;b(PGJx2lp2#^pTh`6@sf2dW9|% zDhD%Qzs%N%E|IMhv&HPy3F*c^%j!pBfquy+!<#gMRb(t3G`UBY%Ue6=uu8Yaa| z2xC<>xeRp!Xmk0#H<6FuD0BOkV{knhCCHUpfN(cZAg+nUv@Lm74ykANar1Y(n@PgsFWv8bddKQEu{I4O6%m!g zZn_DjXpSEH(oOgKo#MxP$YP%#+fKYYOK>BWGE7lve;gSd`MQI!e5s(L@A9%p1<_38 zQ@;+U?T?edV&_MO?@kG=^wtQK$~xUVt{wXq=av>)VyLIC-uKcJFK6{))8C|3w1)Uu zd^KWTrq7Q_4(*vfdo6P5XH!2Ua8Vum;xpMR#Gj;%ub8YzJi< z4uCOB=^V@_)^c^coNc@lzan$YNp#Qdz;fyTmP7Veh@}kzN}Ipm$xokLe*zZLLOQzq zn1yt76Y1!_)2DR*3R4v@%?l=wA2Bm9=G%ULSy zw@yTi`Br+KlLm4M@LjG`SX*y6p;uysG%P0FOCNs_&&VG8jVog-M(yp^P5SHlVO^ zQ7)8;gontDu?0g=y(B{VQ3w|#_eI7`Hg25ULvot% zis;1UGD?bbRE0^ynCSQ|P{Me8f!1XSd6aLt4-u4u9TDs>;9jsdX#ym&WcK0Fb>I#! z|KXBWsQac0{P>~n{DPQC;Tf^`pcr9}n0UqX+6OdcgWbg6ivXSXkyd1hW6}7n@eBds zLb*c**I|<|Zrt2YBTn8}98{-p#U3XKncLn(dJw-6S~2YLfRfX}PP;PaWN+TWOh{xz z-IU~?13#LifN0PwFxPB~8Qb;}LZ#c=h1ekXQvD$k8EJokN_a`HCwX0=5qbmah-&@B z`tXOvkozu~uPzpta{5gJWpEPtt@6*4_W;8rFA^QN-*xNw^&jtES5P8V(}26)fcrxj zD22h^i!AS_9SQ>^(>G*rgqQm!v!}2x$t5fLOIsYQ*-Bp{$NL`xMFB`Sn4 zWN-ix6;i8+3M2v|lMqqHKoUhEB1%L8kul7H1js~4NJ#Q7Xur1q_it;z_10Ugb@x3d z=j^@j-shf>-`?k(7_`CI{i(Dgke3aOc+$%*=yya`L}3f%fyAg-J9My$bjCJ8bdP_k zVA3Tn*7^vnjynHDUsVTbP{hF%PD;}3tMt+0=t*63#Cn}Buy=P|aw3XY$T-?kodnRAa3+VGbp{ac=Z0?z zjpT*g0nv(;=0sEYu74H-q-on;pBrI6IHW1zLk}i29zfB&7+!ysd~b% zx7$4kxnOc&!WX4mItg7PMN^?~l(sSRZ9*mw-*S03)$_pe(xbRR?56UOGplRoKF)M; zIC-Ugv7x!t28t;knf#{w2hBy|zA1Es_I{VmTlaEI`a8X) zD?s1G_>@rj#e~ukM;cr3J$)>!N%x$UOYL3;ONHI%rL*Ix$_S|@fu(yeb&+y^N-v-X z9I@-x#ugFr9*^iL9IS)q%jNc7lj_G!E=&&z$=ZeTg=o%U)N}r2usB|s4n7~Ggz0gc zG!tKPiThz03#!>e{GX=wsflh(1WFiiD=lA6k~b%G(>csNkh>?t=BegHER%epeaaj% zfuWA2xG68%<&Mu*U0|j$E)|yU5}hxcq%~SMp1CsBcn}m9HQO?i_X~n!CBCiv43&c# zvL4c7j71Z8H*LG;DV@^d&>7gI@+0FLmF}KtdwL4l$$QuiZ-#yJ@6x_BypXK6U(is^ zY9HK9g*Hl9MLP{8%6Wu)*6B}{PMX{;i@eYPs@6M*jT>g-{hk`;HgQ0zAI8^^vitQT z?&jH=n=Y$9I2-cPFv42nmlaLO;;HwGo;)2&9Xd%CB~2a^8{v(}aSfisb;y?92kiOE z@26gHjg)?#bc4gEp1XNSegJz9Gq;$+Le7qT?t0I*HX=XwNz&L6$>VoR48K=-Uu$oX zlJ;qiT{Y~^V(F{Yd*U>W;{6fJacgRQoE_GIb4l zZi<~h8hJv8`&LSk<5CRA5#;1*GnnbVsK%t7z!9RF-4EREv(wqL4L#(GV8_~xZ%zKJ z+QtUIU4x@PY@jT?ttDxm+qRE^O=ID=svXB`7c-qDu{~qVc*y2ao=z7}RFz#H13SD` z1P7obxOmOQIF24W*+b&yAf7r$c+MwY=LLlsQFP*Cy@(Q`3KzD10`V^D2b6o7(Sq?B z1TXol)&=o7_}EpQc(s_#C!PRy@?@znf?Da1W`hUn#qi2bn0)TT0@;qQnczw~Z1@0{UCnu6uOOgBfzug>1}V=dqtzUsWWp|ms&dqRI5Oy24~8i5j|8F*hDHfd%Te|c|7aJ zgy_c3S6A_rFHKL6i7>NNdSSE1u@Q%TJKs|Rm7#d)b5@+f4HI&B@^gN$i|WS>0Xa8@ z=HradGk)NmYZ#V%QRO@wF0OqLYDzV{2qq)XuQ5k>(Y$otO zrGz;RM|59f9Z(r4!*B4W6!v1n-r#a=a9({tnRs$pUvLSpZ!hJUxiXgo6)eWAAiukr zJZ|B_>+DAA9KKNQAgk>B&JaucDy#^BjL_a_=1tf46Hr9&A`n@{nk?Yz zUbpt^m76avnR{u@Do4AV%e-ffob-Lni^h3M^yzsX_Fu+d*myAGa-IJaJb+q1z8@jt zhN@O-YZ|k+G?)gMk{u+CG(wJ6!6wx}Ag<4RQZT|jow!nhpidqj zC|8b_)i?&yvAGOw7~O^g)&+0udhhQGmtgl57edd6hw_iXj(*|X~rYLdL=4Nc}pm()c~I>;xPpu`|l zVK(aF!~^jxEchhq9h^B~uGFq60)@#n4gL z%BKHpYHaOABX%WMdV955u!NLs@&VU4n+08e&Azf5rEMJ{5s^06&1e0}z?z zCl<|!aV&`*dtX2bM<@nL26T)@&2eHIWg`2(Ai54KFLjf)7+6jQ9n^%f_K&)$`HAUm z2<(WrTGpryf)|xez2(vnK>bX!e@TddaXzR87)J{j2hb8Q4j?T&f4W|G$4l|w=so?s zY{07@^a8w!0KBR#CIVj7RN(W0Px+Y|H!5`_Q4$nRxi{t>P%|cGyOrqyx18TQeNw>@Fv(0OfFbrJC=d|SpO_9Pca~L> zr-yk7(g!i5ub$Va$tOP{0ITFrTjeXSkA{8;5_*xkJbBT|p59JU z$^03h;gjJBW5KV`K}+C;{m|nqt79GZn%8vgrM!=<0PEyAiE?SFD#i7%^nU|XPD3O! z9G$(AJBk1i$-wBT14d6QZF=Oj6;l1-OrJj?QKPM}01n+p{CI#pUtjxVp$7*pS1;#D>h z^>(yHd`Qv+Dfu^HCBfQz#MxI zq~JER6sW##KS9n5ro)CFOSCX+$3c*xK zJ_nqyofJ^A_-XgGjR)f#F`a~{t}$AOSpqsge0~BtL%n5)Hn!^Fi57>Lq}Q}$;h`3X z+F1w7B9C@nh1m)N`k%x!>EY8vcOPoEmt?A-TmzBlwJu9x*`grii&XoVLVNY-UDyp(2 z+|An5LQ0lIe_So{CT0wd(&A3Xs*JgX(bp*tCj-NDJ$Dg%WzoW|m3MXO)x5%R&7>|4 z+g2dwppY7yxEBb5#xcUP4}uvm(TX&xpjPPtqE_T7q^Ov2=$~La`dGtTkpk^S15vSW zbRH-(oON(zclv7HII-p;e+@}*%5Z_XHdjgb5d{$%iXLgn0B_c2grm%pLje%X@hYJW zA*)Bd4DuEel<(joGh3#Omwa!eZ#5PeF=ypvedQd7Z>0q%`c~I(@gQo*Vao%gcK7tx zAxt!KSn#P>BbcQW~#08EwNEL(VHZ$EN5 z=v%2Ct#@xfG#IB(x8>B%Vq7j4!v^|R$Li6}fu&KOfg?fd7gT9WeGw)+&wiO46gnQ= z#hG%tOY|5$*EW1Y^iD)`QFQLDN3QZaXkxf3wNM)`00&2y$2gvloTI#*8`dV1>#FcBv{b5 zy0$)8Uh$IsF4WZ~;$BntHr!Ls1EthK#U?@t*KY3N`Zl}e8%&3`Q>V7W7Y42;t6W6B zITKDLvhgl#f@`Lc6}(Uq*X){~U^s4HD|9C8?GLm;PtNO{Z5*~H*69}L=dhKCSwx!} zr(36*j4Z`VRp%4?vR|6LMTb3?Ez!0G|SUHzZrSmm86T&v!d6)s?L>c)V#yWv0 zJ>wzGEDRQ66RfLZ6XQ;&w}mDoDkIJ_-x`I1h)KOgt9dSLp>Q`px@H!|iF}?M4U$xq zJfu8^&jUgF8itU|iI>XuR3%Vq+`cwjhd6PO|aQR7Qxk6)|WR}+i2xV|+KtXS2N zt1Vd1e!w_icy4|qa-Q)NWYShUAKVcFa?iImhX+^J$d;9NU#v6CB}Mp4CgZqED7r`o zb4n(EW8MHn;C#Rv3>n&U%i!1){DyvY;12k+q4|@$uKAdBDwGjv&qzI_Kp4Xt-EA{| ziMD$W`YB7cT-nXSY2FGMTw_Y|{i)M)*2J(L6~bCV@P&M~O_Zo_eQmZ2!PQ|QJk#|@ z^5uqZQX`Q>;@gOyQO+AiRw?w%J3j|g*!RWH^zRFwrA6p=9XHEO5k7uX_jw?sm_==L0OgS~ii`E1Hf$PdK3V#!oX3`z0% zkOBNNx@6Mn3O5h-n9SXi>H;SjenVVEcqxF8sct>!bM<%f9gbNuP zV?C+bQ;+Oynk^*3UB(fb<5G54b|fLQ>qoL1VK*Fj2~PCobZ!_2L6#9eW4p(#(y`q7 zj6Cepk>;s6O^*t>_Z?c}>nf zSgiPpicO1Zb@nMs9TTvycdLr$LZqvtoM*kUY~d0J&USKPh0#8D>i^tFx#3quwjjCWdeWcw&SWF$F}thGTuV zm)b_emstRC`AGe*lpeP{{IjT)xlZo3U$VmUn@hCUU*+TRueex=Mw_Y^#g{!9c$1Qg zPdvhQNmzRm>TQ|%GTBFRQ`_(1AK?luuBPh*jS^#tcOJaakC?>TrB z0rx_Ws}s9-)8Qou5$5}vY;(%6?4*FsAltpyd@cS?dR?RI#Ijg>bp;JX%d>nB#%cbO z!LR`z>1is7Bg)6WjO&anJU#}?thqt6ig*m3O&$Sf3)H!ID^c)U)_Q`=L-LKU#2P z`}d1xfBo~}_HB!nC+xDg^6T1#bJqthTz%sDoRa5l$ zg>k(~v`dBVSjVPCXa{W8l;%+CshW7|t+vUKjw1WQ6q;WEuJ^2(bIPI=uk5n%-KzD2 z6|W1YUWKv^lYQY=u~nvM+=d06Ut_ZVGQX_=I@@2Ecqb>gvoW6L;nOAUd)(1@mFB^v zWiFZSRx&oUb2=5^je|S4iir~3Rcy&BERpTvl!QAh!xVt@{bijw!J{@wWF5vKw8ujo zS2FB`&;7LcyfASaj~2LI;EN5LiOjcv=s6I10ra3dO5lVSCWcH0@_8Lb@;7RA79$ev zDe#4ow&R1j7u|VnXWrWK5>zb#7a2(I1BiSeTZB5nV{Z8WCfomnVZokhJ%NWE=$Xix znEys9a8Aqpl*L(o*stulAZvF%Ez=0|pn+2{HnbxxH?*_yioIu$zz-XiIlXR+PtFPL z;z2MC(J3DMw#c;tzsd#n=p5|!G+PdKrUlU0ISsMj`J)$2;k_862$QC%_S%SO4HzLgg0)Ho3-gPGj-Pshc@<0Ku9tT`q zHg;^swA~7zv>8_ew;x^H1h4vqG2`~<^8smwko(ih8(Pi~j-nSg&BVz+*Wz!+^vq~) z0rk00XHn(?Bl~|D&p;a+ktmrqNO#E%9)&H!0J|jlBPecMjck}kg#Rvp8^r&lQ&{hl zIZwuhwmSeTBOgMefcgIbwm4&YeQ6=Z=|Af;h10xdDk2G6fTj@UB013U_g`x;`?Nn6 z|Mc1aC}5Cgg53_eLBQihd9Z=kb(#~P!p>S{jEj##IC4MO(~_) zGL7Z-;cNddsAZ;(TeRl4O@kwm91C8;2fq7t2$0jK<*XWzvi<@mvVq+S-~>l}_ffKi z=yKFR<&4_D)80AQXoNP+Gx{{yEdY zEhqLrg~+JC_~1{i(k-X@`UtsBUF|nN^pqy%I5AA7Sq;1{47<1BPhko4=$=o>(L8Uz zccz&m!1co|z||4pdT&8V)4k_OqpcsKOuF%jk-v)sv6Cp<{}3-Cb{3ic9-v}Jr@Whv zI02C+P@{G-q?kBr^IkWhe*7UsSNsVC+iCTFI=TmZEB&!KpYHN8>?cc%I1!SYCfXUz z4Y)|BR9UOvF^VChPM=0FNZYpLi7fna6hH>1)-?XsHxgNlW|)lnMjK4v3zGbg`?Mv6 zXMGBpR`d^tGy)Ud$G)<}V_ckV8%CfS*`;nI6oW^R(5A%VHKV(r@BWhP$DX_rejjuk z*>)Wuz?Z|v_JDeUfO^U%=?L-zvz?WVA;l)6|C31CG5<^bE#TjY&SSQ13E`QY$I5Wn zT#Yz3KN#E=H<6A%_Q^yFsAD+lsD29v$PJNY2})}d{noTte{|cYk*PyP=D)X1g(X)G zhtN{S9{f8Jt*z|%)6tQg|5Wn9-+>M-pj{lh_s=9k+f z0uT6)TSghvuXgPaWnddChyGYRGcpR43(;M5*x|}?f0ZRZnc>9C621Gqs8*OvI;j5q zM-N)iFFK$L&?@+-#`)g{N3_-4jeh7CxVVP-&KosUKkDhZ`Nzw@xWz220L`F@mlvL$ z&WMcJ<-S-RVwG85oP(w3eS0Ni;Hw?(i?eq4?r^8(ojn_**`#Q9;JvPRbE<>rJvJIP zm`Z2RCl0EwDJTh;R+0i-7Wiuw1cy|5L%m;7=c5{Vs6}u{syWU>dAmz-xJR!#cXY@v z<@6q?cT;=pjq$CvbE&{G;Wbqr5qHFkdM2x%#KeoY_gJZ_*2L(~_l=Df$|e?$eb?b? z=WO@Gd*Ami3VCp_L2_veT$I_;#$=-l=(?2}{L$c1IJi-mEl`-N6y&TnU3=9&b)`kK zR%hSI5~(^UUQ{odc7T?c71e26?Iu?l#){_VS5H<p_9bR@j?L6%Ezju4@U+y~f za1qJrMZ5mz%;vCCt#+Ry!D3+Ji(ssTb|4qX z7h5iTP#sxaQN6XgwfaDHwjSAH0I5g5(XTxhBoZ|Yv{vk{{)K5V?Gk|tb&1z{S6?J*_r2{@BP*Ev$uR}1^}d*(GCxpO*x z3|(~k`swu3=f7XlVAQar;p;(}pG(k}FrQb3vted+^v~H{yj4{$5m&{tdrGSFW0LuT zFdGNYh&*wO%RAN`vOw#9ujv3dUgWkydMyBIyC#{x9}%si!ifa}RZ3wnrZ5Cr=FC-O zeV(`#wW#)uwVh98r`20^7T$C- zCVvNWjrjRFAv^@z<67Nlpx!F94ciARSTK0@8X8LJf#$o7`AslV2s)&E%9C5Rv)ume zDG}2%jnR z_xJB)?|z&Fr}`9zSW^OFzTjJvcYk2fMd|RPrj;HnZ7D5n_%d9F?0Izv?n{0moQvCU z4S1vZY0z|OK}5J^f5lx_qtdxD{1#bjMf~}YK5G7OO@%f;U;SRa%>YxmoUJT+E$W}Z z*o>M7$S`ecrXCTLQlBKXt+g}Iy5>6#vK#9PHXK#i!#WtPAm!{PZ70bCwOO-M2 zNN7{-1p3!&i%N$yY9UQETWennku3-BB)2`HIQln)t>U^_6YE@3u5kAg1SjF8GGqVJ zin@xq=h+#k{Nc!o$hwK(EZpVO4^LD4z@wT4)n6M#W}zE{pm7pzk@n5FKWt*o)RVL_ zs{n~tb68{{siDC$Tj~)MS|o1_?>Y!tZ`MPRcy7^WNw0UJ*Vgq^UyM=DS1cM^I`sYI zoPayi{e1d+_wzQ{j{2?BKfv4GRiZ7=kNEB`up;;<`5=9re$UlFLS2OkA~WGmTG3YH+1hw1~ZyY3DLJ*n7#v+QW}9AV%n{Oisa%#er7;gNtk=}ulc zMY&&uZRBCUQjt1(JKkQJYF4<>og%AR>F(BDFIVl*IJt(`Z2f|GL3E$}6Rwr;Bq-Mn6(&!ax+%>{uSffw>mxIeA z&#xTvV|sjzf6g_26WrovSGE?5dPRs$ZE41BZqIxR@#fw}CP}w$gFjJS0>>DKC29|| zFLV{5TOW~1zr&1>POO;FSO2nht|FjFdwDont`EyTgnmQ5T6K-`-1zhI|K%@ zJ9vj^xO9EwEM7h19R1YDWaLQ225oXwCNvd0__-=j*f2FXWo`D}WL@14%|*oA%Y~;4 zPo<59F3LCa=BA_tO;~#)uLvSXwi-`Xx7-O$VBD}hNpFk}t8MA5SlV2`6qF--Wn$k@2*D& zZiA-$C7{8MUr9oHD`y}lILe?!W4PC$I&>GRU1Z&D^m6NjdP6GI7c#Y+P;mgvni!l= zf7|aW*s1-Qw?|_~8anQf?ApRZ3K(&>s^M?Ah=wKFrJc{YZK6|FJ}2?F&0zZLMXe&< zl1^ezN{&%zYLr#b+h;0rR)SxadRe-9Wgf509Fwa58c4w7$Kw2mWExz2V`Ofl<|w9H zy|G9HJspsvul8#&!1PRgZK0 zQ=ce+Gb7j?2zwVEN70svNoyCVE+yLw%vR z8~-BmvHa**6CxbmD%?m@K=KxXnryB3u%F;%BVez<&pxmI4D){gA}_uw diff --git a/openquake/qa_tests_data/disagg/case_18/source_model.xml b/openquake/qa_tests_data/disagg/case_18/source_model.xml deleted file mode 100644 index dfe6a9de052..00000000000 --- a/openquake/qa_tests_data/disagg/case_18/source_model.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - 135.705 35.898 - - - - 64.995 - - - 65.00500000000001 - - - - PointMSR - - - 1 - - - - 5.0 5.1 5.199999999999999 5.299999999999999 5.399999999999999 5.499999999999998 5.599999999999998 5.6999999999999975 5.799999999999997 5.899999999999997 5.9999999999999964 6.099999999999996 6.199999999999996 6.299999999999995 6.399999999999995 6.499999999999995 6.599999999999994 6.699999999999994 6.799999999999994 6.899999999999993 6.999999999999993 7.0999999999999925 7.199999999999992 7.299999999999992 7.3999999999999915 7.499999999999991 - - - 0.0017404297316440736 0.0014146743971195982 0.0011498905204148596 0.0009346661052410158 0.0007597251327641438 0.0006175277718075182 0.0005019454175039715 0.00040799655279595776 0.0003316320486023118 0.00026956064924197487 0.00021910712166088434 0.00017809695479484682 0.00014476263969314965 0.00011766749114306046 9.56437275615485e-05 7.774214044171201e-05 6.319118414293873e-05 5.136372282392555e-05 4.175000133508116e-05 3.393567513504588e-05 2.758395233639655e-05 2.242107821543914e-05 1.8224536578811047e-05 1.48134594742065e-05 1.2040831910595241e-05 9.7871556169343e-06 - - - - - - - - - - - - - - - - - - - - 135.805 35.898 - - - - 60.995 - - - 61.5 - - - - PointMSR - - - 1 - - - - 5.0 5.1 5.199999999999999 5.299999999999999 5.399999999999999 5.499999999999998 5.599999999999998 5.6999999999999975 5.799999999999997 5.899999999999997 5.9999999999999964 6.099999999999996 6.199999999999996 6.299999999999995 6.399999999999995 6.499999999999995 6.599999999999994 6.699999999999994 6.799999999999994 6.899999999999993 6.999999999999993 7.0999999999999925 7.199999999999992 7.299999999999992 7.3999999999999915 7.499999999999991 - - - 0.0017404297316440736 0.0014146743971195982 0.0011498905204148596 0.0009346661052410158 0.0007597251327641438 0.0006175277718075182 0.0005019454175039715 0.00040799655279595776 0.0003316320486023118 0.00026956064924197487 0.00021910712166088434 0.00017809695479484682 0.00014476263969314965 0.00011766749114306046 9.56437275615485e-05 7.774214044171201e-05 6.319118414293873e-05 5.136372282392555e-05 4.175000133508116e-05 3.393567513504588e-05 2.758395233639655e-05 2.242107821543914e-05 1.8224536578811047e-05 1.48134594742065e-05 1.2040831910595241e-05 9.7871556169343e-06 - - - - - - - - - - - - diff --git a/openquake/qa_tests_data/disagg/case_18/source_model_logic_tree.xml b/openquake/qa_tests_data/disagg/case_18/source_model_logic_tree.xml deleted file mode 100644 index f951f3d04c4..00000000000 --- a/openquake/qa_tests_data/disagg/case_18/source_model_logic_tree.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - source_model.xml - 1.0 - - - - - From dd44010e98ca99a8570dafcdb92ca3311ac774ba Mon Sep 17 00:00:00 2001 From: Michele Simionato Date: Mon, 19 Oct 2026 06:31:28 +0200 Subject: [PATCH 6/7] Updated changelog [ci skip] --- debian/changelog | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/debian/changelog b/debian/changelog index ec70f7b35d1..ccead81e84c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,11 +5,10 @@ * Fixed a bug affecting previous versions of the engine: with disagg_by_src the rates of multiple atomic groups were all attributed to the source of the first group in mean_rates_by_src, and the - ruptures of the other groups were not stored - * Fixed a bug affecting previous versions of the engine: with - site_labels the atomic groups (cluster or mutex sources) were - computed only for the sites of the last label. This affects the - USA model near New Madrid and Memphis + ruptures of the other groups were not stored; with site_labels the + atomic groups (cluster or mutex sources) were computed only for the + sites of the last label. This affects the USA model near New Madrid + and Memphis [Anirudh Rao] * Added support for generating regular UTM site grids from exposure, From b4964a2342bb4407e33d838dc8279003b37e6953 Mon Sep 17 00:00:00 2001 From: Michele Simionato Date: Mon, 19 Oct 2026 06:39:13 +0200 Subject: [PATCH 7/7] Refined comment [ci skip] --- openquake/calculators/classical.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/openquake/calculators/classical.py b/openquake/calculators/classical.py index 10c99e75273..9e8a32628e3 100644 --- a/openquake/calculators/classical.py +++ b/openquake/calculators/classical.py @@ -309,7 +309,7 @@ def geometry_key(srcs, bvals): # e.g. logictree/case_18_bis: the sources of 'first' have two keys, one # for setLowerSeismDepthAbsolute 10.0 and one for 20.0, with 9 sets each # (3 abGR x 3 maxMagGR), i.e. two groups of 9 variants for make_results: - # (('bs6', '10.0'),) and (('bs6', '20.0'),) + # (('bs6', '10.0'),) and (('bs6', '20.0'),) return tuple((bset.id, repr(value)) for bset, value in bvals if bset.uncertainty_type not in GEOMETRY_PRESERVING and any(get_bset_value(bset, value, src)[0] for src in srcs)) @@ -365,16 +365,15 @@ def _make_results(pairs, sites, remove_zeros, as_rmap): def _atomic_results(grps, sites, cmaker, remove_zeros, as_rmap, merge_atomic): - # yield the results of the atomic groups collapsed in a single task - # (see get_allargs and bysrc_results); they contribute to the same RateMap in the master, with the gids of - # all the realizations; the uncertainties are not applied, which is - # fine because the sources of an atomic group are nonparametric - # (the mutex ones must be, since mutually exclusive ruptures are - # modelled with nonparametric sources) and no uncertainty can be - # applied to a nonparametric source (the calculation would fail) + # yield the results of the atomic groups collapsed in a single + # task (see get_allargs and bysrc_results); they contribute to the + # same RateMap in the master, with the gids of all the + # realizations; the uncertainties are not applied, which is fine + # because the sources of an atomic group are nonparametric (the + # mutex ones must be, since mutually exclusive ruptures are + # modelled with nonparametric sources) if merge_atomic: - # with many sites a single result is much lighter, and there - # are no rup_data nor mean_rates_by_src to keep separated + # with many sites there are no rup_data nor mean_rates_by_src yield baseclassical(grps, sites, cmaker, remove_zeros, as_rmap=as_rmap) else: