From e30394facce8640e7be66f849f756414a3977273 Mon Sep 17 00:00:00 2001 From: Jim Pollaro <30908497+pollaro@users.noreply.github.com> Date: Fri, 7 Jun 2024 12:14:03 -0500 Subject: [PATCH] Revert "Development merging in master (#30)" This reverts commit da3b51ee56a2e3f11862e432899ed9ec1d527c7e. --- +nla/+edge/+result/Base.m | 5 +- +nla/+edge/+test/Precalculated.m | 2 +- +nla/+edge/+test/WelchT.m | 2 +- +nla/+gfx/+plots/MatrixPlot.m | 30 +-- +nla/+gfx/ProbPlotMethod.m | 2 +- +nla/+gfx/anatToMesh.m | 2 +- +nla/+gfx/drawBrainVis.m | 3 +- +nla/+helpers/rotationMatrix.m | 2 - +nla/+inputField/NetworkAtlas.m | 2 +- +nla/+net/+result/+chord/ChordPlotter.m | 6 +- .../+result/+plot/PermutationTestPlotter.m | 85 -------- .../+net/+result/NetworkResultPlotParameter.m | 19 +- +nla/+net/+result/NetworkTestResult.m | 60 ++--- +nla/+net/+test/ChiSquaredTest.m | 4 +- +nla/+net/+test/HyperGeometricTest.m | 2 +- +nla/+net/+test/KolmogorovSmirnovTest.m | 7 +- +nla/+net/+test/StudentTTest.m | 9 +- +nla/+net/+test/WelchTTest.m | 11 +- +nla/+net/+test/WilcoxonTest.m | 7 +- +nla/+net/ResultRank.m | 90 +++----- +nla/+net/genBaseInputs.m | 11 +- +nla/+net/unittests/ChiSquaredTestResult.mat | Bin 486 -> 486 bytes .../NetworkResultPlotParameterTestCase.m | 57 ++++- +nla/+net/unittests/ResultRankTestCase.m | 6 +- +nla/+tests/TestPoolTest.m | 92 ++++++++ +nla/ResultPool.m | 11 +- +nla/TestPool.m | 206 ++++++++++-------- +nla/genTests.m | 10 +- +nla/welchT.m | 12 +- NLAResult.mlapp | Bin 39347 -> 38797 bytes NLAResult_exported.m | 204 +++++++++-------- NLA_GUI.mlapp | Bin 78192 -> 81810 bytes NLA_GUI_exported.m | 2 +- 33 files changed, 482 insertions(+), 479 deletions(-) delete mode 100644 +nla/+net/+result/+plot/PermutationTestPlotter.m mode change 100644 => 100755 +nla/+net/genBaseInputs.m diff --git a/+nla/+edge/+result/Base.m b/+nla/+edge/+result/Base.m index 0d6a18c1..2cb85374 100755 --- a/+nla/+edge/+result/Base.m +++ b/+nla/+edge/+result/Base.m @@ -40,10 +40,7 @@ function output(obj, net_atlas, flags, prob_label) matrix_plot.displayImage(); w = matrix_plot.image_dimensions("image_width"); h = matrix_plot.image_dimensions("image_height"); - - if ~isfield(flags, 'display_sig') - flags.display_sig = true; - end +% if flags.display_sig if ~exist('prob_label', 'var') prob_label = [sprintf('Edge-level Significance (P < %g)', obj.prob_max), prob_label_appended]; diff --git a/+nla/+edge/+test/Precalculated.m b/+nla/+edge/+test/Precalculated.m index 6930141f..562fd9a5 100755 --- a/+nla/+edge/+test/Precalculated.m +++ b/+nla/+edge/+test/Precalculated.m @@ -37,7 +37,7 @@ inputs = {... NumberWithoutDefault('coeff_min', 'Coeff minimum', -Inf, Inf),... NumberWithoutDefault('coeff_max', 'Coeff maximum', -Inf, Inf),... - nla.inputField.NetworkAtlas(),... + inputField.NetworkAtlas(),... EdgeLevelMatrix('precalc_obs_p', 'Precalculated observed significance (thresholded p-value)', npairs_x_1),... EdgeLevelMatrix('precalc_obs_coeff', 'Precalculated observed coeff', npairs_x_1),... EdgeLevelMatrix('precalc_perm_p', 'Precalculated permuted significance (thresholded p-value)', npairs_x_nperms),... diff --git a/+nla/+edge/+test/WelchT.m b/+nla/+edge/+test/WelchT.m index 0c0f334d..f2376612 100755 --- a/+nla/+edge/+test/WelchT.m +++ b/+nla/+edge/+test/WelchT.m @@ -29,7 +29,7 @@ x1 = input_struct.func_conn.v(:, group1); x2 = input_struct.func_conn.v(:, group2); - [p_vec, t_vec, dof_vec] = nla.welchT(x1, x2); + [p_vec, t_vec, dof_vec] = welchT(x1, x2); % Non-permuted group_names = {input_struct.group1_name, input_struct.group2_name}; diff --git a/+nla/+gfx/+plots/MatrixPlot.m b/+nla/+gfx/+plots/MatrixPlot.m index 0d91a110..65d4c49f 100644 --- a/+nla/+gfx/+plots/MatrixPlot.m +++ b/+nla/+gfx/+plots/MatrixPlot.m @@ -53,10 +53,6 @@ "Bone", "Copper", "Pink"}; % Colorbar choices end - properties (SetAccess = immutable) - original_matrix % The original matrix for scaling purposes - end - methods function obj = MatrixPlot(figure, name, matrix, networks, figure_size, varargin) % MatrixPlot constructor @@ -116,7 +112,7 @@ end end end - obj.original_matrix = matrix; + end function displayImage(obj) @@ -559,7 +555,7 @@ function createColorbar(obj, varargin) function openModal(obj, source, ~) % Callback for clicking on the colorbar. % This opens a modal with the upper and lower bounds along with a radio selector between linear and - % log. + % log. This only works for a "regular" log scale, not the -log10 scale. Still working on that one import nla.gfx.ProbPlotMethod % source is the colorbar, not the figure @@ -600,22 +596,20 @@ function openModal(obj, source, ~) uicontrol("Style", "text", "string", "Colormaps", "Units", "pixels",... "Position", [10, scaleBaseButtons.Position(2) - 45, 80, 25]); color_map_select = uicontrol('Style', 'popupmenu',... - 'Position', [100, scaleBaseButtons.Position(2) - 45, 242, 30]); + 'Position', [100, scaleBaseButtons.Position(2) - 45, 250, 30]); initial_colors = 16; colormap_html = []; for colors = 1:numel(obj.colormap_choices) colormap_function = str2func(strcat(strcat("@(x) ",lower(obj.colormap_choices{colors}), "(x)"))); CData = colormap_function(initial_colors); - new_html_start = ''; - new_html = ''; - for color_iterator = initial_colors:-1:1 + new_html = ''; + for color_iterator = 1:initial_colors hex_code = nla.gfx.rgb2hex([CData(color_iterator, 1), CData(color_iterator, 2),... CData(color_iterator, 3)]); new_html = [new_html '__']; end %new_html = new_html(1:end-2); - new_html_end = [new_html '']; - new_html = [new_html_start new_html new_html_end] + new_html = [new_html '']; colormap_html = [colormap_html; {new_html}]; end set(color_map_select, "Value", 1, "String", colormap_html); @@ -632,13 +626,12 @@ function openModal(obj, source, ~) end function applyScale(obj, ~, ~, upper_limit_box, lower_limit_box, button_group, color_map_select) + % This callback gets the colormap/scale and then applies the new bounds to the data. % Only works with APPLY button, will not work with only CLOSE import nla.net.result.NetworkResultPlotParameter nla.gfx.ProbPlotMethod - obj.matrix = obj.original_matrix; - button_group_value = get(get(button_group, "SelectedObject"), "String"); if ismember(obj.plot_scale, [ProbPlotMethod.NEG_LOG_10, ProbPlotMethod.NEG_LOG_STATISTIC]) &&... @@ -652,32 +645,29 @@ function applyScale(obj, ~, ~, upper_limit_box, lower_limit_box, button_group, c discrete_colors = NetworkResultPlotParameter().default_discrete_colors; color_map = get(color_map_select, "Value"); if button_group_value == "Linear" - new_color_map = NetworkResultPlotParameter.getColormap(discrete_colors, get(upper_limit_box, "String"),... + obj.color_map = NetworkResultPlotParameter.getColormap(discrete_colors, get(upper_limit_box, "String"),... obj.colormap_choices{color_map}); obj.plot_scale = ProbPlotMethod.DEFAULT; elseif button_group_value == "Log" - new_color_map = NetworkResultPlotParameter.getLogColormap(discrete_colors, obj.matrix, get(upper_limit_box, "String"), obj.colormap_choices{color_map}); + obj.color_map = NetworkResultPlotParameter.getLogColormap(discrete_colors, obj.matrix, get(upper_limit_box, "String"), obj.colormap_choices{color_map}); obj.plot_scale = ProbPlotMethod.LOG; else color_map_name = str2func(lower(obj.colormap_choices{color_map})); - new_color_map = color_map_name(discrete_colors); + obj.color_map = color_map_name(discrete_colors); obj.plot_scale = ProbPlotMethod.NEG_LOG_10; end - obj.color_map = new_color_map; obj.embiggenMatrix(get(lower_limit_box, "String"), get(upper_limit_box, "String")); obj.createColorbar(get(lower_limit_box, "String"), get(upper_limit_box, "String")); end function chunk_color = getChunkColor(obj, chunk_raw, upper_value, lower_value) % Get color for the chunk (square) - chunk_color = nla.gfx.valToColor(chunk_raw, lower_value, upper_value, obj.color_map); chunk_color(isnan(chunk_raw)) = NaN; % puts all NaNs back removed with valToColor end function applyColorToData(obj, position_x, position_y, chunk_height, chunk_width, chunk_color) % Fill in the chunks (squares) with color - obj.image_display.CData(position_y:position_y + chunk_height - 1, position_x:position_x + chunk_width - 1, :) =... repelem(chunk_color, obj.elementSize(), obj.elementSize()); obj.image_display.CData(position_y + chunk_height, position_x:position_x + chunk_width - 1, :) =... diff --git a/+nla/+gfx/ProbPlotMethod.m b/+nla/+gfx/ProbPlotMethod.m index dd675d32..4237eb53 100755 --- a/+nla/+gfx/ProbPlotMethod.m +++ b/+nla/+gfx/ProbPlotMethod.m @@ -1,5 +1,5 @@ classdef ProbPlotMethod enumeration - DEFAULT, LOG, NEG_LOG_10, STATISTIC, LOG_STATISTIC, NEG_LOG_STATISTIC + DEFAULT, LOG, NEG_LOG_10, STATISITC, LOG_STATISTIC, NEG_LOG_STATISTIC end end \ No newline at end of file diff --git a/+nla/+gfx/anatToMesh.m b/+nla/+gfx/anatToMesh.m index 9e78ff06..f06b7d75 100755 --- a/+nla/+gfx/anatToMesh.m +++ b/+nla/+gfx/anatToMesh.m @@ -30,7 +30,7 @@ % rotate right hemi around and move to position for visualization cmL = mean(mesh_l, 1); cmR = mean(mesh_r, 1); - rm = nla.helpers.rotationMatrix(nla.Dir.Z, pi); + rm = nla.helpers.rotationMatrix(Dir.Z, pi); % Rotate switch view_pos diff --git a/+nla/+gfx/drawBrainVis.m b/+nla/+gfx/drawBrainVis.m index b9e845bd..a38535b8 100755 --- a/+nla/+gfx/drawBrainVis.m +++ b/+nla/+gfx/drawBrainVis.m @@ -16,8 +16,7 @@ function drawBrainVis(edge_input_struct, input_struct, net_atlas, ctx, mesh_alph fc_exists = isfield(edge_input_struct, 'func_conn'); - color_fc = false; % short term fix for NET-167 - % color_fc = fc_exists; + color_fc = fc_exists; show_ROI_centroids = true; if isfield(input_struct, 'show_ROI_centroids') diff --git a/+nla/+helpers/rotationMatrix.m b/+nla/+helpers/rotationMatrix.m index e3536034..ac57cdd7 100755 --- a/+nla/+helpers/rotationMatrix.m +++ b/+nla/+helpers/rotationMatrix.m @@ -1,8 +1,6 @@ function mat = rotationMatrix(dir, theta) % Generate a rotation matrix for the direction given % an angle (in radians). - import nla.Dir - mat = zeros(3); switch dir diff --git a/+nla/+inputField/NetworkAtlas.m b/+nla/+inputField/NetworkAtlas.m index f58eb062..7aa59d97 100755 --- a/+nla/+inputField/NetworkAtlas.m +++ b/+nla/+inputField/NetworkAtlas.m @@ -24,7 +24,7 @@ end function [w, h] = draw(obj, x, y, parent, fig) - import nla.inputField.LABEL_GAP nla.inputField.LABEL_H nla.inputField.widthOfString + import nla.inputField.LABEL_GAP nla.inputField.LABEL_H nla.inputFieldwidthOfString import nla.gfx.MeshType obj.fig = fig; diff --git a/+nla/+net/+result/+chord/ChordPlotter.m b/+nla/+net/+result/+chord/ChordPlotter.m index b8a6918d..3a18f537 100644 --- a/+nla/+net/+result/+chord/ChordPlotter.m +++ b/+nla/+net/+result/+chord/ChordPlotter.m @@ -32,7 +32,7 @@ function generateChordFigure(obj, parameters, chord_type) % generateChordFigure plots chords for a network test - import nla.gfx.SigType nla.net.result.plot.PermutationTestPlotter nla.gfx.EdgeChordPlotMethod + import nla.gfx.SigType nla.net.result.plot.NoPermutationPlotter nla.gfx.EdgeChordPlotMethod coefficient_bounds = [0, parameters.p_value_plot_max]; if parameters.significance_type == SigType.INCREASING && parameters.p_value_plot_max < 1 @@ -79,7 +79,7 @@ function generateChordFigure(obj, parameters, chord_type) end % Plot Trimatrix with the chord plots - plotter = PermutationTestPlotter(obj.network_atlas); + plotter = NoPermutationPlotter(obj.network_atlas); plotter.plotProbability(plot_figure, parameters, 25, obj.bottom_text_height); obj.generatePlotText(plot_figure, chord_type); @@ -185,7 +185,7 @@ function generateEdgeChordFigure(obj, plot_figure, parameters, chord_type) end chord_plotter = nla.gfx.chord.ChordPlot(obj.network_atlas, plot_axis, 450, clipped_values, 'chord_type', chord_type,... - 'direction', significance_type, 'color_map', color_map, 'lower_limit', coefficient_min, 'upper_limit', coefficient_max); + 'direction', significance_type, 'color_map', color_map, 'lower_limit', coefficient_min, 'upper_limit', coefficient_min); chord_plotter.drawChords(); setTitle(plot_axis, main_title); diff --git a/+nla/+net/+result/+plot/PermutationTestPlotter.m b/+nla/+net/+result/+plot/PermutationTestPlotter.m deleted file mode 100644 index 2a934633..00000000 --- a/+nla/+net/+result/+plot/PermutationTestPlotter.m +++ /dev/null @@ -1,85 +0,0 @@ -classdef PermutationTestPlotter < handle - - properties - network_atlas - end - - methods - function obj = PermutationTestPlotter(network_atlas) - if nargin > 0 - obj.network_atlas = network_atlas; - end - end - - function [w, h] = plotProbability(obj, plot_figure, parameters, x_coordinate, y_coordinate) - color_map = parameters.color_map; - statistic_matrix = parameters.statistic_plot_matrix; - p_value_max = parameters.p_value_plot_max; - plot_label = parameters.name_label; - significance_plot = parameters.significance_plot; - clickCallback = parameters.callback; - plot_scale = parameters.plot_scale; - - matrix_plot = nla.gfx.plots.MatrixPlot(plot_figure, plot_label, statistic_matrix, obj.network_atlas.nets,... - nla.gfx.FigSize.SMALL, 'x_position', x_coordinate, 'y_position', y_coordinate, 'lower_limit', 0,... - 'upper_limit', p_value_max, 'color_map', color_map, 'network_clicked_callback', clickCallback,... - 'marked_networks', significance_plot, 'plot_scale', plot_scale); - matrix_plot.displayImage(); - w = matrix_plot.image_dimensions("image_width"); - h = matrix_plot.image_dimensions("image_height"); - end - - function plotProbabilityVsNetworkSize(obj, parameters, axes, plot_title) - import nla.gfx.setTitle - - network_size = parameters.network_size; - least_squares_line_coefficients = parameters.least_squares_line_coefficients; - negative_log10_statistics = parameters.negative_log10_statistics; - rho = parameters.rho; - p_values = parameters.p_values; - - % p_values vs network-pair size - plot(network_size.v, negative_log10_statistics, "ok"); - - % least-squares regression line - least_squares_line_x = linspace(axes.XLim(1), axes.XLim(2), 2); - least_squares_line_y = polyval(least_squares_line_coefficients, least_squares_line_x); - hold("on"); - plot(least_squares_line_x, least_squares_line_y, "r"); - - xlabel(axes, "Number of ROI pairs within network pair"); - ylabel(axes, "-log_1_0(Asymptotic P-value)"); - setTitle(axes, plot_title); - second_title = sprintf('Check if P-values correlate with net-pair size\n(corr: p = %.2f, r = %.2f)', p_values, rho); - setTitle(axes, second_title, true); - lims = ylim(axes); - ylim(axes, [0 lims(2)]); - end - - function plotProbabilityHistogram(obj, axes, histogram_data, statistic_input, no_permutations_network_result, test_method,... - probability_max) - import nla.HistBin - - empirical_fdr = cumsum(double(histogram_data) ./ sum(histogram_data)); - - [~, minimum_index] = min(abs(probability_max - empirical_fdr)); - - statistic_max = HistBin.EDGES(minimum_index); - - if (empirical_fdr(minimum_index) > probability_max) && minimum_index > 1 - statistic_max = HistBin.EDGES(minimum_index - 1); - end - loglog(axes, HistBin.EDGES(2:end), empirical_fdr, "k"); - hold("on"); - loglog(axes, no_permutations_network_result, statistic_input, "ok"); - axis([min(no_permutations_network_result), 1, min(statistic_input), 1]); - loglog(axes, axes.XLim, [probability_max, probability_max], "b"); - loglog(axes, [statistic_max, statistic_max], axes.YLim, "r"); - - name_label = sprintf("%s P-values", test_method); - nla.gfx.setTitle(axes, name_label); - xlabel(axes, "Asymptotic"); - ylabel(axes, "Permutation-based P-value"); - end - end -end \ No newline at end of file diff --git a/+nla/+net/+result/NetworkResultPlotParameter.m b/+nla/+net/+result/NetworkResultPlotParameter.m index a16d1f8d..5e62efc9 100644 --- a/+nla/+net/+result/NetworkResultPlotParameter.m +++ b/+nla/+net/+result/NetworkResultPlotParameter.m @@ -9,7 +9,7 @@ properties (Dependent) test_methods - noncorrelation_input_tests + noncorrelation_input_test_names number_of_networks end @@ -29,9 +29,9 @@ function result = plotProbabilityParameters(obj, edge_test_options, edge_test_result, test_method, plot_statistic,... plot_title, fdr_correction, significance_filter) % plot_title - this will be a string - % plot_statistic - this is the stat that will be plotted + % plot_statistic - this is the stat that will be plotted, string % significance filter - this will be a boolean or some sort of object (like Cohen's D > D-value) - % fdr_correction - a struct of fdr_correction (found in nla.net.mcc) + % fdr_correction - a struct of fdr_correction (found in nla.net.mcc) or None % test_method - 'no permutations', 'within network pair', 'full connectome' import nla.TriMatrix nla.TriMatrixDiag @@ -73,8 +73,7 @@ % determine colormap and operate on values if it's -log10 switch obj.updated_test_options.prob_plot_method case nla.gfx.ProbPlotMethod.LOG - color_map = nla.net.result.NetworkResultPlotParameter.getLogColormap(obj.default_discrete_colors,... - statistic_input, p_value_max); + color_map = nla.net.result.NetworkResultPlotParameter.getLogColormap(obj.default_discrete_colors, statistic_input, p_value_max); % Here we take a -log10 and change the maximum value to show on the plot case nla.gfx.ProbPlotMethod.NEG_LOG_10 color_map = parula(obj.default_discrete_colors); @@ -89,8 +88,7 @@ end significance_type = nla.gfx.SigType.INCREASING; otherwise - color_map = nla.net.result.NetworkResultPlotParameter.getColormap(obj.default_discrete_colors,... - p_value_max); + color_map = nla.net.result.NetworkResultPlotParameter.getColormap(obj.default_discrete_colors, p_value_max); end % callback function for brain image. @@ -102,7 +100,7 @@ function brainFigureButtonCallback(network1, network2) wait_popup = waitbar(0.05, wait_text); nla.gfx.drawBrainVis(edge_test_options, obj.updated_test_options, obj.network_atlas,... nla.gfx.MeshType.STD, 0.25, 3, true, edge_test_result, network1, network2,... - any(strcmp(obj.noncorrelation_input_tests, obj.network_test_results.test_name))); + any(strcmp(obj.noncorrelation_input_test_names, obj.network_test_results.test_name))); waitbar(0.95); close(wait_popup); end @@ -142,8 +140,8 @@ function brainFigureButtonCallback(network1, network2) value = obj.network_test_results.test_methods; end - function value = get.noncorrelation_input_tests(obj) - value = obj.network_test_results.noncorrelation_input_tests; + function value = get.noncorrelation_input_test_names(obj) + value = obj.network_test_results.noncorrelation_input_test_names; end function value = get.number_of_networks(obj) @@ -201,7 +199,6 @@ function brainFigureButtonCallback(network1, network2) color_map_name = str2func(lower(color_map)); color_map_base = color_map_name(default_discrete_colors); end - default_color_map = [1 1 1]; if p_value_max == 0 color_map = default_color_map; diff --git a/+nla/+net/+result/NetworkTestResult.m b/+nla/+net/+result/NetworkTestResult.m index becfe670..51565159 100644 --- a/+nla/+net/+result/NetworkTestResult.m +++ b/+nla/+net/+result/NetworkTestResult.m @@ -80,7 +80,7 @@ function output(obj, edge_test_options, updated_test_options, network_atlas, edg result_plot_parameters = NetworkResultPlotParameter(obj, network_atlas, updated_test_options); % Cohen's D results for markers - cohens_d_filter = TriMatrix(network_atlas.numNets, 'logical', TriMatrixDiag.KEEP_DIAGONAL); + cohens_d_filter = TriMatrix(network_atlas.numNets(), 'logical', TriMatrixDiag.KEEP_DIAGONAL); if ~obj.is_noncorrelation_input cohens_d_filter.v = (obj.full_connectome.d.v >= updated_test_options.d_max); end @@ -142,10 +142,9 @@ function concatenateResult(obj, other_object) obj.last_index = obj.last_index + 1; end - % I'm assuming this is Get Significance Matrix. It's used for the convergence plots button, but the naming makes zero sense - % Any help on renaming would be great. function [test_number, significance_count_matrix, names] = getSigMat(obj, network_test_options, network_atlas, flags) - + % I'm assuming this is Get Significance Matrix. It's used for the convergence plots button, but the naming makes zero sense + % Any help on renaming would be great. import nla.TriMatrix nla.TriMatrixDiag test_number = 0; @@ -172,11 +171,6 @@ function concatenateResult(obj, other_object) names, significance, name); end - %% This is taken directly from old version to maintain functionality. Not sure anyone uses it. - function table_new = generateSummaryTable(obj, table_old) - table_new = [table_old, table(obj.full_connectome.p_value.v, 'VariableNames', [obj.test_name + "P-value"])]; - end - %% % getters for dependent properties function value = get.permutation_count(obj) @@ -203,9 +197,16 @@ function concatenateResult(obj, other_object) function createResultsStorage(obj, test_options, number_of_networks, test_specific_statistics) %CREATERESULTSSTORAGE Create the substructures for the methods chosen - % We're just doing them all! The ranking is so short compared to the data collection, just do them all - setup_test_methods = ["no_permutations", "full_connectome", "within_network_pair"]; + % no_permutations always runs + setup_test_methods = ["no_permutations"]; + % if within_network_pair is being run, than full connectome is/can also be done + % if only full_connectome is being run, then we don't run within_net_pair + if isfield(test_options, "within_net_pair") && test_options.within_net_pair + setup_test_methods = [setup_test_methods, "full_connectome", "within_network_pair"]; + elseif isfield(test_options, "full_connectome") && test_options.full_connectome + setup_test_methods = [setup_test_methods, "full_connectome"]; + end % create the results containers. This replaces the false boolean with a struct of TriMatrices for test_method_index = 1:numel(setup_test_methods) obj.createPValueTriMatrices(number_of_networks, setup_test_methods(test_method_index)); @@ -260,7 +261,7 @@ function createPValueTriMatrices(obj, number_of_networks, test_method) end function noPermutationsPlotting(obj, plot_parameters, edge_test_options, edge_test_result, updated_test_options, flags) - import nla.gfx.createFigure nla.net.result.plot.PermutationTestPlotter nla.net.result.chord.ChordPlotter + import nla.gfx.createFigure nla.net.result.plot.NoPermutationPlotter nla.net.result.chord.ChordPlotter plot_test_type = "no_permutations"; @@ -277,7 +278,7 @@ function noPermutationsPlotting(obj, plot_parameters, edge_test_options, edge_te p_value_vs_network_size_parameters = plot_parameters.plotProbabilityVsNetworkSize("no_permutations",... p_value); - plotter = PermutationTestPlotter(plot_parameters.network_atlas); + plotter = NoPermutationPlotter(plot_parameters.network_atlas); % don't need to create a reference to axis since drawMatrixOrg takes a figure as a reference % plot the probability @@ -301,9 +302,9 @@ function noPermutationsPlotting(obj, plot_parameters, edge_test_options, edge_te end function fullConnectomePlotting(obj, network_atlas, edge_test_options, edge_test_result, updated_test_options, cohens_d_filter, flags) - import nla.gfx.createFigure nla.net.result.NetworkResultPlotParameter nla.net.result.plot.PermutationTestPlotter + import nla.gfx.createFigure nla.net.result.NetworkResultPlotParameter nla.net.result.plot.FullConnectomePlotter import nla.net.result.chord.ChordPlotter - + plot_test_type = "full_connectome"; plot_title = sprintf("Full Connectome Method\nNetwork vs. Connectome Significance"); @@ -335,7 +336,7 @@ function fullConnectomePlotting(obj, network_atlas, edge_test_options, edge_test % create a histogram p_value_histogram = obj.createHistogram(p_value); - plotter = PermutationTestPlotter(edge_test_options.net_atlas); + plotter = FullConnectomePlotter(edge_test_options.net_atlas); % With the way subplot works, we have to do the plotting this way. I tried assigning variables to the subplots, % but then the plots get put under different layers. @@ -381,7 +382,7 @@ function fullConnectomePlotting(obj, network_atlas, edge_test_options, edge_test end function withinNetworkPairPlotting(obj, network_atlas, edge_test_options, edge_test_result, updated_test_options, cohens_d_filter, flags) - import nla.gfx.createFigure nla.net.result.NetworkResultPlotParameter nla.net.result.plot.PermutationTestPlotter + import nla.gfx.createFigure nla.net.result.NetworkResultPlotParameter nla.net.result.plot.WithinNetworkPairPlotter import nla.net.result.chord.ChordPlotter plot_test_type = "within_network_pair"; @@ -406,7 +407,7 @@ function withinNetworkPairPlotting(obj, network_atlas, edge_test_options, edge_t if flags.plot_type == nla.PlotType.FIGURE - plotter = PermutationTestPlotter(edge_test_options.net_atlas); + plotter = WithinNetworkPairPlotter(edge_test_options.net_atlas); y_coordinate = 425; if obj.is_noncorrelation_input plot_figure = createFigure(500, 900); @@ -447,22 +448,6 @@ function withinNetworkPairPlotting(obj, network_atlas, edge_test_options, edge_t p_value = strcat("single_sample_", p_value); end end - - % I don't really know what these do and haven't really thought about it. Hence the bad naming. - function [sig, name] = singleSigMat(obj, network_atlas, edge_test_options, p_value, mcc_method, title_prefix) - p_value_max = mcc_method.correct(network_atlas, edge_test_options, p_value); - p_breakdown_labels = mcc_method.createLabel(network_atlas, edge_test_options, p_value); - - sig = nla.TriMatrix(network_atlas.numNets(), 'double', nla.TriMatrixDiag.KEEP_DIAGONAL); - sig.v = (p_value.v < p_value_max); - name = sprintf("%s %s P < %.2g (%s)", title_prefix, obj.test_display_name, p_value_max, p_breakdown_labels); - end - - function [number_of_tests, sig_count_mat, names] = appendSignificanceMatrix(obj, number_of_tests, sig_count_mat, names, sig, name) - number_of_tests = number_of_tests + 1; - sig_count_mat.v = sig_count_mat.v + sig.v; - names = [names name]; - end end methods (Static) @@ -471,11 +456,8 @@ function withinNetworkPairPlotting(obj, network_atlas, edge_test_options, edge_t % thresholds etc. for summary statistics, or generally can be % modified without requiring re-permutation) import nla.inputField.Integer nla.inputField.Number - options = {... - Integer('behavior_count', 'Test count:', 1, 1, Inf),... - Number('prob_max', 'Net-level P threshold <', 0, 0.05, 1),... - Number('d_max', "Cohen's D threshold >", 0, 0.5, 1),... - }; + options = {Integer('behavior_count', 'Test count:', 1, 1, Inf),... + Number('prob_max', 'Net-level P threshold <', 0, 0.05, 1)}; end end end \ No newline at end of file diff --git a/+nla/+net/+test/ChiSquaredTest.m b/+nla/+net/+test/ChiSquaredTest.m index 36e6c795..830a0112 100644 --- a/+nla/+net/+test/ChiSquaredTest.m +++ b/+nla/+net/+test/ChiSquaredTest.m @@ -23,7 +23,7 @@ permutation_results = "no_permutations"; chi2_statistic = "chi2_statistic"; greater_than_expected = "greater_than_expected"; - if isequal(permutations, true) + if permutations % Otherwise, add it on to the back of the 'permutation_results' structure permutation_results = "permutation_results"; chi2_statistic = strcat(chi2_statistic, "_permutations"); @@ -44,7 +44,7 @@ network_ROI_count = numel(network_pair_ROI_significance); observed_significance = sum(network_pair_ROI_significance); expected_significance = edge_test_results.avg_prob_sig * network_ROI_count; - chi2_value = ((observed_significance - expected_significance) .^ 2) .* ((expected_significance .^ -1)); %legacy style, AS 240529 + chi2_value = ((observed_significance - expected_significance) .^ 2) ./ expected_significance; result.(permutation_results).(chi2_statistic).set(network, network2, chi2_value); result.(permutation_results).(greater_than_expected).set(network, network2, observed_significance > expected_significance); end diff --git a/+nla/+net/+test/HyperGeometricTest.m b/+nla/+net/+test/HyperGeometricTest.m index 5d1e7eb2..df4b4217 100644 --- a/+nla/+net/+test/HyperGeometricTest.m +++ b/+nla/+net/+test/HyperGeometricTest.m @@ -24,7 +24,7 @@ permutation_results = "no_permutations"; greater_than_expected = "greater_than_expected"; p_value = "p_value"; - if isequal(permutations, true) + if permutations % Otherwise, add it on to the back of the 'permutation_results' structure permutation_results = "permutation_results"; greater_than_expected = strcat(greater_than_expected, "_permutations"); diff --git a/+nla/+net/+test/KolmogorovSmirnovTest.m b/+nla/+net/+test/KolmogorovSmirnovTest.m index c9edf125..224c9db0 100644 --- a/+nla/+net/+test/KolmogorovSmirnovTest.m +++ b/+nla/+net/+test/KolmogorovSmirnovTest.m @@ -27,7 +27,7 @@ ks_statistic = "ks_statistic"; single_sample_p_value = "single_sample_p_value"; single_sample_ks_statistic = "single_sample_ks_statistic"; - if isequal(permutations, true) + if permutations % Otherwise, add it on to the back of the 'permutation_results' structure permutation_results = "permutation_results"; p_value = strcat(p_value, "_permutations"); @@ -60,10 +60,9 @@ methods (Static) function inputs = requiredInputs() - inputs = {... - nla.inputField.Integer('behavior_count', 'Test count:', 1, 1, Inf),... + inputs = {nla.inputField.Integer('behavior_count', 'Test count:', 1, 1, Inf),... nla.inputField.Number('prob_max', 'Net-level P threshold <', 0, 0.05, 1),... - }; + nla.inputField.Number('d_max', "Net-level Cohen's D threshold >", 0, 0.5, 1);}; end end end \ No newline at end of file diff --git a/+nla/+net/+test/StudentTTest.m b/+nla/+net/+test/StudentTTest.m index 730a16ae..1867d5be 100644 --- a/+nla/+net/+test/StudentTTest.m +++ b/+nla/+net/+test/StudentTTest.m @@ -27,7 +27,7 @@ t_statistic = "t_statistic"; single_sample_p_value = "single_sample_p_value"; single_sample_t_statistic = "single_sample_t_statistic"; - if isequal(permutations, true) + if permutations % Otherwise, add it on to the back of the 'permutation_results' structure permutation_results = "permutation_results"; p_value = strcat(p_value, "_permutations"); @@ -60,10 +60,9 @@ methods (Static) function inputs = requiredInputs() - inputs = {... - nla.inputField.Integer('behavior_count', 'Test count:', 1, 1, Inf),... - nla.inputField.Number('prob_max', 'Net-level P threshold <', 0, 0.05, 1),... - }; + inputs = {nla.inputField.Integer('behavior_count', 'Test count:', 1, 1, Inf),... + nla.inputField.Number('prob_max', 'Net-level P threshold <', 0, 0.05, 1),... + nla.inputField.Number('d_max', "Net-level Cohen's D threshold >", 0, 0.5, 1);}; end end end \ No newline at end of file diff --git a/+nla/+net/+test/WelchTTest.m b/+nla/+net/+test/WelchTTest.m index 7f464a90..30d87cea 100644 --- a/+nla/+net/+test/WelchTTest.m +++ b/+nla/+net/+test/WelchTTest.m @@ -29,7 +29,7 @@ t_statistic = "t_statistic"; single_sample_p_value = "single_sample_p_value"; single_sample_t_statistic = "single_sample_t_statistic"; - if isequal(permutations, true) + if permutations % Otherwise, add it on to the back of the 'permutation_results' structure permutation_results = "permutation_results"; p_value = strcat(p_value, "_permutations"); @@ -47,11 +47,11 @@ network_rho = edge_test_results.coeff.get(network_atlas.nets(network).indexes,... network_atlas.nets(network2).indexes); - [p, t_stat, ~] = nla.welchT(network_rho, edge_test_results.coeff.v); + [~, p, ~, stats] = ttest2(network_rho, edge_test_results.coeff.v, "Vartype", "unequal"); [~, single_sample_p, ~, single_sample_stats] = ttest(network_rho); result.(permutation_results).(p_value).set(network, network2, p); - result.(permutation_results).(t_statistic).set(network, network2, t_stat); + result.(permutation_results).(t_statistic).set(network, network2, stats.tstat); result.(permutation_results).(single_sample_p_value).set(network, network2, single_sample_p); result.(permutation_results).(single_sample_t_statistic).set(network, network2, single_sample_stats.tstat); end @@ -62,10 +62,9 @@ methods (Static) function inputs = requiredInputs() - inputs = {... - nla.inputField.Integer('behavior_count', 'Test count:', 1, 1, Inf),... + inputs = {nla.inputField.Integer('behavior_count', 'Test count:', 1, 1, Inf),... nla.inputField.Number('prob_max', 'Net-level P threshold <', 0, 0.05, 1),... - }; + nla.inputField.Number('d_max', "Net-level Cohen's D threshold >", 0, 0.5, 1);}; end end end \ No newline at end of file diff --git a/+nla/+net/+test/WilcoxonTest.m b/+nla/+net/+test/WilcoxonTest.m index e8b33023..596f97a8 100644 --- a/+nla/+net/+test/WilcoxonTest.m +++ b/+nla/+net/+test/WilcoxonTest.m @@ -28,7 +28,7 @@ z_statistic = "z_statistic"; single_sample_p_value = "single_sample_p_value"; single_sample_ranksum_statistic = "single_sample_ranksum_statistic"; - if isequal(permutations, true) + if permutations % Otherwise, add it on to the back of the 'permutation_results' structure permutation_results = "permutation_results"; p_value = strcat(p_value, "_permutations"); @@ -63,10 +63,9 @@ methods (Static) function inputs = requiredInputs() - inputs = {... - nla.inputField.Integer('behavior_count', 'Test count:', 1, 1, Inf),... + inputs = {nla.inputField.Integer('behavior_count', 'Test count:', 1, 1, Inf),... nla.inputField.Number('prob_max', 'Net-level P threshold <', 0, 0.05, 1),... - }; + nla.inputField.Number('d_max', "Net-level Cohen's D threshold >", 0, 0.5, 1)}; end end end \ No newline at end of file diff --git a/+nla/+net/ResultRank.m b/+nla/+net/ResultRank.m index a6bf7748..b33d89d3 100644 --- a/+nla/+net/ResultRank.m +++ b/+nla/+net/ResultRank.m @@ -24,104 +24,70 @@ end function ranking_result = rank(obj) - - ranking_result = obj.permuted_network_results.copy(); - - % Ranking + % Copy the nonpermuted network results to put the permuted results into after ranking + ranking_result = obj.nonpermuted_network_results.copy(); + if ~isequal(obj.permuted_network_results.full_connectome, false) + for fieldname = fieldnames(obj.permuted_network_results.permutation_results)' + ranking_result.permutation_results.(fieldname{1}) = obj.permuted_network_results.permutation_results.(fieldname{1}); + end + end + % Experiment wide ranking if obj.permuted_network_results.test_display_name ~= "Cohen's D" ranking_result = obj.basicRank(ranking_result); end end function ranking = basicRank(obj, ranking) - ranking_statistic = false; - if obj.permuted_network_results.test_display_name ~= "Hypergeometric" % Hypergeomtric has no stat to rank + if obj.permuted_network_results.test_display_name ~= "Hypergeometric" ranking_statistic = obj.permuted_network_results.ranking_statistic; end - % Full Connectome ranking - - ranking = obj.fullConnectomeRank(ranking, ranking_statistic); + % Experiment Wide ranking + ranking = obj.experimentWideRank(ranking, ranking_statistic); % Network Pair ranking - ranking = obj.withinNetworkPairRank(ranking, ranking_statistic); + ranking = obj.networkPairRank(ranking, ranking_statistic); end - function ranking = fullConnectomeRank(obj, ranking, ranking_statistic) - + function ranking = experimentWideRank(obj, ranking, ranking_statistic) probability = "p_value"; - no_permutation_result = obj.nonpermuted_network_results.no_permutations; - permutation_results = obj.permuted_network_results.permutation_results; - - for index = 1:numel(no_permutation_result.(probability).v) + for index = 1:numel(obj.nonpermuted_network_results.no_permutations.(probability).v) % statistic ranking if obj.permuted_network_results.test_display_name ~= "Hypergeometric" - combined_statistics = [... - permutation_results.(strcat(ranking_statistic, "_permutations")).v(:);... - no_permutation_result.(ranking_statistic).v(index)... - ]; - ranking.full_connectome.statistic_p_value.v(index) = sum(... - abs(squeeze(combined_statistics)) >= abs(no_permutation_result.(ranking_statistic).v(index))... - ) / (1 + obj.permutations * obj.number_of_network_pairs); + combined_statistics = [obj.permuted_network_results.permutation_results.(strcat(ranking_statistic, "_permutations")).v(:); obj.nonpermuted_network_results.no_permutations.(ranking_statistic).v(index)]; + ranking.full_connectome.statistic_p_value.v(index) = sum(abs(squeeze(combined_statistics)) >= abs(obj.nonpermuted_network_results.no_permutations.(ranking_statistic).v(index))) / (1 + obj.permutations * obj.number_of_network_pairs); end % p-value ranking - combined_probabilities = [... - permutation_results.(strcat(probability, "_permutations")).v(:);... - no_permutation_result.(probability).v(index)... - ]; + combined_probabilities = [obj.permuted_network_results.permutation_results.(strcat(probability, "_permutations")).v(:); obj.nonpermuted_network_results.no_permutations.(probability).v(index)]; [~, sorted_combined_probabilites] = sort(combined_probabilities); - ranking.full_connectome.p_value.v(index) = find(... - squeeze(sorted_combined_probabilites) == 1 + obj.permutations * obj.number_of_network_pairs... - ) / (1 + obj.permutations * obj.number_of_network_pairs); + ranking.full_connectome.p_value.v(index) = find(squeeze(sorted_combined_probabilites) == 1 + obj.permutations * obj.number_of_network_pairs) / (1 + obj.permutations * obj.number_of_network_pairs); end - ranking.full_connectome.d.v = obj.permuted_network_results.full_connectome.d.v; end - function ranking = withinNetworkPairRank(obj, ranking, ranking_statistic) - + function ranking = networkPairRank(obj, ranking, ranking_statistic) if ~any(strcmp(obj.permuted_network_results.test_name, obj.permuted_network_results.noncorrelation_input_tests)) single_sample_probability = "single_sample_p_value"; single_sample_statistic = strcat("single_sample_", ranking_statistic); - - no_permutation_result = obj.nonpermuted_network_results.no_permutations; - permutation_results = obj.permuted_network_results.permutation_results; - if obj.permuted_network_results.test_name == "wilcoxon" single_sample_statistic = "single_sample_ranksum_statistic"; end - - for index = 1:numel(no_permutation_result.(single_sample_probability).v) + for index = 1:numel(obj.nonpermuted_network_results.no_permutations.(single_sample_probability).v) % statistic ranking - combined_statistics = [... - permutation_results.(strcat(single_sample_statistic, "_permutations")).v(index, :),... - no_permutation_result.(single_sample_statistic).v(index)... - ]; - ranking.within_network_pair.statistic_single_sample_p_value.v(index) = sum(... - abs(squeeze(combined_statistics)) >= abs(no_permutation_result.(single_sample_statistic).v(index))... - ) / (1 + obj.permutations); - - % p-value ranking - combined_probabilities = [... - permutation_results.(strcat(single_sample_probability, "_permutations")).v(index, :),... - no_permutation_result.(single_sample_probability).v(index)... - ]; + combined_statistics = [obj.permuted_network_results.permutation_results.(strcat(single_sample_statistic, "_permutations")).v(index, :), obj.nonpermuted_network_results.no_permutations.(single_sample_statistic).v(index)]; + ranking.within_network_pair.single_sample_statistic_p_value.v(index) = sum(abs(squeeze(combined_statistics)) >= abs(obj.nonpermuted_network_results.no_permutations.(single_sample_statistic).v(index))) / (1 + obj.permutations); + % p-value ranking + combined_probabilities = [obj.permuted_network_results.permutation_results.(strcat(single_sample_probability, "_permutations")).v(index, :), obj.nonpermuted_network_results.no_permutations.(single_sample_probability).v(index)]; [~, sorted_combined_probabilites] = sort(combined_probabilities); - ranking.within_network_pair.single_sample_p_value.v(index) = find(... - squeeze(sorted_combined_probabilites) == 1 + obj.permutations... - ) / (1 + obj.permutations); + ranking.within_network_pair.single_sample_p_value.v(index) = find(squeeze(sorted_combined_probabilites) == 1 + obj.permutations) / (1 + obj.permutations); end - - elseif isstruct(obj.permuted_network_results.within_network_pair) &&... - any(strcmp(obj.permuted_network_results.test_name, obj.permuted_network_results.noncorrelation_input_tests)) + elseif isstruct(obj.permuted_network_results.within_network_pair) && any(strcmp(obj.permuted_network_results.test_name, obj.permuted_network_results.noncorrelation_input_tests)) % This condition catches Chi-Squared and Hypergeometric tests. We do not do within network ranking for them, we just copy % the full connectome ranking over. - ranking.within_network_pair.single_sample_p_value = ranking.full_connectome.p_value; + ranking.permuted_network_results.within_network_pair.single_sample_p_value = ranking.permuted_network_results.full_connectome.p_value; end - ranking.within_network_pair.d.v = obj.permuted_network_results.within_network_pair.d.v; end - % This takes the above statistic and gets the property to use its size to find the number of permutations function value = get.permutations(obj) - value = size(obj.permuted_network_results.permutation_results.p_value_permutations.v, 2); + value = size(obj.permuted_network_results.permutation_results.p_value_permutations.v, 2); % This takes the above statistic and gets the property to use its size to find the number of permutations end end end \ No newline at end of file diff --git a/+nla/+net/genBaseInputs.m b/+nla/+net/genBaseInputs.m old mode 100644 new mode 100755 index 26d19d36..5ca8af44 --- a/+nla/+net/genBaseInputs.m +++ b/+nla/+net/genBaseInputs.m @@ -1,5 +1,12 @@ function inputs = genBaseInputs() %GENBASEINPUTS Generate struct of required network-level inputs with +<<<<<<< HEAD + % reasonable default values + + inputs = struct('nonpermuted', true, 'full_conn', true, 'within_net_pair', true, 'prob_plot_method',... + nla.gfx.ProbPlotMethod.DEFAULT, 'ranking_method', nla.RankingMethod.P_VALUE, 'edge_chord_plot_method',... + nla.gfx.EdgeChordPlotMethod.PROB, 'fdr_correction', nla.net.mcc.Bonferroni(), 'd_thresh_chord_plot', true); +======= % default values inputs = struct(... 'nonpermuted', true,... @@ -11,4 +18,6 @@ 'fdr_correction', nla.net.mcc.Bonferroni(),... 'd_thresh_chord_plot', true... ); -end \ No newline at end of file +>>>>>>> development +end + diff --git a/+nla/+net/unittests/ChiSquaredTestResult.mat b/+nla/+net/unittests/ChiSquaredTestResult.mat index d9840409a1cc369a4b353d02943ddf8aff6e31aa..e74e6323b258640923fcdae5db32b9967753eb72 100644 GIT binary patch delta 138 zcmV;50CoT71LgyeI21-@Vjv(jATcyLGBY|cGaxcBGBlAMMiu>bkd}UwD&?;ZAx336n?xL;;tRjR7nzCG+Tj s6>IKb*r!u?b91}RLk#h0!B;kZe!9kf(|0bV=XYf=%p(^708j;gw?FJVPXGV_ delta 138 zcmV;50CoT71LgyeI21~CZXh5tATcyLG%z|fHXt%EGBlAMMiu>bkd}UwD&?;ZAx3ag#^^L;=^6jR7nzMf2!@ s6>IKb*r!`~b91}RLk#ih!B;kZe!9kf(|0bV=XYf=%p(^709WOIyEJV)!~g&Q diff --git a/+nla/+net/unittests/NetworkResultPlotParameterTestCase.m b/+nla/+net/unittests/NetworkResultPlotParameterTestCase.m index 8f0299aa..824574b0 100644 --- a/+nla/+net/unittests/NetworkResultPlotParameterTestCase.m +++ b/+nla/+net/unittests/NetworkResultPlotParameterTestCase.m @@ -28,7 +28,6 @@ function loadInputData(testCase) testCase.edge_test_options = struct(); testCase.edge_test_options.coeff_max = 2; testCase.edge_test_options.coeff_min = -2; - testCase.edge_test_options.iteration = 0; precalculated_path = strcat(testCase.root_path, fullfile('examples', 'precalculated/')); @@ -46,8 +45,8 @@ function loadInputData(testCase) testCase.edge_test_options.precalc_perm_coeff = TriMatrix(testCase.network_atlas.numROIs); testCase.edge_test_options.precalc_perm_coeff.v = permutation_coefficient_file.SIM_perm_coeff; % For unit tests, we're only going to use 10 permutations so they don't take forever - testCase.edge_test_options.precalc_perm_p.v = testCase.edge_test_options.precalc_perm_p.v(:, 1:10); - testCase.edge_test_options.precalc_perm_coeff.v = testCase.edge_test_options.precalc_perm_coeff.v(:, 1:10); + testCase.edge_test_options.precalc_perm_p.v = testCase.edge_test_options.precalc_perm_p.v(1:10); + testCase.edge_test_options.precalc_perm_coeff.v = testCase.edge_test_options.precalc_perm_coeff.v(1:10); testCase.edge_test_options.net_atlas = testCase.network_atlas; testCase.edge_test_options.prob_max = 0.05; @@ -67,7 +66,6 @@ function loadInputData(testCase) testCase.edge_test_result = testCase.tests.runEdgeTest(testCase.edge_test_options); testCase.network_test_result = testCase.tests.runNetTests(testCase.network_test_options,... testCase.edge_test_result, testCase.network_atlas, false); - testCase.edge_test_options.iteration = 1; testCase.permutation_results = testCase.tests.runPerm(testCase.edge_test_options, testCase.network_test_options,... testCase.network_atlas, testCase.edge_test_result, testCase.network_test_result,... permutations); @@ -161,5 +159,56 @@ function plotProbabilityParametersNegLogTest(testCase) testCase.verifyEqual(expected_significance_type, probability_parameters.significance_type); testCase.verifyEqual(expected_color_map, probability_parameters.color_map); end + + function getColormapTest(testCase) + import nla.net.result.NetworkResultPlotParameter + + default_colors = 1000; + p_value_max = 1; + default_color_map = [1 1 1]; + parula_color_map = [flip(parula(default_colors)); default_color_map]; + + test_color_map = NetworkResultPlotParameter.getColormap(default_colors, p_value_max); + testCase.verifyEqual(parula_color_map, test_color_map); + + test_color_map = NetworkResultPlotParameter.getColormap(default_colors, 0); + testCase.verifyEqual(default_color_map, test_color_map); + + color_map_name = "cool"; + color_map_function = str2func(color_map_name); + result_color_map = [flip(color_map_function(default_colors)); default_color_map]; + + test_color_map = NetworkResultPlotParameter.getColormap(default_colors, p_value_max, color_map_name); + testCase.verifyEqual(result_color_map, test_color_map); + end + + function getLogColormapTest(testCase) + import nla.net.result.NetworkResultPlotParameter + + permutation_result = testCase.permutation_results.permutation_network_test_results{1}.full_connectome.p_value; + log_min = max([-40, log10(min(nonzeros(permutation_result.v)))]); + + default_colors = 1000; + p_value_max = 1; + default_color_map = [1 1 1]; + parula_color_map = parula(default_colors); + + result_color_map = flip(parula_color_map(ceil(logspace(log_min, 0, default_colors) .* default_colors), :)); + + test_color_map = NetworkResultPlotParameter.getLogColormap(default_colors, permutation_result, p_value_max); + testCase.verifyEqual(test_color_map, [result_color_map; default_color_map]); + + color_map_name = "cool"; + color_map_function = str2func(color_map_name); + cool_color_map = color_map_function(default_colors); + result_color_map = flip(cool_color_map(ceil(logspace(log_min, 0, default_colors) .* default_colors), :)); + + test_color_map = NetworkResultPlotParameter.getLogColormap(default_colors, permutation_result, p_value_max,... + color_map_name); + testCase.verifyEqual(test_color_map, [result_color_map; default_color_map]) + + test_color_map = NetworkResultPlotParameter.getLogColormap(default_colors, permutation_result, 0); + testCase.verifyEqual(test_color_map, default_color_map); + end end end \ No newline at end of file diff --git a/+nla/+net/unittests/ResultRankTestCase.m b/+nla/+net/unittests/ResultRankTestCase.m index d99cf649..08f66caf 100644 --- a/+nla/+net/unittests/ResultRankTestCase.m +++ b/+nla/+net/unittests/ResultRankTestCase.m @@ -102,16 +102,16 @@ function fullConnectomeRankTest(testCase) result_ranker = nla.net.ResultRank(testCase.network_test_result{1}, testCase.permuted_network_results{1},... testCase.number_of_network_pairs); ranking = testCase.permuted_network_results{1}.copy(); - ranking = result_ranker.fullConnectomeRank(ranking, testCase.permuted_network_results{1}.ranking_statistic); + ranking = result_ranker.experimentWideRank(ranking, testCase.permuted_network_results{1}.ranking_statistic); testCase.verifyEqual(ranking.full_connectome.p_value.v, testCase.ranking.full_connectome.p_value.v); end - function withinNetworkPairTest(testCase) + function networkPairTest(testCase) result_ranker = nla.net.ResultRank(testCase.network_test_result{1}, testCase.permuted_network_results{1},... testCase.number_of_network_pairs); ranking = testCase.permuted_network_results{1}.copy(); - ranking = result_ranker.withinNetworkPairRank(ranking, testCase.permuted_network_results{1}.ranking_statistic); + ranking = result_ranker.networkPairRank(ranking, testCase.permuted_network_results{1}.ranking_statistic); testCase.verifyEqual(ranking.within_network_pair.p_value.v, testCase.ranking.within_network_pair.p_value.v); end diff --git a/+nla/+tests/TestPoolTest.m b/+nla/+tests/TestPoolTest.m index 28139d64..49a23d54 100644 --- a/+nla/+tests/TestPoolTest.m +++ b/+nla/+tests/TestPoolTest.m @@ -14,6 +14,10 @@ function loadTestData(testCase) testCase.variables.edge_results_perm = edge_results_perm; load(fullfile('nla', 'tests', 'networkInputStruct'), 'net_input_struct'); testCase.variables.net_input_struct = net_input_struct; + load(fullfile('nla', 'tests', 'networkResultsNonPermuted'), 'net_results_nonperm'); + testCase.variables.net_results_nonperm = net_results_nonperm; + load(fullfile('nla', 'tests', 'networkResultsPermuted'), 'net_results_perm'); + testCase.variables.net_results_perm = net_results_perm; load(fullfile('nla', 'tests', 'networkAtlas'), 'net_atlas'); testCase.variables.net_atlas = net_atlas; end @@ -33,5 +37,93 @@ function permutationEdgeTest(testCase) permuted_edge_results = test_pool.runEdgeTestPerm(testCase.variables.input_struct, 20, 1); testCase.verifyEqual(permuted_edge_results, testCase.variables.edge_results_perm); end + + function chiSquaredPermutationTest(testCase) + import nla.TestPool nla.net.test.ChiSquared + + test_pool = TestPool(); + test_pool.net_tests{1} = ChiSquared(); + network_level_results = test_pool.runNetTestsPerm(testCase.variables.net_input_struct, testCase.variables.net_atlas, testCase.variables.edge_results_perm); + nonpermuted_network_results = {}; + nonpermuted_network_results{1} = testCase.variables.net_results_nonperm{1}; + network_results_ranked = test_pool.rankResults(testCase.variables.input_struct, nonpermuted_network_results, network_level_results, testCase.variables.net_atlas.numNetPairs()); + testCase.verifyEqual(network_results_ranked{1}, testCase.variables.net_results_perm{1}); + end + + function cohenDPermutationTest(testCase) + import nla.TestPool nla.net.test.CohenD + + test_pool = TestPool(); + test_pool.net_tests{1} = CohenD(); + network_level_results = test_pool.runNetTestsPerm(testCase.variables.net_input_struct, testCase.variables.net_atlas, testCase.variables.edge_results_perm); + nonpermuted_network_results = {}; + nonpermuted_network_results{1} = testCase.variables.net_results_nonperm{2}; + network_results_ranked = test_pool.rankResults(testCase.variables.input_struct, nonpermuted_network_results, network_level_results, testCase.variables.net_atlas.numNetPairs()); + + % The following line is due to an error in creation of CohenD results. Since this doesn't technically exist, every value is 1/(1+permutations). The permutation result sets them to zero. We set them equal to pass + testCase.variables.net_results_perm{2}.within_np_prob.v = network_results_ranked{1}.within_np_prob.v; + + testCase.verifyEqual(network_results_ranked{1}, testCase.variables.net_results_perm{2}); + end + + function hyperGeoPermutationTest(testCase) + import nla.TestPool nla.net.test.HyperGeo + + test_pool = TestPool(); + test_pool.net_tests{1} = HyperGeo(); + network_level_results = test_pool.runNetTestsPerm(testCase.variables.net_input_struct, testCase.variables.net_atlas, testCase.variables.edge_results_perm); + nonpermuted_network_results = {}; + nonpermuted_network_results{1} = testCase.variables.net_results_nonperm{3}; + network_results_ranked = test_pool.rankResults(testCase.variables.input_struct, nonpermuted_network_results, network_level_results, testCase.variables.net_atlas.numNetPairs()); + testCase.verifyEqual(network_results_ranked{1}, testCase.variables.net_results_perm{3}); + end + + function kolmogorovSmirnovPermutationTest(testCase) + import nla.TestPool nla.net.test.KolmogorovSmirnov + + test_pool = TestPool(); + test_pool.net_tests{1} = KolmogorovSmirnov(); + network_level_results = test_pool.runNetTestsPerm(testCase.variables.net_input_struct, testCase.variables.net_atlas, testCase.variables.edge_results_perm); + nonpermuted_network_results = {}; + nonpermuted_network_results{1} = testCase.variables.net_results_nonperm{4}; + network_results_ranked = test_pool.rankResults(testCase.variables.input_struct, nonpermuted_network_results, network_level_results, testCase.variables.net_atlas.numNetPairs()); + testCase.verifyEqual(network_results_ranked{1}, testCase.variables.net_results_perm{4}); + end + + function studentTPermutationTest(testCase) + import nla.TestPool nla.net.test.StudentT + + test_pool = TestPool(); + test_pool.net_tests{1} = StudentT(); + network_level_results = test_pool.runNetTestsPerm(testCase.variables.net_input_struct, testCase.variables.net_atlas, testCase.variables.edge_results_perm); + nonpermuted_network_results = {}; + nonpermuted_network_results{1} = testCase.variables.net_results_nonperm{5}; + network_results_ranked = test_pool.rankResults(testCase.variables.input_struct, nonpermuted_network_results, network_level_results, testCase.variables.net_atlas.numNetPairs()); + testCase.verifyEqual(network_results_ranked{1}, testCase.variables.net_results_perm{5}); + end + + function welchTPermutationTest(testCase) + import nla.TestPool nla.net.test.WelchT + + test_pool = TestPool(); + test_pool.net_tests{1} = WelchT(); + network_level_results = test_pool.runNetTestsPerm(testCase.variables.net_input_struct, testCase.variables.net_atlas, testCase.variables.edge_results_perm); + nonpermuted_network_results = {}; + nonpermuted_network_results{1} = testCase.variables.net_results_nonperm{6}; + network_results_ranked = test_pool.rankResults(testCase.variables.input_struct, nonpermuted_network_results, network_level_results, testCase.variables.net_atlas.numNetPairs()); + testCase.verifyEqual(network_results_ranked{1}, testCase.variables.net_results_perm{6}); + end + + function wilcoxonPermutationTest(testCase) + import nla.TestPool nla.net.test.Wilcoxon + + test_pool = TestPool(); + test_pool.net_tests{1} = Wilcoxon(); + network_level_results = test_pool.runNetTestsPerm(testCase.variables.net_input_struct, testCase.variables.net_atlas, testCase.variables.edge_results_perm); + nonpermuted_network_results = {}; + nonpermuted_network_results{1} = testCase.variables.net_results_nonperm{7}; + network_results_ranked = test_pool.rankResults(testCase.variables.input_struct, nonpermuted_network_results, network_level_results, testCase.variables.net_atlas.numNetPairs()); + testCase.verifyEqual(network_results_ranked{1}, testCase.variables.net_results_perm{7}); + end end end \ No newline at end of file diff --git a/+nla/ResultPool.m b/+nla/ResultPool.m index 96dab4c6..24c7df0c 100755 --- a/+nla/ResultPool.m +++ b/+nla/ResultPool.m @@ -38,11 +38,10 @@ function output(obj) flags.show_within_net_pair = true; %Add to display net results as nla.PlotType.FIGURE (ADE 20221121) flags.plot_type = nla.PlotType.FIGURE; - if ~islogical(obj.permutation_network_test_results) - for i = 1:numel(obj.permutation_network_test_results) - obj.network_test_results{i}.output(obj.test_options, obj.network_test_options, obj.network_atlas,... - obj.edge_test_results, flags); - obj.permutation_network_test_results{i}.output(obj.test_options, obj.network_test_options,... + if ~islogical(obj.network_test_results) + for i = 1:numel(obj.network_test_results) + obj.network_test_results{i}.output(obj.network_test_options, obj.network_atlas, obj.edge_test_results, flags); + obj.permutation_network_test_results{i}.output(obj.network_test_options,... obj.network_atlas, obj.edge_test_results, flags); end end @@ -78,7 +77,7 @@ function saveSummaryTable(obj, filename) network_pairs2 = TriMatrix(network_pairs2_matrix, TriMatrixDiag.KEEP_DIAGONAL); summary_table = table(network_pairs.v, network_pairs2.v, 'VariableNames', ["Network 1", "Network 2"]); for i = 1:numel(obj.permutation_network_test_results) - summary_table = obj.permutation_network_test_results{i}.generateSummaryTable(summary_table); + summary_table = obj.permutation_network_test_results{i}.genSummaryTable(summary_table); end writetable(summary_table, filename, 'Delimiter', '\t'); diff --git a/+nla/TestPool.m b/+nla/TestPool.m index f8f2390e..9d86b2f9 100755 --- a/+nla/TestPool.m +++ b/+nla/TestPool.m @@ -27,129 +27,156 @@ methods function obj = TestPool() + % this MUST be instantiated here it cannot be done in the + % properties field because NLA cannot be imported when setting + % things in the properties field, hence, NLA specific values + % cannot be assigned unless you want it to break if they use + % this toolbox anywhere outside of the NetworkLevelAnalysis + % folder. obj.edge_test = nla.edge.test.Pearson(); end - function result = runPerm(obj, edge_input_struct, net_input_struct, network_atlas, nonpermuted_edge_test_results,... - nonpermuted_network_test_results, num_perms, perm_seed, separate_network_and_edge_tests) - + function result = runPerm(obj, edge_input_struct, net_input_struct, net_atlas, edge_result_nonperm, net_results_nonperm, num_perms, perm_seed) if ~exist('perm_seed', 'var') perm_seed = false; end - if ~exist('separate_network_and_edge_tests', 'var') - separate_network_and_edge_tests = false; - end - - if isequal(separate_network_and_edge_tests, false) - [permuted_edge_test_results, permuted_network_test_results] = obj.runEdgeAndNetPerm(edge_input_struct,... - net_input_struct, network_atlas, nonpermuted_edge_test_results, num_perms, perm_seed); - else - [permuted_edge_test_results, permuted_network_test_results] = obj.runPermSeparateEdgeAndNet(edge_input_struct,... - net_input_struct, network_atlas, num_perms, perm_seed); - end + [edge_results_perm, net_results_perm] = obj.runEdgeAndNetPerm(edge_input_struct, net_input_struct, ... + net_atlas, edge_result_nonperm, net_results_nonperm, num_perms, perm_seed); - ranked_permuted_network_test_results = obj.collateNetworkPermutationResults(nonpermuted_edge_test_results, network_atlas,... - nonpermuted_network_test_results, permuted_network_test_results, net_input_struct); - - result = nla.ResultPool(edge_input_struct, net_input_struct, network_atlas, nonpermuted_edge_test_results,... - nonpermuted_network_test_results, permuted_edge_test_results, ranked_permuted_network_test_results); + result = nla.ResultPool(edge_input_struct, net_input_struct, net_atlas, edge_result_nonperm, net_results_nonperm, edge_results_perm, net_results_perm); end - function ranked_results = collateNetworkPermutationResults(obj, nonpermuted_edge_test_results, network_atlas, nonpermuted_network_test_results,... - permuted_network_test_results, input_struct) + function result = runPermSeparateAllEdgeAndAllNet(obj, input_struct, net_input_struct, net_atlas, edge_result_nonperm, net_results_nonperm, num_perms, perm_seed) + %This is code that first runs all edge permutations, and then + %runs all net permutations + %NOTE: This currently involves saving all edge results from all + %permutations in the working results object + if ~exist('perm_seed', 'var') + perm_seed = false; + end + edge_results_perm = obj.runEdgeTestPerm(input_struct, num_perms, perm_seed); + net_results_perm = obj.runNetTestsPerm(net_input_struct, net_atlas, net_results_nonperm, edge_results_perm, edge_result_nonperm); + result = nla.ResultPool(input_struct, net_input_struct, net_atlas, edge_result_nonperm, net_results_nonperm, edge_results_perm, net_results_perm); + end + + function [edge_results_perm, net_results_perm] = runEdgeAndNetPerm(obj, edge_input_struct, net_input_struct, net_atlas, edge_result_nonperm, net_results_nonperm, num_perms, perm_seed) + if ~exist('perm_seed', 'var') || islogical(perm_seed) + rng(posixtime(datetime())); + perm_seed = randi(intmax('uint32'), 'uint32'); + end - % Run Cohen's D - cohen_d_test = nla.net.CohenDTest(); - - % Warning: Hacky code. Because of the way non-permuted network tests and permuted are called from the front, they are stored - % in different objects. (Notice the input argument for non-permuted network results). Eventually, it should probably be done - % that we do them all here. That may be another ticket. For now, we're copying over. +[num_procs, blocks] = obj.initializeParallelPool(num_perms); + + + parfor proc = 1:num_procs + net_result_block = cell(numNetTests(obj), 1); + + for i = 1:numNetTests(obj) + net_result_block{i} = copy(net_results_nonperm{i}); + end + obj.runEdgeAndNetPermBlock(edge_input_struct, net_input_struct, net_atlas, net_result_block, blocks(proc), blocks(proc+1), perm_seed); + net_result_blocks{proc} = net_result_block; + end + + edge_results_perm = nla.edge.result.PermBase(); + edge_results_perm.perm_count = num_perms; + % and net level result chunks + net_results_perm = {}; for test_index = 1:numNetTests(obj) - permuted_network_test_results{test_index} = cohen_d_test.run(nonpermuted_edge_test_results, network_atlas,... - permuted_network_test_results{test_index}); + for proc_index = 1:num_procs + cur_proc_net_results = net_result_blocks{proc_index}; + cur_test_net_results(proc_index) = cur_proc_net_results(test_index); + end + net_results_perm{test_index} = cur_test_net_results{1}; + net_results_perm{test_index}.merge(net_input_struct, edge_result_nonperm, edge_results_perm, net_atlas, {cur_test_net_results{2:end}}); end - for test_index = 1:numNetTests(obj) - for test_index2 = 1:numNetTests(obj) - if nonpermuted_network_test_results{test_index2}.test_name == permuted_network_test_results{test_index}.test_name - permuted_network_test_results{test_index}.no_permutations = nonpermuted_network_test_results{test_index2}.no_permutations; - break - end + + end + + function net_result_block = runEdgeAndNetPermBlock(obj, edge_input_struct, net_input_struct, net_atlas, net_result_block, block_start, block_end, perm_seed) + + + for iteration = block_start:block_end - 1 + % set RNG per-iteration based on the random seed and + % iteration number, so the # of processes doesn't impact + % the result(important for repeatability if running + % permutations with the same seed intentionally) + rng(bitxor(perm_seed, iteration)); + permuted_input = edge_input_struct.permute_method.permute(edge_input_struct); + permuted_input.iteration = iteration; + + single_edge_result = obj.runEdgeTest(permuted_input); + %net_input_struct.iteration = iteration; + obj.runNetTests(net_input_struct, single_edge_result, net_atlas, net_result_block); + + if ~islogical(obj.data_queue) + send(obj.data_queue, iteration); end end - - ranked_results = obj.rankResults(input_struct, nonpermuted_network_test_results,... - permuted_network_test_results, network_atlas.numNetPairs()); + end - - function [permuted_edge_results, permuted_network_results] = runEdgeAndNetPerm(obj, edge_input_struct, net_input_struct,... - net_atlas, edge_result_nonperm, num_perms, perm_seed) + + function edge_result_perm = runEdgeTestPerm(obj, input_struct, num_perms, perm_seed) + % Optional perm_seed parameter for replicating runs. If not + % passed in, is set from current date/time and thus will + % produce different results, assuming you don't run it twice at + % the same time + if ~exist('perm_seed', 'var') || islogical(perm_seed) + rng(posixtime(datetime())); + perm_seed = randi(intmax('uint32'), 'uint32'); + end + + [num_procs, blocks] = obj.initializeParallelPool(num_perms); - % get current parallel pool or start a new one - [number_of_processes, blocks] = obj.initializeParallelPool(num_perms); - parfor process = 1:number_of_processes - network_result_block = obj.runEdgeAndNetPermBlock(edge_input_struct, net_input_struct, net_atlas,... - blocks(process), blocks(process+1), perm_seed); - network_result_blocks{process} = network_result_block; + parfor proc = 1:num_procs + net_result_block = cell(numNetTests(obj), 1); + + for i = 1:numNetTests(obj) + net_result_block{i} = copy(net_results_nonperm{i}); + end + obj.runEdgeAndNetPermBlock(edge_input_struct, net_input_struct, net_atlas, net_result_block, blocks(proc), blocks(proc+1), perm_seed); + net_result_blocks{proc} = net_result_block; end - permuted_edge_results = nla.edge.result.PermBase(); - permuted_edge_results.perm_count = num_perms; + edge_results_perm = nla.edge.result.PermBase(); + edge_results_perm.perm_count = num_perms; % and net level result chunks - permuted_network_results = network_result_blocks{1}; - for process = 2:number_of_processes - current_network_test_results = network_result_blocks{process}; - for test_index = 1:numNetTests(obj) - current_test_network_result = current_network_test_results(test_index); - permuted_network_results{test_index}.merge(current_test_network_result); + net_results_perm = {}; + for test_index = 1:numNetTests(obj) + for proc_index = 1:num_procs + cur_proc_net_results = net_result_blocks{proc_index}; + cur_test_net_results(proc_index) = cur_proc_net_results(test_index); end + net_results_perm{test_index} = cur_test_net_results{1}; + net_results_perm{test_index}.merge(net_input_struct, edge_result_nonperm, edge_results_perm, net_atlas, {cur_test_net_results{2:end}}); end + end - - function network_result_block = runEdgeAndNetPermBlock(obj, edge_input_struct, net_input_struct, net_atlas,... - block_start, block_end, perm_seed) + function net_result_block = runEdgeAndNetPermBlock(obj, edge_input_struct, net_input_struct, net_atlas, net_result_block, block_start, block_end, perm_seed) + + for iteration = block_start:block_end - 1 - rng(iteration); + % set RNG per-iteration based on the random seed and + % iteration number, so the # of processes doesn't impact + % the result(important for repeatability if running + % permutations with the same seed intentionally) + rng(bitxor(perm_seed, iteration)); permuted_input = edge_input_struct.permute_method.permute(edge_input_struct); permuted_input.iteration = iteration; single_edge_result = obj.runEdgeTest(permuted_input); - network_results = obj.runNetTests(net_input_struct, single_edge_result, net_atlas, true); + %net_input_struct.iteration = iteration; + obj.runNetTests(net_input_struct, single_edge_result, net_atlas, net_result_block); - % Ugh, this is so horrible. Have to do this due to Matlab not being able to index 2D arrays separately among - % indexes - if iteration - block_start + 1 == 1 - for test = 1:numNetTests(obj) - network_result_block{test} = copy(network_results{test}); - end - else - for test = 1:numNetTests(obj) - network_result_block{test}.merge(network_results{test}); - end - end - if ~islogical(obj.data_queue) send(obj.data_queue, iteration); end end - end - - function [permuted_edge_test_results, permuted_network_test_results] = runPermSeparateEdgeAndNet(obj, input_struct, net_input_struct,... - network_atlas, num_perms, perm_seed) - %This is code that first runs all edge permutations, and then - %runs all net permutations - %NOTE: This currently involves saving all edge results from all - %permutations in the working results object - if ~exist('perm_seed', 'var') - perm_seed = false; - end - edge_results_perm = obj.runEdgeTestPerm(input_struct, num_perms, perm_seed); - net_results_perm = obj.runNetTestsPerm(net_input_struct, net_atlas, net_results_nonperm, edge_results_perm, edge_result_nonperm); - result = nla.ResultPool(input_struct, net_input_struct, net_atlas, edge_result_nonperm, net_results_nonperm, edge_results_perm, net_results_perm); end function edge_result_perm = runEdgeTestPerm(obj, input_struct, num_perms, perm_seed) @@ -200,8 +227,8 @@ send(obj.data_queue, iteration); end end - end - + end + function edge_result = runEdgeTest(obj, input_struct) if ~isfield(input_struct, 'iteration') input_struct.iteration = 0; @@ -273,12 +300,11 @@ function ranked_results = rankResults(obj, input_options, nonpermuted_network_test_results, permuted_network_results, number_of_network_pairs) import nla.net.ResultRank - ranked_results = permuted_network_results; + ranked_results = cell(1, numNetTests(obj)); for test = 1:numNetTests(obj) ranker = ResultRank(nonpermuted_network_test_results{test}, permuted_network_results{test}, number_of_network_pairs); ranked_results_object = ranker.rank(); ranked_results{test} = ranked_results_object; - ranked_results{test}.permutation_results = permuted_network_results{test}.permutation_results; end end end diff --git a/+nla/genTests.m b/+nla/genTests.m index b2a277e4..406515df 100755 --- a/+nla/genTests.m +++ b/+nla/genTests.m @@ -3,11 +3,11 @@ % subpackage: dot-seperated subpackage name within NLA namespace, eg. % 'net.test' for net-level tests root_path = nla.findRootPath(); - relative_path = strrep(subpackage, '.', '/+'); - path_to = [root_path '+nla/+' relative_path]; - network_tests_struct = dir(path_to); - network_test_folder_contents = {network_tests_struct.name}; - network_test_filenames = network_test_folder_contents(~[network_tests_struct.isdir]); + rel_path = strrep(subpackage, '.', '/+'); + path_to = [root_path '+nla/+' rel_path]; + net_test_struct = dir(path_to); + net_test_folder_fnames = {net_test_struct.name}; + net_test_fnames = net_test_folder_fnames(~[net_test_struct.isdir]); tests = {}; for i = 1:numel(network_test_filenames) diff --git a/+nla/welchT.m b/+nla/welchT.m index d6481fd5..dcc6c4da 100755 --- a/+nla/welchT.m +++ b/+nla/welchT.m @@ -1,16 +1,8 @@ function [p_vec, t_vec, dof_vec] = welchT(x1, x2) %WELCHT 2-sample Welch T-test %% Prepare data - x1_size = size(x1); - if x1_size(end) == 1 - x1_size(end) = []; - end - - x2_size = size(x2); - if x2_size(end) == 1 - x2_size(end) = []; - end - + x1_size = size(x1); if x1_size(end) == 1, x1_size(end) = []; end + x2_size = size(x2); if x2_size(end) == 1, x2_size(end) = []; end ndim = length(x1_size); %% Means diff --git a/NLAResult.mlapp b/NLAResult.mlapp index b347128bbaacc3424faa7f540d31b396917a8732..596f482cdbd3aea759729ecfd873443d7569192e 100644 GIT binary patch delta 36651 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�F=zm0B}^FW%Icc-<~_;pgRC;l`+#r97Aca`$-fg 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 AbpQYW diff --git a/NLAResult_exported.m b/NLAResult_exported.m index aa0ed10d..454ae403 100644 --- a/NLAResult_exported.m +++ b/NLAResult_exported.m @@ -2,32 +2,32 @@ % Properties that correspond to app components properties (Access = public) - UIFigure matlab.ui.Figure - FileMenu matlab.ui.container.Menu - SaveButton matlab.ui.container.Menu - ResultTree matlab.ui.container.Tree - FlipNestingButton matlab.ui.control.Button - EdgeLevelLabel matlab.ui.control.Label - ViewEdgeLevelButton matlab.ui.control.Button - NetLevelLabel matlab.ui.control.Label - RunButton matlab.ui.control.Button - DisplaySelectedButton matlab.ui.control.Button - NetlevelplottingDropDownLabel matlab.ui.control.Label - NetlevelplottingDropDown matlab.ui.control.DropDown - DisplayConvergenceButton matlab.ui.control.Button + UIFigure matlab.ui.Figure + FileMenu matlab.ui.container.Menu + SaveButton matlab.ui.container.Menu + ResultTree matlab.ui.container.Tree + FlipNestingButton matlab.ui.control.Button + EdgeLevelLabel matlab.ui.control.Label + ViewEdgeLevelButton matlab.ui.control.Button + NetLevelLabel matlab.ui.control.Label + RunButton matlab.ui.control.Button + DisplaySelectedButton matlab.ui.control.Button + NetlevelpvalueplottingDropDownLabel matlab.ui.control.Label + NetlevelpvalueplottingDropDown matlab.ui.control.DropDown + DisplayConvergenceButton matlab.ui.control.Button ConvergencecolormapDropDownLabel matlab.ui.control.Label - ColormapDropDown matlab.ui.control.DropDown - DisplayChordNet matlab.ui.control.Button - DisplayChordEdge matlab.ui.control.Button - SaveSummaryTable matlab.ui.control.Button - EdgelevelchordplottingLabel matlab.ui.control.Label - EdgeLevelTypeDropDown matlab.ui.control.DropDown - AdjustableNetParamsPanel matlab.ui.container.Panel + ColormapDropDown matlab.ui.control.DropDown + DisplayChordNet matlab.ui.control.Button + DisplayChordEdge matlab.ui.control.Button + SaveSummaryTable matlab.ui.control.Button + EdgelevelchordplottingLabel matlab.ui.control.Label + EdgeLevelTypeDropDown matlab.ui.control.DropDown + TweakNetParamsPanel matlab.ui.container.Panel MultiplecomparisonscorrectionLabel matlab.ui.control.Label - FDRCorrection matlab.ui.control.DropDown + FDRCorrection matlab.ui.control.DropDown showROIcentroidsinbrainplotsCheckBox matlab.ui.control.CheckBox CohensDthresholdchordplotsCheckBox matlab.ui.control.CheckBox - BranchLabel matlab.ui.control.Label + BranchLabel matlab.ui.control.Label end @@ -39,7 +39,7 @@ results = false nesting_by_method = true prog_bar = false - net_adjustable_fields + net_tweakable_fields cur_iter = 0 end @@ -90,57 +90,58 @@ function setNesting(app, nesting_by_method) if nesting_by_method if app.net_input_struct.nonpermuted root = app.createNode(app.ResultTree, 'Non-permuted'); - for i = 1:size(app.results.network_test_results, 2) - result = app.results.network_test_results{i}; - % All our tests have non-permuted data - flags = struct(); - flags.show_nonpermuted = true; - app.createNode(root, result.test_display_name, {result, flags}); + for i = 1:size(app.results.net_results, 2) + result = app.results.net_results{i}; + if result.has_nonpermuted + flags = struct(); + flags.show_nonpermuted = true; + app.createNode(root, result.name, {result, flags}); + end end end if app.net_input_struct.full_conn root = app.createNode(app.ResultTree, 'Full connectome'); - for i = 1:size(app.results.permutation_network_test_results, 2) - result = app.results.permutation_network_test_results{i}; - if ~isequal(result.full_connectome, false) + for i = 1:size(app.results.perm_net_results, 2) + result = app.results.perm_net_results{i}; + if result.has_full_conn flags = struct(); flags.show_full_conn = true; - app.createNode(root, result.test_display_name, {result, flags}); + app.createNode(root, result.name, {result, flags}); end end end if app.net_input_struct.within_net_pair root = app.createNode(app.ResultTree, 'Within Net-pair'); - for i = 1:size(app.results.permutation_network_test_results, 2) - result = app.results.permutation_network_test_results{i}; - if ~isequal(result.within_network_pair, false) + for i = 1:size(app.results.perm_net_results, 2) + result = app.results.perm_net_results{i}; + if result.has_within_net_pair flags = struct(); flags.show_within_net_pair = true; - app.createNode(root, result.test_display_name, {result, flags}); + app.createNode(root, result.name, {result, flags}); end end end else - for i = 1:size(app.results.network_test_results, 2) - root = app.createNode(app.ResultTree, app.results.network_test_results{i}.test_display_name); + for i = 1:size(app.results.net_results, 2) + root = app.createNode(app.ResultTree, app.results.net_results{i}.name); - result = app.results.network_test_results{i}; - if app.net_input_struct.nonpermuted + result = app.results.net_results{i}; + if app.net_input_struct.nonpermuted && result.has_nonpermuted flags = struct(); flags.show_nonpermuted = true; app.createNode(root, 'Non-permuted', {result, flags}); end if app.net_input_struct.full_conn && result.has_full_conn - perm_result = app.results.permutation_network_test_results{i}; - if app.net_input_struct.full_conn && ~isequal(result.full_connectome, false) + perm_result = app.results.perm_net_results{i}; + if app.net_input_struct.full_conn && result.has_full_conn flags = struct(); flags.show_full_conn = true; app.createNode(root, 'Full connectome', {perm_result, flags}); end - if app.net_input_struct.within_net_pair && ~isequal(result.within_network_pair, false) + if app.net_input_struct.within_net_pair && result.has_within_net_pair flags = struct(); flags.show_within_net_pair = true; app.createNode(root, 'Within Net-pair', {perm_result, flags}); @@ -152,12 +153,10 @@ function setNesting(app, nesting_by_method) function updateProgPermStats(app, ~) if ~islogical(app.prog_bar) + app.cur_iter = app.cur_iter + 1; - if app.cur_iter < app.net_input_struct.perm_count - app.prog_bar.Message = sprintf('Running edge-level statistics (%d/%d permutations)', mod(app.cur_iter, app.net_input_struct.perm_count), app.net_input_struct.perm_count); - else - app.prog_bar.Message = sprintf('Running net-level statistics (%d/%d permutations)', mod(app.cur_iter, app.net_input_struct.perm_count), app.net_input_struct.perm_count); - end + + app.prog_bar.Message = sprintf('Running permuted statistics (%d/%d permutations)', mod(app.cur_iter, app.net_input_struct.perm_count), app.net_input_struct.perm_count); app.prog_bar.Value = mod(app.cur_iter, app.net_input_struct.perm_count) ./ app.net_input_struct.perm_count; if app.prog_bar.CancelRequested @@ -168,7 +167,7 @@ function updateProgPermStats(app, ~) end end - function genadjustableNetParams(app) + function genTweakableNetParams(app) import nla.* % required due to matlab package system quirks % disgusting special case @@ -176,46 +175,46 @@ function genadjustableNetParams(app) app.net_input_struct.prob_max = app.net_input_struct.prob_max_original; end - results = app.results.network_test_results; + results = app.results.net_results; % required inputs to run these tests inputs = {}; for i = 1:numel(results) - inputs = cat(2, inputs, results{i}.editableOptions()); + inputs = cat(2, inputs, results{i}.tweakableInputs()); end - app.net_adjustable_fields = inputField.reduce(inputs); + app.net_tweakable_fields = inputField.reduce(inputs); % display input fields x = inputField.LABEL_GAP * 2; - y = app.AdjustableNetParamsPanel.InnerPosition(4); - for i = 1:numel(app.net_adjustable_fields) + y = app.TweakNetParamsPanel.InnerPosition(4); + for i = 1:numel(app.net_tweakable_fields) y = y - inputField.LABEL_GAP; - [w, h] = app.net_adjustable_fields{i}.draw(x, y, app.AdjustableNetParamsPanel, app.UIFigure); - app.net_adjustable_fields{i}.read(app.net_input_struct); + [w, h] = app.net_tweakable_fields{i}.draw(x, y, app.TweakNetParamsPanel, app.UIFigure); + app.net_tweakable_fields{i}.read(app.net_input_struct); y = y - h; end end - function readNetParamAdjustments(app) + function readNetParamTweaks(app) import nla.* % required due to matlab package system quirks - [error_str, satisfied] = validateInputStruct(app.net_adjustable_fields, 'Must satisfy fields:', true); + [error_str, satisfied] = validateInputStruct(app.net_tweakable_fields, 'Must satisfy fields:', true); if satisfied error_str = ""; errors_found = false; - % store adjustable fields - for i = 1:numel(app.net_adjustable_fields) - [app.net_input_struct, error] = app.net_adjustable_fields{i}.store(app.net_input_struct); + % store tweakable fields + for i = 1:numel(app.net_tweakable_fields) + [app.net_input_struct, error] = app.net_tweakable_fields{i}.store(app.net_input_struct); if ~islogical(error) - error_str = [error_str sprintf('\n - %s: %s', app.net_adjustable_fields{i}.disp_name, error)]; + error_str = [error_str sprintf('\n - %s: %s', app.net_tweakable_fields{i}.disp_name, error)]; errors_found = true; end end if errors_found - uialert(app.UIFigure, error_str, 'Error with adjustable field (using previous settings)'); + uialert(app.UIFigure, error_str, 'Error with tweakable field (using previous settings)'); else % disgusting special case if isfield(app.net_input_struct, 'prob_max') && isfield(app.net_input_struct, 'behavior_count') @@ -226,7 +225,7 @@ function readNetParamAdjustments(app) else % TODO ideally buttons would just stay greyed out until % all inputs were satisfied - uialert(app.UIFigure, error_str, 'adjustable field not satisfied (using previous settings)'); + uialert(app.UIFigure, error_str, 'Tweakable field not satisfied (using previous settings)'); end end @@ -282,18 +281,18 @@ function initFromResult(app, result, file_name) app.RunButton.Enable = false; app.RunButton.Visible = false; - enableNetButtons(app, ~islogical(result.network_test_results)); + enableNetButtons(app, ~islogical(result.net_results)); drawnow(); - if ~islogical(result.network_test_results) + if ~islogical(result.net_results) app.setNesting(true); else app.results = false; end - if ~islogical(result.network_test_results) - app.genadjustableNetParams(); + if ~islogical(result.net_results) + app.genTweakableNetParams(); end end @@ -310,13 +309,13 @@ function enableNetButtons(app, val) end if net_inputs_enabled - app.AdjustableNetParamsPanel.Enable = 'on'; + app.TweakNetParamsPanel.Enable = 'on'; else - app.AdjustableNetParamsPanel.Enable = 'off'; + app.TweakNetParamsPanel.Enable = 'off'; end % dropdowns that need net-level data to be used - net_dropdowns = {app.FDRCorrection, app.EdgeLevelTypeDropDown, app.NetlevelplottingDropDown}; + net_dropdowns = {app.FDRCorrection, app.EdgeLevelTypeDropDown, app.NetlevelpvalueplottingDropDown}; for i = 1:numel(net_dropdowns) net_dropdowns{i}.Enable = val; net_dropdowns{i}.ValueChangedFcn(app, true); @@ -326,7 +325,7 @@ function enableNetButtons(app, val) function displayManyPlots(app, extra_flags, plot_type) import nla.* % required due to matlab package system quirks - app.readNetParamAdjustments(); + app.readNetParamTweaks(); prog = uiprogressdlg(app.UIFigure, 'Title', sprintf('Generating %s', plot_type), 'Message', sprintf('Generating %s', plot_type)); prog.Value = 0.02; @@ -338,7 +337,7 @@ function displayManyPlots(app, extra_flags, plot_type) result = selected_nodes(i).NodeData{1}; node_flags = selected_nodes(i).NodeData{2}; - prog.Message = sprintf('Generating %s %s', result.test_display_name, plot_type); + prog.Message = sprintf('Generating %s %s', result.name, plot_type); result.output(app.input_struct, app.net_input_struct, app.input_struct.net_atlas, app.edge_result, helpers.mergeStruct(node_flags, extra_flags)); @@ -375,7 +374,7 @@ function startupFcn(app, test_pool, input_struct, net_input_struct) % Button pushed function: RunButton function RunButtonPushed(app, event) import nla.* % required due to matlab package system quirks - prog = uiprogressdlg(app.UIFigure, 'Title', 'Running statistics', 'Message', 'Running net-level statistics', 'Cancelable', 'on'); + prog = uiprogressdlg(app.UIFigure, 'Title', 'Running statistics', 'Message', 'Running permuted statistics', 'Cancelable', 'on'); prog.Value = 0.02; drawnow; @@ -387,7 +386,7 @@ function RunButtonPushed(app, event) gcp; - prog.Message = sprintf('Running net-level statistics (0/%d permutations)', app.net_input_struct.perm_count); + prog.Message = sprintf('Running permuted statistics (0/%d permutations)', app.net_input_struct.perm_count); prog.Value = 0; % Set handle reference @@ -422,7 +421,7 @@ function RunButtonPushed(app, event) drawnow(); app.setNesting(true); - app.genadjustableNetParams(); + app.genTweakableNetParams(); close(prog); end @@ -431,7 +430,7 @@ function RunButtonPushed(app, event) function SaveButtonPushed(app, event) import nla.* % required due to matlab package system quirks - app.readNetParamAdjustments(); + app.readNetParamTweaks(); if islogical(app.results) % save just edge-level results @@ -439,9 +438,9 @@ function SaveButtonPushed(app, event) else result = app.results; - result.test_options = app.input_struct; - result.network_test_options = app.net_input_struct; - result.edge_test_results = app.edge_result; + result.input_struct = app.input_struct; + result.net_input_struct = app.net_input_struct; + result.edge_result = app.edge_result; end [file, path] = uiputfile({'*.mat', 'Result (*.mat)'}, 'Save Result File', 'result.mat'); @@ -487,21 +486,19 @@ function DisplaySelectedButtonPushed(app, event) displayManyPlots(app, struct('plot_type', PlotType.FIGURE), 'figures'); end - % Value changed function: NetlevelplottingDropDown + % Value changed function: NetlevelpvalueplottingDropDown function PValModeDropDownValueChanged(app, event) import nla.* % required due to matlab package system quirks - value = app.NetlevelplottingDropDown.Value; + value = app.NetlevelpvalueplottingDropDown.Value; if strcmp(value, 'linear') % Plot p-values on linear scale app.net_input_struct.prob_plot_method = gfx.ProbPlotMethod.DEFAULT; - elseif strcmp(value, 'p-value log') + elseif strcmp(value, 'log') % Plot p-values on logarithmic scale app.net_input_struct.prob_plot_method = gfx.ProbPlotMethod.LOG; - elseif strcmp(value, 'p-value -log') + else % Plot p-values on negative logarithmic scale app.net_input_struct.prob_plot_method = gfx.ProbPlotMethod.NEG_LOG_10; - else - app.net_input_struct.prob_plot_method = gfx.ProbPlotMethod.STATISTIC; end end @@ -509,7 +506,7 @@ function PValModeDropDownValueChanged(app, event) function DisplayConvergenceButtonPushed(app, event) import nla.* % required due to matlab package system quirks - app.readNetParamAdjustments(); + app.readNetParamTweaks(); prog = uiprogressdlg(app.UIFigure, 'Title', sprintf('Generating convergence map'), 'Message', 'Generating net-level convergence map'); prog.Value = 0.02; @@ -551,7 +548,6 @@ function DisplayConvergenceButtonPushed(app, event) close(prog); app.moveCurrFigToParentLocation(); - %These mlapp files are really just the worst end % Button pushed function: DisplayChordNet @@ -685,18 +681,18 @@ function createComponents(app) app.DisplaySelectedButton.Position = [434 62 81 22]; app.DisplaySelectedButton.Text = 'View figures'; - % Create NetlevelplottingDropDownLabel - app.NetlevelplottingDropDownLabel = uilabel(app.UIFigure); - app.NetlevelplottingDropDownLabel.HorizontalAlignment = 'right'; - app.NetlevelplottingDropDownLabel.Position = [434 114 98 22]; - app.NetlevelplottingDropDownLabel.Text = 'Net-level plotting:'; + % Create NetlevelpvalueplottingDropDownLabel + app.NetlevelpvalueplottingDropDownLabel = uilabel(app.UIFigure); + app.NetlevelpvalueplottingDropDownLabel.HorizontalAlignment = 'right'; + app.NetlevelpvalueplottingDropDownLabel.Position = [434 114 141 22]; + app.NetlevelpvalueplottingDropDownLabel.Text = 'Net-level p-value plotting:'; - % Create NetlevelplottingDropDown - app.NetlevelplottingDropDown = uidropdown(app.UIFigure); - app.NetlevelplottingDropDown.Items = {'p-value linear', 'p-value log', 'p-value -log10', 'stat ranked'}; - app.NetlevelplottingDropDown.ValueChangedFcn = createCallbackFcn(app, @PValModeDropDownValueChanged, true); - app.NetlevelplottingDropDown.Position = [533 114 118 22]; - app.NetlevelplottingDropDown.Value = 'p-value linear'; + % Create NetlevelpvalueplottingDropDown + app.NetlevelpvalueplottingDropDown = uidropdown(app.UIFigure); + app.NetlevelpvalueplottingDropDown.Items = {'linear', 'log', '-log10'}; + app.NetlevelpvalueplottingDropDown.ValueChangedFcn = createCallbackFcn(app, @PValModeDropDownValueChanged, true); + app.NetlevelpvalueplottingDropDown.Position = [581 114 70 22]; + app.NetlevelpvalueplottingDropDown.Value = 'linear'; % Create DisplayConvergenceButton app.DisplayConvergenceButton = uibutton(app.UIFigure, 'push'); @@ -748,10 +744,10 @@ function createComponents(app) app.EdgeLevelTypeDropDown.Position = [581 89 69 22]; app.EdgeLevelTypeDropDown.Value = 'prob'; - % Create AdjustableNetParamsPanel - app.AdjustableNetParamsPanel = uipanel(app.UIFigure); - app.AdjustableNetParamsPanel.Title = 'Adjustable network-level parameters'; - app.AdjustableNetParamsPanel.Position = [434 170 416 427]; + % Create TweakNetParamsPanel + app.TweakNetParamsPanel = uipanel(app.UIFigure); + app.TweakNetParamsPanel.Title = 'Tweak net-level parameters'; + app.TweakNetParamsPanel.Position = [434 170 416 427]; % Create MultiplecomparisonscorrectionLabel app.MultiplecomparisonscorrectionLabel = uilabel(app.UIFigure); diff --git a/NLA_GUI.mlapp b/NLA_GUI.mlapp index 63f55bfec3dece96d025b2551feb7e699dae90a9..75c73a5fe4644647ef5a46fdac0eba7989e1f625 100755 GIT binary patch delta 72659 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

}H4miW#`6W=shh_9?DOaKDa=D_?#_qMpVtV~ zyVCn!u7}Q550w{;cnJpK?9IE`jNV1s}bg{PO;KZz{bS zy$>iQ-dzAaBMt7HNfG2*_AM%6-Nre@E?-S6Q=L4Iew^FtT`R zEpQVE(c$wSI|qQ>Kr2NUJslK2w{HI$N!v^#rRJh|n5xgF`(W><$(t6;fN%6iRTe1! zGs0VFEohU=tzm2{AXvXS>JfqS}}Tm zk)I~}a3ls@;@kG$Lcjm)9z5AOX-n^DDgA3=`rHu$FYHsBl~`MO^Ht3J>n$6Nj8e9j zLvBUGv}$Zd_TKaFQMYPSo{NG)<9CskEhmE^mKZ1}w=aKz(tF$@f(f)GEgPjbCPdyl zCY}wcyMIdxa*6V07cB{YA}X$PUPc;u?9pS4f3n%*x!Tvi$+mhUNpd4vqzK3Veembx zcNf|=i`OQ`c&^Q!`qjSPWz#VY3;9uCB$62g5IMkcL+Qq;Y@+YD^+8w6V?obja%j?L z;F?#?+^9Ds91(@jSWIxLt?%^bn#k*(Oct?C7=Nq@GVY4Y+JI->nnmt5PD0_=$AqO2 z{vqWVjjlF8)}kCvQ0nKDwbNdrIGD0vKO?$mNs--k#*%w@DL7h74k~j8eKRK`3)GN5 ze{27`@|6Cu&%LCX)?&oNvyV0tpown_n&SYa>UJU@&MxFw1;&w^?gJ2H@J0PD07739 ztbc+;Rs^2`+6$09?r#f_bX^StNL}JXfZQ{Zcoji~exv@j5@_!FX9j?M%ojh^;OL~= z-rc!Xf=HvwIZz|Non3Y&Z|HMl6R#%hCRbTa7!v!^Y1$+7_V`6Gg)dD`Ii??2*8L>A ziD#i%smF4;rPD4`@y3`BcH%nf_STSt@E^~!-7e~63OUp2Yb(eYO|@ZOPQ zbb=B@jO$iNaiy&4=RF+Lz+;Ub&Rsj$aDUmS`E|EyswZPiKz17PqvRhRp`Ka*6FnH$ zgssq=?_LNWp>Ft8(qKX`uh&57AWet{6~YgTO@lxTy;tad*W2n`s4~>soC8HJIDa0& zTB9&bXHcCpmU>t4b7@y8Uq)!o!FMxvjD4iI&uGyc8yuUj`d-E$ql6}Vr3AA3P-st; z!lK^sD3EekbhINu^z=|jHH$SzqxCi`z`%2IedtX?ZqRj0nMu1*&M%g;kj+M`8IoDE zoo=)6cF5VG{}#!+9i%vtX5IW5@_&3tdMG#BP&SG%-xM@7 z@2vS&BP1yST9}jg?MWr^KN}8b#v5)6{N#Rj%KihbNv~ctlq5X!yPDLPQrFTMFPu8>1EAt(ACPhXp}a*9K;V`hfWZ)sw=-N^eb{Q8)k0dsHYt-b zdk3dul#N|8{GX!xSy54S$y@65f1`?!Fp>Wr{@i@D7y-b8-tO}fP2slB^w!F+is zvfLQlXMx8=j3nAA8ibu7#i@q@a=UVZ>cyZcIwXQFx3WB}xXtpOQ^rU1 zGy)?B;9W%sFv{7r#oQf<`Pg-`2Ubj*st^BWBwkt=pVUaLOc*5C=rKPkVUj$Yno|t-%Un3^xb>%T23Im$Sfq|KDxa(}c0So$i-e}_XPSQ83h4cI zHPig=lDjDo7dqw9o88swv{n{&C;&kHe}-7dD1glKrFsZc*{e(qvYeC{IZqwjwR?`K zh+zl(fll-96{oJ92J+VL$nYD($QT2!2WGc9_B!58gTgI&Poz+S2#7aAp18 zMSsw1;-Bo^lOH+``CG!}#d4H%;z zR2v97YB@rD%Euj4+KKgK2zJ4}T;CDsFHFYTzpi@YUhVAl;;T>HtBrJ>rGaZnFu$z8 zV8RKI4dmI|z2JU*H!)?2LotH;b93f+d6AMe*p<*wxQ==0dlGfmi=xoc@C~2A$A8w0 z>vcSj*K)GilVzjq?9Nwzny*QcIm{a2N5R-PI_8VN%3izf0T1v-j`s&+UtgvL=w_=x zS-VTw&+f{Pm)?4&82j>l0-YKb;iL8_HUwqiVbxiM@VYM z&o_O4;V!0@vKOdVJ{#X*Mw4TjDOcZ`ofwo6C8s}_eATudlkbl)o*y-;bk0w!gLXm? zeH&#VB^|+eUCt{Rl0S|vdX+i~ATk>c8=apQ*q@O@0CGT$zZI@X@55^(GgTsT?T~+Q zOY{WEVfy%FQI5=M??evue`;;YYksWDaGo!+PkHBn;LZ$;a<1=H>)Pv`Y&7?FA{%r2 zo%4=@lVJH6zfJObu5>o?vh=hq^i~4(MjMeVt5&*p=k)XCv0|pY#k{_S*Qzk|jRZSH zwUUJ^Gu5e{cym2@?RgN7QO5H-$3=gGJ?1ItJm^+xJcl zO2ZC)WRcy2w%ij*xZF-c(NLnX4n4)I(QO;K@iZ;-S>l+{2G@T9w(A8Q%gOd0 zRQ^rH`lrzP_1EkF#pDn1*t^H=8|J&jEf0w|X=1$4@;ZOBDR{E?ei5w$>6W4{TBpBUFPLq5yxtE|^Nn`~Ph5`TLq@FM@N z&F9vc zeW$*?D@k}QwStqRw{PU=*QDj z@N6NTtsy+Mw&flYyU}uiB=vNPbBjjC_qvGIu_#|h)9X@Tgq>SnE9+H#Wl67AkM~b? zJ}x7k%R}O2B$a-+EEo45upZdN!#xoUoV|}d9vHnw& zKgDD3dv1@Yj}^FMeLSd-UrfATeXNT65{esatU&Ht`^10I^3laF3h8+yIb&iTX)E|v z5g*toy4Zm*QZ?~{k%_N@_$pGq(xw;CpFB6ToOOqtp$^*^(02WdToiTB69wNj#CJ{3 zC+fGQm77ezRmwLK0hgmL-X+gMBvN^*=DK*S<36m8Q~f>sIpPOHUNL2-kfQg=qG-!D(7FMY+jO~eCsioSo`@2`H?rK`^>YH`8Ha^G7=ymcvW zNvzcT{%~kD&wOuKLi{B;|G>TBYE`e^)GO5$y;^x}ejlRE#iJi_+c5Leulsz=vj4N%;QoWX zMZ$l!XLn!M`&R$}0RR8&S=~i}hL8$_A_@{ht0n@a3?|V<8`_T$ zDj_vATVh8g+1OpRC)gwG5xCstUS#jUBg{@5=9)BVn+#Q~mLlhnobNlwIX?bWG5~-q zxiY{TW6T~Q*C?Cmm>`z~{BgC>HeY^|-MN4DQl2E!I>YOP>t8-@_8NCOrvIGluSEDq z=LNiczB}Fwc3s?E4)=k8n-Suo_G9n%cZz$av6_r>*31>o~>jgbg=J5FBx`X%vQX#Rgw z3F1NKL-FP~yb%Gjc15pI8)s&SLQAO9rkf1Fzn9xo`KDIp$eZ^Lu_3?1ku zRGQd=OrQ&i?T3LTNDlr}%4NNbIHqOSj!W{1LQ|`t|FlA6w3e zp=-(e_jVp#ZQNy@oP^HQL9)8_BN!ar8dZ0ETsdZ+I)+ixFp8%uk7VzL>B`n2v*YU3 zaNI%Gt2<;}C9f z>U^CQ;+PGNgXvVib9b*Bd(@{w3;U<~v{+oH`n0$_)Tcvz`akPaazrMoPfaj5`cwwt z-|rr1|9;d)7?Is(IyU=K@%~>iD|<83lfT|GJEl&Jz#SBwdSBq7b`_%nzraJCdiQl| zc66|QSA8VpO>I(_3M+q0?pM`#=VmV5c|VPVoBL^~SHt7T3vuLw<6wG~>*R!`8~hmo ze{w4v)Ib!U<)4dD-~fpy zGch4ulx%Q!iI9zExZ=i`5QMTF+$P<&c3T3R)Tr^O-^70-H$8gv3-}34j32;* zGo2|6LwCEhB_P>JW?$d7Z{B;qd7b%9k=<||q)J6V+Ys&>xDVi-#=VdI-_P_E?zfmE zZG`EHWn~q0z4Ultae01eaa~cf6|<>1nrXnhaP{^S%){APn9Hpd5ByX@{6N7E4EFO( z(Ora{IJS$5WZZvp$hf1zxI|w-P3@&o)f%W`n-;Pi4K@8Zr`n9?H-5ahb~7RI4+wTd zx7<5qJ^Jh++*Q8-bw?Gp3ck4eY{;xo{ z{?D@hZE%Qx68p&|CS&H^qLt&~*`j3 z`peF{j=6%%We=6=ny%W2oJ=HhYl|Fyh@a;ne#U19jT{&-syCGb^%>)k{WND*^u!v zp!K@rw@&kka()ZjANYN71Zz6la-!B(4KMr1j$WU<{YD$y#JY&G58_%phIi0=z}u1c zfXsjQ{`L32p6vgg6J;mw#h{Qk(aT8RMvhifxP0RB%P9C8rrl8V=<~V=p*ul=}D*YTwJ@p<8g-_99740>-4_7iTLsPp*ag#6G7iB}f<5WNLI-1Ks2Nf0NY zWa0f%nkXj6OSAkwe81+AL}7Q9I^(62g1>*sV1GQHn=TY!9!}?BZi*7R1izD4(T>BC zk-Fc>6Sj}S6Z!LoxISJM?8$Q(dg-l?{`&b8_f_0q;7;~P!q>(E@VQXm%m03sJ!yUT zzrR46YlQHrC%48RRa5DUNK_d8f>t7hRQ~dWpxBlDV{|^8F|NpZh zOnv0R=(Q6~$7M(qkxpT~EUx6o&sw!+lFXHZw`v#b|aljfpiH?+88H z$jV0mSNHFw?b>Z-iFX{{mxmY5$(KK(2@YT^SF%7!6r%tnQ#F^{0=-wOaDf8rsH|zD zBoycf76r>PXPPi&;MFJ%#&NKL2T4nqF3`?7O)$1>2ZGwjJERvk$_VOwX|`B@Q?{pD zz-b)cVF8ZT)KT04Lp>4E30boVslQFr18Rn$0RhrkoJ0vedj)q#4L47W;)UCR5%#9J zS0?9=<&&#z+o;WYpUd zWi18?`drioo-0Bc0)j4JI2q3&%ttm>l}NQwBC;}2 zbKIe=$;wN)#0;=*0!foX*esgV%$Qev9;&F%k6xXgPhKBgvLD#Eig{I1*0TD%5rT)8 zLFD25>hEqfo6mM>V?Tc@_JpLWF3anCh#pJ}fl{Oo1GXAaln+{CpN_f%ac({JCt$OY z&DT=0BSCl!zf@a2EK7+k_Ujx>sqNw>JiGe!RKo?raM0G_(`B*K z!HSex>aN5sIG0=5x124LSVII6T)?V2EJckORZe7kR1CCFRK9N@?6negfyFKgg|@YCp7O>_XM8dP9dy2ff9PoN^iBK$D*+KD0t0&2zHTU$JytvJ zufrf&Dq{wZTFvE@{XsIqngX$Mtru4`v4u{(GL*FaA?a2C^yVe53z})Um*^&Ve+dXP ziW+*M$)blqZU&JHl_8IlP;|F(P!I0a1;|Z7goIXCYq% zpLivjQA=(27zveG5J^?lmS(YPpmDUMc#Tye)~T>>eOl1%z?qV?EIW44pN>QtHut+x zIs9TXW$dGFc#KUu#cJ*AxE+SP&MNO(=rnGnLFD9e*GdtOpNx{$f9 zjC8xJ6roWyucw~R2MjksAgXsCFvLu}8ISRP|8wsLYhlN|0qea_Yuozr&Q|YtxTmnQ z%d}gj+Vr-bvrV}v2}!%$PDETRNLR5je2k^Bc5Htkuh=vU7G?=yO@;e_MG*D9;bj=i zB*pjxh8?;7tiyg}Pc9JRu+9TpE-YlMOKbS>(OW=g&#+a#zmv6=J3Kh5ExDoT@)!)G zC+wKh1#|czw{~iS#ZMfrYWMJymKRPWI}e!;#PqM__7&c_F;^COk=-u?Tj>Q5k2Xn( z4J&^$8!9@A-FF(3(j)18*Q`Qt{2=0e6d(Zz`KB{x{9%1a{H(D<{a`JWyo-vVIr7;z zC_8!-ockNEHf`?vZNv6`kcsbC#7+;BI-gDeegmi%`7ZimmaE8}7K9&RKpK z1l^Bz!lW{0x%}Y@Pxm?viNE21`D=TbOSLCjh87~en)#F_Ty;(W=&lAMmf=__uRn0?D$QstNdIJ zj&=b*S|=AV_6$k3f!@O#Mp{~2V20Fi@-dPxkXgrp zpDe)axUw+hb8qwjvt{quJ`qiopxy`fKXY$3M`Awj><@5iz$8<^J8;$`y5v3469U#43YFoS>fP7t=%Gv2&0i6=cuR_iZ2VkSc%{N1loK}aA4 zv0eqC%R?+AMP(6S{0J4x8W#+Z7Kx1sBc!!eoQCFO)1ZjlD#KMe`i4VO)olGzFIY_r zzK%4kIjmK7ip`T(&*hBMwS>KFr1$sO{*dkNv+;EQCdF-q4yh}uJez4ZzkkHWe{M9X4G6e z*9CK#;ZGq#fhc9X$HomYN*8~u=^Xi-g)HR?sorze>m%r2C9GVW$e{Sy2ugO%C7vjdDD@38Sx_)>P6C|FDj6%%m> z8L61u$`%Jh^)Xr{t=OQ}k$y~f4X0!(;OUi$9n->{cHk>ngVn+0G*y328EuZ?)eR_$^(R{dr8YDdbE9c~ybU6{~??K0?Z=MaD{n6VC$Srj;1fQ>Ff@M}!MYBl0aJxtY@b0`O8SHb6q$?A%FK;kA$_}mAsra6pPG!< zpQ!+|MmjUD&Q>Cg)7rHgs`^G&hN^gZ0-4B+8xolubd5Yl+cq;!v;ucoW%hP=VTSF& zBpVV+Q@~_80(XphQGV@14OQix5LFFH`9jcK23ku;DuB7GOYeWSwXaSousyqbkmngQ zb)p`DN(XCiv_K}vQ~y~GS0;kaL+QGQPR6;l=%p$Dt@ZoCo~4s6t4yFm1_ChOwKoWk z?5s$jpRCzk)tP{%KYK=-Msa8NzU-;BtMY68g=@ON1Ec05Yslc;}5`z78 zkZh$lk*n=OppSoEP)522S`pi5ALNFKCMmd&ma8Cg>Xrk?uK_ zq*lO0NW}o2N>x3@bmhrf@MY1CA&~{qLXby_wz({>Nxp5HYFQ7axAZ*5aZ`xabK~ai zy(Xtl_FLxi?vGNh8R3cBxnL9du?{y?)HpW${`kWF3dA;sp+c$_n*zCrWG0#a-v# z!jttY*F*M3OgoIffPIf|^EeA_X`}G{2ryqGr&ThMf} zw4KWHj8lKnOhIKb?t>qb@pc!bs@E%~C$BYCx|%~?gU42;>2|j~#r~Ccxvg|(yCy=S zM&Jlv8JQlLmz(Y`IIE^2f%Mgp-xXs46O)#X0b%+5yd(f_0$lobOT(0Et1rM$r_zG= zeC9>SO5`o}EZ-@EgFJymWF~lZnI=q|Lj$E!ZLEK-b$F`YLm>N0Uoemlz1meGt|~7e z0R1iANTA{MrcBu3Oz!7WHC2w!?Xbe`vUn>Z&SX@3al$R1Vuc|xsUq`=@Z=Ltvid|m zDnutMpAnlErC?R9El{;^SRW4lhwsgee2r=>|Ay+7s`9UT3+s0AhS!(>0Z>Z=1QY-O z00$k`j{A4FZZtmw=!& zh;&M~3J6F`OG!6MH%N;}Np}cHcS+uNnI}T1xG1QKZj;QEp5wCOi)1&R$VEljHS5N-7F2U{3PDW}fwUe}!Rbfz&oVvkll3kpV3)AvliyCv)g@gv9rIwu0h4iJJj6#NKEXl937ihB|9D6 zVoB@Gf4*)yWNIkjv7}`Gvc3C#_oJ=CTe-QpbH9FtQi_J)7!*Bw_3BkJjrc!rK5E+= z!jA|KPw6wMQ~lIuVm_3A6BU(zcqRLv*Jm_&vmFeuu&~0z!zo4FAD|`*I;>1o**zk- z_0K!pJ6%cfPiRq4{Az3O%gT0!goJRsXd@GLwg0!_6X)dQEMJ63rKeba{J&E}Jh1k! zu^?ST66W~Vd3lxsuKe@(^Fu|9e;ztxx*GiR@T++*{)>NxWB+!4`q#U*Jg5eT zhj)ekmC&R5um5$D|KBg3cS4$uY-?+aVbfJpRV^(q-w`6*>Pl5&Ktn_O`0=AEQ`B@3 zWSZy6lP9NGSKRv+yAwM%agdH2A1GRU)Y{N-JP9j z{mZ?#uOVRwh>D7O`XM=gXB8C{ZAQ`1(1_~NBDwp0qUYtd;rlT-7}Y#$!%s#S*t+Te zl}|xMg^Pv7a-z}}@ma*gNE!u;Qo@syt@ZUAjY=GdyqbJPW6hbj_uI#KqzMF@4z^bmT)h-)ZK%do10E9)@G?UMPcE_jT=yC z5)u-;yu7BSrl?eGY@c&;nN(C%;6aIT548^yGxOcMcQ+?%{BT?k*5azF1jLrc%FHt} zGck~x8yjZ_^VCsOn*FfZw5tbx{(RLQLN0!ik&yud@;W_#vaNXHP*+n>U@0euAwo(@ zYHn=ohg0pcn^{#=1)UHduUSDe4*jsTwIwAhYiDb_T<&RWyS=yEkBN!7zqfa=KHjd~ zP*>;C@!{_A@o{x^bs!NN#px!G`EcRcuTatRqhFy=J>wPD5P8?OpxeSvJ$Dy_-@a|S zvpGWag@P1+X$$i;0;gVo#*XNiD1O-q>G|H-S=H%vx-H4aR}mBxwqM{^fMtZtjEc=ziNM&W^{QP{#%++hxnwy)sxVR=KCOnUq>3zaJ zebO^9nA7z-+h6_MFxRH3p>bbWn9pj$#K>sKQdN6@b7O7}kCHO9r>(WMD?woQ?BvkX z)3ZI4vgg~kFXiRuJznSiW#k+jMeE}giV6H2f`ZlK$0;c(<>lqipFhW@xc{xY+o)tz z{0wTM*6ZSYxj$=kbd;N9eYC{b+odNeDhdUgBIy15kM~_Tqhtnqd;Q@tkGYzpB#M}S zt3g+P9GB$7hmF0xTk!p;R6IOo#l@T(gk$65b#--;p%ewVxhu=d0dDVvoHkU|)Y>Mc zo<4o*(_5%rb9#2ReYeF{LIT;lkyzLjYL$0G!1(3M<<(U;7nfNPOD(O0!otFL@7f?+ z+g>*d3JNGFD43X-2nh+Tr)qEiDDmnk)NSa0Ml><&0|Y>P9rkOUWng6db9`(yTI|bk z4^VRfpT6}zb9v&W_ zu$r2a2zo^l5)vue4@pTB8}xctu3UkXt(uBvSZ#{DXbWm-5r3`B+h2KVU|`_pc2aIR zE+;2Y5fWNWRN^{?`ug|) z3??KbY)sauKY22{uy6|(7vMUA>~bd@jHRnx(b16(T17^46`Wp`jsYpwd!qNy+wq!_DcE zXZiGsNwINpkZx&N*uDiA?$hTyf#t<4KX-42)U{ZiHnQN&NgvyaA4~hu{^uQtR|Oq-{sHF0;CCA4aLbr zMWsJc$m!j?ce#0aD9FgXe0Casoi=rVuul#*p|hYy@B+BK&QEnV&X@XV6crVH!h(Y_DQ2j{r7U>IySgx`B4cAs z3=C4!(!6mriVdX!cLH0hy)NnjEkAwwW1%(iq4A3bFHCRr@KPDzlAunWDk}x`84pvqL9UUDlEiE-Q-n(~i44YaZ zj_9bU$Ee{_v~wE5!gb_Ajz3~Kn#aa8o3u^(?_$(J z5RHzE`1tu9Zr^sxr6fRq9IDTrEzQsS#8lf(_qDcWq@?Kgr9RG5Om6djd=09&Ultk5 z*4Ebj&Ye47g^P*s@QNK))qHxb8_vq11_18YCToWK`|Y|D1W>TZvI`2LK7456kqjd4 z>zqtWO9RH3=<91VVfE6%!K!n0tWA$ixJ~NT=HVCY7qT_WJ7T_`m=y z1H(5%PTOix5Hd89A;hGlG(JJW!Ekm9OUq!KkKCrpuC9U<4u1eMfBg6X4JbG%_4qNU zE#u{%8PLuUZDr+u4-#p8CfxTGKW9PQjDEz1M@B+={rybfOZtEQL_IpeSsTd`(nUZpH8eEdi%N)#2T_W8e$@q` zfhMk!NG521Zvv4KPXwl%GIpIAp{AihAq1)F{>E`*;<>7-PpBd^+~SYhppD(!+<>8& zqL`?t^k2T@@jN|(UZ2S@5LX0v?fU*5jVe7mn-~voZh2WizsU!tt+0Dmc>|h~hiAW( zE_ZbjR}4@T6w}Vm4u8(4goKINX20J($<}&$IK;$%BPtYP$lf5-QVI$tEzba;EXT{` z)zybvS_~I|#33Uii+cdIuB};UYimO{fK+%KNQk*O32;%US<&6xOvB520FvRePTea9 z2cRIlTesF1nBW@)6BV-hA#otdd99~@%-Yb>(n8WlEXw2JMu9q^FyrJFfdjYif~#QD zseOQdT2@-x(%MSpv$C?1t(yDsBS~N@+RdB#C8LQu4;11!7q)-3f7We~Km|K+Pq&_o z%FxWrb>Vvys2=#l($Z4neIbaV)mc&^zu7=GG@56Kk_din>-Pi!I}w#LMHuv0si_K7 zJDbY7-}`KUMSrPH2c24H+w)TwC#S<6atvaB;@_tI${!+xZhib1ud66EBYPhbV{v)- zheAMFh&y9BUQ{}{w-xHt$&le+qXQsp;W&1Zpger)d3hWWX9Ye$4eyw*aoTh=OXeS6 zhb)9r2+y6HSR;;UOZ4j`!O;;B{VE=h9zEKy%~ja5eLxqwj)tuP!agC5u4jv^6wbq5gq`9UUD(*8TFF@6S@~`N)%3RrOp>?jAQc0adB<_M9I! zC1^xAdXj`|RLtZ-PN!mY2^In4yng+E8gLKtDJ(3k<$Sm?31Sf)4UHA77A@`kVplx0 zAfNTrM74vtn_Eq8u9=AmL!!cFdE?u+Z-GKU@93zi?j25hCG*>+78I<1k77aMA(&^Ra#1Fq|_8YWcFJ)jlJO6)@(DpZfR)=dO@Ev4i^^}#sy8UQ}ya@oLrKS z6DtQk4K=j^On{u69PsSE?VQht56W5NeI}(vFWRYnu*mprRt6XWY|{D^K*gC2FwFV> zh~vttub=Acu(;vyprO-!6&-h_b*o0|$O?=sl`WLUgWx`{fgh2 zm`>lL{PoFLXBz>xZr$puoT2Ra5D@_dVe@kYAc4kbs@A1{V&cBbj-gL)>f^vzIl2{n zmB_-1Be8PB+qINlr$q$?!9unO9Rj+)w5$wQOhiOvdwZMT2+n?g-wEcNR$5vLI-#oS zwzcN+`g-uNCO{6+ty{BwEI?&m=YO)YP5^mc@h1Qf0NAjxu^BkZ(|cIsY>kZRdQuhN z0DV|+wm@{=2F`M3Jo=3B6bt9IwMv6AJ+z{uHocm*4 z3~t29>D0TsJbgO&{uZ;%L10QT=p_LG0eX6RDAn3o>6b4Tz=~~eFr!j2MZJGPcRtDj z%E72)b!Ek0glcLOnX1L8WII95N6EwE4BEl1`tz4BHtz0!r&D!qe3oO7U}6%I?{!>^ zDVvyADI&tco}F~Ekq#F;LWNnzq@2A$tj~~vv;=v48gdn??uCgFJ%A=JH}}l1@84y7 z!YV8IlT`dz+5MRz3lgBOuMZ-sTVbWWSuxb#e*&5VQb>%^wlbJkQ_yeet-XtS zt^QfDMcmJC;W9LmthZYv9w5210OW7!QepYoE%j1=A$wEN(`RL5lvzy*Ca~0v=a)l} z0oXkn(8IMrvKNi}l-BV%10z7dyW;r{&qA(!N=<$HBGBLe>s{f;fv)oWwMJbe35^h< zuSDi1t_E#wZ7?{<5=eAs9wG&y_=JQY96`sm*iWDCtmxxMu{p{{Q@L=VQi+O+K6=y) zU1Z09pCBDU2kv@y`U2SgXTMBUUz#K~DKEz7O+nka>v3`tsDnd80LQX2GDCxd(ELu? zx8$W16_fd_behfs^N4;c2l_Mq1Dvm85{nVU}VDeXckR{r27F4JBS{RJD$Wp0RR(Rrw836 z2#Ow;MgqtfAhW%-)wk6ElTze9KmW+|^mJ2`n6$LCs%oS-^}a3st-Y5P9Y3e}`U9bV z7V5zB1L=SnUg}E&g9U|-jf!gH;ILj^4>L`9H|=vbJS zxBIUp4wr+qI7ne~vTjz;E^5lppUN8qzsazSPY%|>vIzHse2kkO(2G z0yKV-CShys;y(W^JVQ1HS`=JXPaGFLs6vqM@HcJ8e$Qnv|53 z$jiwMebyDV9OH&36->8*xXH-LgM)$qpMU=Ri6hq3)CAD|R-Xf!{zG`Blge!k=Vt-p z)J4zk2?$hu`0zo|%3*&WLJKN?a?Xihrp9h#qN>X7H)1skIiz_uh?H+*s6Z275h@0} zS96W510FfK2Mi8Oa|2NK%0Ny^N=jj2AvD|W?;iSS*53;YmecjZ_wSQ=)k5~Aq@=)< zL19-_{YmyZ2NN0>6GKEolAE0!o0PDKsSDVDkRXbRJpuUiW22*gv&ia&S{;U* zLhG}$%gf7aYxkWtCg6mWP{wV+q}0^ZpvFLTYnEHw<}r(mi5Z4L26#x~i0SL=Ly~|H z(v))`RlvPyn3(bk3OYpwk0m79AeMoFfdDn3IMg9eRaGfOJ>^oA0FkB|yh3rB!14`& z9|T-)9U9_gW!xqIcan=}~m*C~x1ssVj(tk&+UZIKrZ-sacCJ1#OaK6^YU&&`7}Mo{;dOE5BqsJ2Z1R^c zUm_z_&CHmJ;!$UT1puc&4jFR(8OTu)Z_5NRaEp*|W4z*X7BL<^{^Z2OmKL^?lT&RU zSAaN_`r^hreSCU_$gr?G5gqVBXUTl1!&z1}uYkZn=tOFtwe|JsS{D@+74Oa(dHx_A z5-uY-uq?K=+ejOKH;|BCqlmmvTm#W33dRK_5Aff4JEfO|4LxY4;R$3ZYm^w8qK0BL#K?KGRC4Qu*hu;uj0`%tV z>l?txBHpBr5Xah+b8`mNw6|~H-bhqMe)k_MvSDt>M)aJVoYy*ik2*>3*cQv=H zjE8|CyT9Roq$WhjK^7qk$I_v$pfO_5_V@QeNj*YEASSd47(Y;(S3;iJ3Fqv?N!FvEv4r*j_aU|wjsg;0|OKF9w+;&!*%y| zDcG5!WcD=N)RmNa$HtE5TG7qT&4q-75=b$C@FkLei!Lwo?1j__(Na<25)jO|IARu5O z3oL(soSab>tBIZ6E{qyiY`9Rne_()?cYTd5|s{Kt)em=Cdo~r7=d`Co%YVNyt z67U#!0C0B1;sE-6@bajut@ST3hkACfx0eVa22qctg-1k`1u0EQ;qW-NPhegE+y%J^ zJVQrEhk^VH3QU#hR?i(4CZ^)zViF<8{Er`h#{iApT-@^1KkJm44boRQTtRxxMtHgI zz7-5e`1$GmUqi>1m6w02q@>4AEFKUW8{5#(0PO0EPBi!HS4na4&hD;lri>O4 z2pc{9Z?N0(eAZT0R)yKwTRS`N{r$gx_4FizCNF;3i6dsnDFA`z=jZ3)iE7mI@%4qO zC3B(!Vt9a<%#ePu zUskrXTz~l`z~%F+SFdc$TIzN2NJx%B(w);4Z$=7juZ@-<*7(iL%!WTsO-;Ffy1F{Q z_yI#J)U4P5w*ajPHRNnBtD$iWCxpJe4=N;>ln+M?A`aAAP*5NVGz#X+-kw{G0sJbw zjlY#h%mg@~!fJ91^s#s2Qt6$r4nwq?H=`mW85kL7KfHT~EG^wJHl|_VgR@68uWU8d^$2N5m7q|xVL+Rc@TBzwA{-B0t$6FOn{I7t5AX)+IbAR z=g;vm69a=i$?{y$gCEopk3)aO5 z0e#L{E>MWL6O)lmoUrRTJ0C?dsvO5N1HRYe^x~6}K#_;l-`sj;WRwYkX-GrTL%oiS zyfIc5IQ_)EuPu~PaZP`JlBnV0{A6dL6U9pxg6gn31Y*CXt<4kWGnl6i@b~oT)6~>d z1qFrQJ<08HvI>cU3o|plmgp*(axSMw9Nn=W!o#;avVrAd!optTkO;g=2R8y7Sgry5 zV`8!d8WE%uZ>8jQ7}&CH13@pFD$`(F+aeTFW@aWH9v-_fhPw!V8CF(W8Vwg0e5fQ; zI{6Bc-q&)gNtv|1p+fDG#V%5yZ@@hHcwQ>RvfSUu3`DTc=@sn@?pi6)n@|M zIElwx&CaeQHg<%5xB%L9Co9?WcsVQi`t|Fzb#+w{zIx7|tVg~e=(E=DcSuswl+yjX zfE-s0*NA1HDqUQET)_BNI;vd!YcIeTBN!Zz6l4$r+6%OgQKfKO=qn#Krz6r=Np?Ek z$ZS=!VeyWCuEX};%>VCevflsC3;4*lg%D5mWE2%`FLcJh$)PLm*Yo&_Jpo!67)V#n zfxqA#^-BfxYD!99OZXA${@Rv~B9gg@iSyo4IKW6z5y$3#VVs4jsi}p9oQzCyc{w4} z>h>hix%*H0ww4*8TS!O`C>uAOCP+w0DTQ6R?H1**{Jaqt+3#cNK|r8cA=x0?z#6^@ zN9fI;Uj-4Dxb>D6e*e~d_H4$An9`P?40xcnw)Ty7w;`uA?avygP5%$qP_TZ)a=h?Q z{l!BUahrmFVk(E7iwob=2^neY#^t16r>N`bocm%t0<=^|T+)4SwdI+>4p8>F;e3U_ zyT0BNv`{DwjQ0BFW%U_56HChsB?f32Djx;{8CluR-ty<*>Zz#_>m{eQgSk&1K70s< ziGqRxh7I~jO-;?2b{$HVmzS4>gapU~U=lSYKmVS8hldB?Ch+RzH8&76w=pE1J&Oe; zZe;^F18@HL@#B>%SJv0pQBx8U5Hqy>)waB{($>;)$0teHE%Wnd#HCL=J3AJZf|J9| zo>-1YnwoB-#V;$vq0~XBU}6RX-o?bkcpYsuwzl3C5E$+54iS2{wq}8kkMD!y*ZgOH zSXVNCm?R@VpNx#`eyKGueD#VsV($j{_~_{9xzOr9~!&hQrO+dVVKl}UX?A~7>Z{4hGWPU52a!B6 zF)=ni{_mH{4gng3-44>TvOp^G3kqr|DdA8NfaJx+1&tLQAFrvQ;kviwBy zuYr~mMZKmvI{~&n%F+E^Toe=#xJyqD$^_;5b#Vy^BO@b-X*m>8YHCwwCo`ANjFYZvRe2-!VBKY3f+1cF<8ebG6@(Pkj#hai2VUQePXkyrO zqaz|ncU}voDCfXe)eU!acGA>i9Cx<2BkbO_nrIwCLMRU2ZxV>UQICv_Ltdtaxm#*$K z=#}%`9?`pZ?`~{tpi)^{T0$|+&l~!L!HDAGZi|`hE%iY}3D6!xaVlg%LTTxL=sw2A z!uQqLQ>fg2jkR}Cqf=z`Kfm9qH9UUDRfhp1WfMI-LVq#)wSn76Ym0AWKkc${YSXfw6 zQgY))<8{!xwIRIR+ylM6N-&Losj2$xZ2xSKkto>Mp{1qVL_{%Gq!SHZUQif?KRkjG zL5IZXdOk$W$<9s?@o@cnwZd89YEt1B&$DCT&A5*rMO^o?$A=Iry1%;&&O;pr7J|J+?GcvaC0zV&pDlUH2lO%kE z=jC+){I05|2I%xl^NtUHyu(%qn6lDGjt;+J{6mK!VIYW$KU=epCj3J}u%cvIV{rV5 zQK7>@D2SgLa=I+(P$41Nr+En%0lB#BE|Lq{fBX6sDW=xzVydTS6O0)sOsJ}hKRsTT z!cIiQbG+OVOcyUZ`w>*r^LuI!9(;v%0`vw+y$xCMQ35;y=E#tLje+NRjef*h{Wgq` zjRhe;I4}SXY8tvoNXV`6?TwZg95L|r7SJX@he07B8?xTQR1qB@P-|TG&9t;8HXAOc zCMM+QB0wW-=BQ-R(b8H>RC2Jhe;G$t&wrMZndx|XWJ^z<1!>dN9M8|sN5Q5rG&bhr z=H3%VK-2Us!oV_r%klDNKWsopd|wM*#EE62@3|bTjRItPxVwXYym9?H1mMSyACRgl zz}`e5Cu$#q7cbbfDiPfg9{xm4%@K554^b}QIR~ADg*+WK_1xN;`)t#V3H)YX9v+^f zPlbh6E&jOnf{8L2glFJ3&EOQMRH=%0si+>ht4Bvh&Ri3JOsu#4CE*TsRvJVR_;u*Q z_^!5FFa}d@jZKdJWqaU>xuHvql~{8X_u4}Rg^;C!I=92Z^73-8&o_~fj&mSiP_q?f zW#E(X?>cQx@o;kf{P|N1l|`$Por>y8=sCoDrs2cN$_iLS=+myQE)bm(s4lLqbE26b zd_U_pv~}8lvD~{?DOrs`_gNc$sLT9){4@5>FPuMM}yWb>@Kg?-k-WZ&0Np{-SGdYXj_mn_+ZECt_`pzUOQKjtQ8@)XFM} zUH>Yp3&4`-#i=(=wax6?%i8_9)R(qR+Xnmz2#}dcw?P;b9K1Q*psS+N-`Drho-Q#l zu_sZ;&#M#@9bL$7F$h{1n#RzOR*XSNsOHnBuT4#1GVAj=f}s(J2W`>TvPMn>~PxKnGa-?Y4XTuRm8N{g|>nM)^EC>LqigX z{TNy4=}Rjsb7+VLOqNLBxP^nGSM&_>C|=)pEN(6fJb7C;d* ztK~ndwl{4+>>AvvyNQOz$;~aNsMt;kb(fx=?mtVy$e089f08EQaP|)H(74s zCI!QovU}NQQu-g)6}fHaTEJ8T>qA%D*BK7wKL-FF92#1*;eYey4FKVzooFPaPxNQ2 z0jB2W%uGy(Jr(2QCsTE9kSDMvptQ6PrPsujf0aMPdiElgHYS2_s$VV006~Gvqot*V zYyc;_nm$xlKl~BL1+oF*HmV&~x3Db|?Z@xL$1O`+?c0Z!2c!V}$Kv85ILxzZ8W5D52-7=Mpb2Ut_+pZcnORd^z1^rJ;H9dtLy-yh ze;BABaB(8$&hQJnb z%)F*f9E^vQ6zb-ZhO3TTu4M*_u@%|G3gA!^I|0&6&Cdo7jwX;q z09xMO-WR*c7i1#t&gZ9ppy*YZf1-rgsQIXH5hP7DzrM~wPv34(q@}Hm*dwgp z1Z?FCRu2I4{IKC7Dm;AI^^ea@e2`@97;7R=7h zf{LP%3@I%sIhogBv--R4a&fllB~6Q$G%^F`wTwqnvK_G^2SVj}xy2}me@rkwjCbzL zY-}jZ^C0%3x)y;NVrFJW?9mnkucW6p1K7bx@I8*p7#h5KlA*P+k&2D2=jYGjw6quC ze78Vv-HyO@*s_cII@4c%FeE)t<=kP|oOK@;7 zYRcN$+Em{1>MD&7q~_#^5)bJU8#1TR_DSFLb3z0MNTeu%S3M%XA%@tyfr^g4i`bot zl=ycOF|jMKturpsG!HlTx6aQ0dM#fPv7_{OkFg;Q0c%fz(^eu^e?xUYL_}Y+nyPB#AtHoJlk~6X=g4_4O|hk3c9gAHE7crP*$HR@u{ncT5z`b$IUw6T~d_lilaMtep{v8l@IR819 z-Qth2v9T$(zTsg-dHDra{i0{rYQU=7U;VrB+g(gSq5JgDf9_}P8VR}RD(CIgkdTn- z>guvG2TxBCr-R`oo*4zE=#-)*PKRqfk7m|>WfQoIz)TwhFY-#Zk%7v2y zq!=3;gOSAxf0$ofJlI=Sxp_0dxF-n;1@s2!I4xP()$_9x#9HXkkWRV9Z3G{aRv-xQ zaUdbQ?c!kE8X5^;Vta3on}b82ofuwQKd5pIML{qDV$tIDRAh8CSh_?(hxd(oGau&W z3`9j65POAzqLY%6&>#lW6sIL|>8EG?M;VEO!C3!nmI-3ROAxbPifWtT@&QvwTi2(nen2-R)yuZJH?dnx%9WE{|kn(|f zxH0Xmf34b8uU^7{|84p7)*(fWN8!{jL}6ZT#Q($x69h;D0U+K{pjq*wt84pc1d5=) zzn_$Zq>|0n#^wQPFom$|K=zZ$G0;g+<`-b$KYYM*a&qzsD=+8m-oKb>yk>50E|@4{ zF~V+bZ9O5TrIi3;2XHw+{G+Isr-1>rn7=r6f7eHzKyhk^@enZC?(X*kTManlY;A3= ztgI3#=I2@iA=1#5<~z}k z@$sN>eZr!nhiaTQkqNPpW`t1w7W5v-09syN#GaS#j*iB=p!H}Zg1)w2?ppP!Nq&dZ ze{_?y!?4)jAC(nM!sQC7vWCV-aq3wyQ`2RDS#X@Drlwk{`S}z3gq0*BZN8J`X`mz0 z)At~!P*~Y{d7)$ioV2v!5{Ls%c%2GPN`Ql7b8&tK%>yP4f&VNl!T#mrud68E`=d~S z3x0l_^X)VU_m&ZwL+am=9kn+)8M(7A<_gDC9YLarKt0^ms4bZykA_iWUXf^&2wJS;Z zYkhqyf4}S; zf}vX~A1bc7aad2?_w?Hm?M@c$*~CEvx%p>?ETxFM|E}Z6`1ogyvfNLf^ng6*6_Y>| z(6;%zW=nTxFww9I@?N0zDE>2EQ5Y$vI0vDxmojoFEX9M_H(VssJvtX{MQ9UM5me7V47+`U(HfAaF{;PFA{ z!DPI>xUTub0HvT|g%g__9JV=0w&KJeKmPOQ&$iI}3tU1%5m=C3AW$lW*+r*!uxC4&k(Cqm57&QfkdbEM8hx)J$>vBO><>}L?^z?bqJ2+wh zli(p2oWzlkzM}s_6Q{Jyf6UM%I+Bu-gn=(jOe&3gC_E91*tP6i92|5JFmHi5FJad` z{~A!IA#dI^ejTIyQ6^mW`bB1+2{(znj?UE2pF10qHHn2XGBQjoERRt^$zpoGlhDyg zijG#(HG_FNez)O2;$!y#z6Q8LbOQlF2&L#$ObHzw9V9DDiGcv^e};86!fDud_VjEf zdz~`^8#u0$I2AjCoOp-nD7OaD*PWyu0M+>T@ngD(+oYs5dW~ zlv;uuMO?S%9&2jGr=(C}Z`Ecoo zYjOr#k@d6)=owkre@=k(xep-KLG?k_1%-q*0e_c&W}v3LeR~xGMngkGN=jN=W}tYm zF==jSXlP-9Sc3%DgYcx^QdB|We)`l4$KeqB!-tKxxs0-NbB&CQ@O%-w4xwTJ;9eLQ z;E3HLG@otqB_SbEQ&R((ikbqoVmVp;R7GVMS^#lh%i&=%f4lzMfPfC@1RSyT^>x|k zd%)VmgM-?&&bG3$==FV|z3d$vfHO8Hs=RRwN=5-9Ua%8mAUF5)V6#Q9FRVN4&op|E zmKdL$oE#Qcbo5rc|Jeakm7|)AxcZXyd!aK%)TKNn<)N6^TfW)9cPni<+&)ek0W0dU zHPa~Mv~k~ge`^L1tdgCYI<>Tvo0)kPi~#6SL(bb&d%r?OtE;MB8XB&FUw|3GI460D ziHMvaYVZvBSHzukf)3wXTNmKOM+gU%Ur=zDmiBl=gZ>_&tdx}hQ6-od9-cCgX+i=5 zR6ZM1bv2%6$ET;K;AGB#XHcmimcRn}`T2}0nczdbf176wjf~pb+bQ{N?$Fc!hHr-E z1dV6v=*Sx^0WEr4Z0YRe5cIM;sPmP@B&~3KbeA!jm@TY=vPBd zHtlM|moLkp6TG}G{IDr^ERGG}l+e>#+wecZ)}eL8u9vT0ACLs|dY&FtR`O4^{Jq=n ztGfOde_@VCj~G|zkKN( zA1CD#%j$QNc}_}6xw)~yN=5aME&@P>l9UvDFAPjU0ZWX5m)Ef^=(dM-aBp9q?e<*j z&dw_Uq@^z?@? zbJRK&!@lv`M6Wog+uu5!mm#Pjr-ii+Ld(v$mUrAA#O zAZ6U4FpnXf&c~F2tsnkbrk<*_eIzf>a`*1td-w7ooaW}j^1;pMdEX3+tE*j|o%wMs z)myB-U0&csr<9eI#edV4EUJrG(+A_df4H(@W@c6m&DYzj1fmX_a&4ljWLyHc-CqJy z0dNl#o~qAhf1n(G z#Bt$@sWR<%#q(7vDJWR&uMCQw?cqDg6A{ILj5jwiiH(mB3hTIhS8yx(d|7cMaW-@m`- zOF;xttnl)9`SK+wQ1hYuH~~8&OG_5N=I0ewlfNs;`#7Uy7S7urR9H>bb{K-P&rD67 zOOp)U;;?T$HJlz^{h=!P6pr)2nfi@VN43Ge*jw4Z+^GDvVx3^ zTwPQ1OFtt5Xi~tg?d#XCQ&UqvegwHSkyb4CX92>Fj*YD>FSoX|%sin3Q#CVVvpH1< z0hl%Ouvm{EBPT~}>H!M%C|(4esHv%miHS)s7Yi_yQc$qIxEP(7SO5YiD{FXQpwy%< z)r!sD*0!jkqN2E%e-jcwM1+ljL95_!a!}3VxHjUAg6-=MGq<*^uxo4`p{jC zjg8KKCZLiGUc9Ig2L0&*5cf1sP5SaqkByy$&I!#Mh#PE~?CtFd2nm6VLE45%(em+C zWGNrBF#SpEf8yez^-Np4AU%CxZ0tQwsuBZ;8RxfxB5-c7YHoja?gmTj9vmnD#4#}V zhlEUh(QgJW%u!ug8!Z7}7Q?2?N<&j(*zo}-6cZhto09`g&cnxt&+-ENroEuYueM;w zk%)*03E_Qh!lmI(15u1+I7rlqio{eNbN!#1s-xhm4HQC@b4MnYx z6(L2NFhq>FXe#V=?w)XSba)uSHkIy|*C$|#PoDHysrz$*qA)VE==I zwADp?e;hLKFw4+tRmJEw`QAXW@ey#s9d;_z;{yY zUv7xl8bn-b0Qm&cY1D$(ui0g5=AnedJLuT3Fr0`Ez-1aSsV7giFIO1RiCAZJHM)NM zf1tSUtfZsUZBW#mAmAPU%F$88X@jiWhm4R=BGRd8l9ShZs@BKnx=-)7a2n8!Zr^2r zc67=AG4gIJD=SbfQ#DSX^AX3I*ZFQT00FeSw3L+GM{eoIkM9Z#dw@HuqF>*Q6MZFiZ~3nxGo zK~0pFmHqw^*R03xe0T~|7T9KWqMo5ivJ@I(3-h}9+8V>%-2GbpSFM_vlD889NL#p} zoQ_E6ZyVzOY6bTvdXCipuZ<-C_Jai9MmU}Y2M4q1*5_wun^;;doJ}$kyoVOef6Sx< z^gNqv&;*o+PJpK2=i$OeMMG0&AOLSkMMX6=f&2HIYQ6ZRkwBZ0p%l+SG?9{`qoePN zypE2J21-g#rv<;j!NDWGfoD#pN8#B=%i>3t?|-)?znUXJ!N z#c71q%zx}ZsSVZtkNqb_J(y0-e*jlolBc4=*ihmap!Dazg@dvIN6*fAIqR)5ZwG^G zF@Jwjpu{Wi@NM%fD1qM#3)@0r*19iVq=6rzyoOj@t+4@W!CqQfk&uv>`&C}fi;Igp z_rlzq*;mZv?AT#A53%8Ib#>g*yTrIh#CGnwQwR90KOORH5Vuc=<4%Bhe-jD@a@sWZ zHP_6GzjvJA2L)hixws%!rjN*5FK~&7K4)hysU97ykBjIOrlxWZ;CjS^u}ja$_(S{} zs##Z!_9{}nqDq!Ro!#${ni?T71|FU$nGC2yY%llIBaTD`O0eE{tRH4512DLK_P*G- zML@8$wDfiQ0n%5#Yi%vae^?h}-!>V}v32w(X>12QzrVd*<+Mq$Z41w#ru>f`D|Wg%y1Jsq-DE(xEGz|@6;`uN(CdJ= z&!3ORaTymsyC;~4SgiC>0!IL9445IWpn#l`vZuxm%&^F9=YMvwe*hbWFa!h!?(Xfa z<#+;z!0=vM`(0k8XJ=m;z6&uwdhq!1%P^f^}&8*1M@>obn$d4aCKz)Fe_wn(u%KBu#3d8Q}>x0prp+&WWFSMGd(m`@e-phkU2-@t5bDuDw%RQ|GA5@ zlI>!DSQjGyJ}|H+L4XUwb3Y*p1`!sfq@{(>IWJHTc%>MB0-KSM z5nAPmlG4oMNL>t)U*O6X7#3Lju|MCS~wE`Fi zPtW={Z{C!Zf9-=d17C48-x1LfK~Mi5dri(f$S+qBuKI+5Mg_yaC5{Jr7(fDeTv)gc z3JW)CVPOFVsQc_$c2<_t>5*-cC^Pis*e6#5GA!fuu`&>nORi?1nxO9hHS*LyTUlF+ z+RS`S6mlYD({Z0`xd{-YWxVh`sy|b{xqWxB3xqrfzymj~@XVm)ZvmB*u3@tu_H?OfKeT>;;`&tGIB3G& zUKX7+?oG_Kco^w8dBDLqgn*vdEgWMyV*r15;TeA)4+EZ)g) z&{EMs-H|)3d|XDmzxJt;wW71cbyWhnK5?w8T&Nh|Y+{=?L(QF{QButx5WV~STbFBC zf6K2&>&RwNcsgRAR$g8nrl_Ls&;fC6onJ1pF7%l<9z$*(Ks4YFcPhu$}MKAmYoJvbe z?V*JL=)h=m6Jr2nL&;W_+5xCqSry_me;E{6j234=A52CeJ)r-{uHRJeaS}oyEa-k@ zlc9W@k`hL74q3$}AGw08VHCEpvx}e@ z85t=JveflDD+>;m*V3AJedSud_U$X5NLQ8cxJZISMUJ!8@+=3F-4G&~*K!QXe-q?6 z=vWnHM_Q{v$B!Rm0Nur=m4}lXppITkDC2cwuaMJ$s!(}yYbVdwM&3W(3Y=O26BjWob~_gEQt9Z zPJ2yvcW*$Th6LL4a&x0uG|R!8fAnW596% zT6)KELPCNSkGM>V5~!i(;bA^jRx9B0^78T*Z9&`n`(59^uZ&l0B6cqyZYC!tviPtQ zV*r3bT7fAot*q*8W&tFd1Muln)6(eWKc=hYWlU-$J^ws>a&*+v-VWJiXJ(c~Mcgfp zg5t-hlG)PQy0Ew?L)G5af0kKQCBVoiouit>Z%a)}OUuF02ScEzmqZN@5AOpUht|X- z7erj5P`(<8*s`|Nn*wQ|5OH@#aZ^RUaU&`+QtDS_ki-kXJ|(5F{Xq~#K|w)42XH16 z?vHD07G)YNtxfOVAp@89FZaS<$Cp!Qj(uDY`F$lB{?OLQnHgex=j7xhh`YBp&^7M*0X7&L8L2&e3fPB5ai5=_ z{YAP$`5(Ud9D_RE!_d)1C zeE5)AEgy87l#I-W>OYp#^@vL*(N>+{Q7SCQjf4#W2%bE7f1+$YJJ%YhqM{;Cr=p=T zmjAp2pxte6DLg9b?#2D!v*UeIL3@+Ok9`N~Ba@T8;u%j^2xT8Uc#s!-^X5$;Fha5H zL9-moTxepDsStBCUurr!I$GLvAOdLkjg1X4f9OZ88pndcr>aa*5^1<%N5{uQU<-M9 zu}HY3NH~_(f7aHPmKZP_K?46=quIYae*Ovz3xf>*{Y9ji89geWtgI|=??;_R9Fmgl zaK7qlK_{m}tSLivb#*5vC)4YXO-*zB{3JUU$~(V**QoFR`BT~0*f_BDXK(MP{$=p< zDk>497SR+==@>{$;vk0LG>FAxF|oHeP1DoUhMXChf0;7U7EL}kVJ=a~c#uGm!wEZ< zP{jQ`S;?MeyzwO^C6YnJw(;2EFfhKrJcWX_lG3oKW^L!tnV$0sH%xJj({MJq=wbn0BoxG_~7 z9LfgN4o-J_n4`Y`PI6Po8x*;KzwYnKwQmMgR2-68*KW6wTAP%O0V+C=m74zUNsb}G z&Zyr6xmTd3c?iOp-*wOA*|XTaf!5Z?S^cJEe;VdlSmwG|aew~&k#4TD7n}r{VrgLk zNH9Lp56HI|4Acw7${F8982I=Y$;!m!%LZfF7f9@iy`XtXZb5-1pl+u$V?iDTAv0Ng_dsdPF3HfaD-Z zIOLp@$^k(niR3JjljIDdAR-=ej*@fE`L5=fukPGC^HojN{4-Pac3GC5hCbbUuk{PN z_g)*)hV@$Am+hP`<7{CmvE|Nzfr|WmfBDR=y`3FkW91hwW^MV%ui{y5%Q0OU|A~}( zDPUv1N;e`6Oq z+~_b{x_<3i^v92%6`7HuG$2iTv^|D!IJ2#VzTx3vKpKMr)xDMyxaaql-KGrKuO%h2 zaLC92^|&;R%0s(KhOM`HB6RcKiS%-U1!QOGG!>~ zS!=mA(P%aPv#hL)>LUIf!iNtYsJLWs@gfKRg9m9{a{#Wxa{}E{N(FtUf1HsEi;F;1 zJvAO4ccu$tj^&vD3=dbAmGwD`X==t6(ql61o1>zrXWvv+RTY}*tE#GkQaw#9V41p| z#(L`1DTFq&v%6+(!RxYWTU%PTVz>YiS$U1QqJICDh?U`e`Rz6I!HjMB@87>G3}gB5 zNYI5*EXJUIS^0ZGn!!;#e>l239Uo5P=mv9j2fTJ`h5g;NB zP0i%xr5mb^6Tl0B0&6~8`)C`R^(bx=hzL(lPckyHo?LDAp)lx2yZLTaVk&-nQ&CZG zu3Zr&rS1#tl{c{we_TfG@FknhZZBSReGv~~)2d99Pv3ApG;?;arGuyiEfvS_AVV#K z4AqT|>9Vu4qp(RyNnF-hU<37K%#+j88<7`}_277~T)CpcLY{v6D@3w01*2?SrSoP+ z;nQ+f2yy5)V>_CVM*22Nr5-$}BDIZEMTxLTWe6xbvk-OA+R|?pn`V7=Wa~wY12JiDAsmmq7Lq z(7HmqfQ$rDf9QU^KfPtV84ck9-ZsCW)0rnKtn;l@UB!c_<$cJ1ne7LTKXq@-5> z>%cY9_nGSI>i$3vfF#s*+YBwdEg%4<$``1WhK2?J1*z0wZM~MGS@H7&)qPBBg2%x) zZM!)*T4ZGEtIm&ug99y>#UiKmsl!oX50!G;SqL4_f7#}*Ufl;P;^X6Ufr3q7?boer zgWd|83*;4OpGgl1n5q``h45j_R$~j!o$P0E9_b6=_i`Qw~Tqc(Dw}fM8M5` zNlA&qe;K&A>?b57>@QWw65fL>1G5K&N=r)%8c#i$0!WvZHXe**e_tOFjX-IB{u;{d3+IirHjH9s7sy{89v)D74S}@0)c(w&zx(&=e?u=r6hf%IV7db5&^{|GE4Q8n zq$y_n{reZbj~&z`b=6C5*PRv6=!1hA6cpiUe`!oclJ@pnAd9Y?e<~*CQ?&nCKD~0e zdLNV=&Y&PWJKOf?5(r*C$Ca00R5KSZUAhGQ(C(s~uGpPujx2c$7lU*}rpb6IAg}W+ z&ZpO?M#Hb{Z7tq4yBs0x;jXN_YJn6=yKgAd#0qTVutvec#8hfRz|hs%d7a<> ze@}V;8IEm9SWGRx1*fnVSH!XbL`wBDoTx~-5Y|Cu@FquF1aWX`Zl!n5MC7-e;uek5ZUbPxtZT1 z090~wmmvv!bn^3xie6-PIagIDCO$6aFfcK>%lZa)^B$fxwSeQwvio)gbozM|^|fn) zf`VZ3zN8Wn5kY+Ty1V|FVCUzUekB$u(7cLu4rnW z)k~I7|I)RBm*5ipz-kPDJbA|MV8;qV3#qy#8%QHKH$L70Yz^t>;^Z_74Z+;5$9X68 zcTPDUUg5PWvQv1E1{kCwzB(*x&8~vcMZnqP*nPeOc_WL0)B+7{ELf+Tf0w0_NB7`C zsl)OxQnZfbyD3l2-dtwl$+14&0v-T_;LK2k15hA|Zdb+&fL(I*#MD#(H8(Roz23^- z+JRy-GBmiMy`%kQkIgRS@v$*98jZZ!$u9=MyuV!IadfZ?-h~3~3a8=1ZhITPfr0GI z%%teb?O_)`3idc&3oY=2e|ma)VC$QHcmTQ~YkW+3N(OfjHqx$f-yU)pNqe5erd`c~ zwY0Qkx_dW7E0jj^Mb+BxyPzh{6BGZdOlUY>err#b+e|Q70`Cvp;R8(xN z8@NRPBIB-%nVA`?`vwQAfgZ>()6RI{h|98IL7#wObBtlU+ZK415%>MYgWYvIzF7Hm z0hcYL=$NzfUbIE^F0f>AWspQNGZRw;(prc6(1X=_jUNjO3!x+5d3)!m6@lVYWCozz z+ZwQ-6?PZk00ksohQoSuPge&J(icBN!WiGLy3pC!&q&2`n9Q;?og0ce{M@l3*emz1`~8V2ax6N z?hd^LQCrfV3IU#yl9HGAe5#CKXmBv%9~wv{htnTb9KZ?K?5vD};h34hJbU(R_X2o! z=c=P`Z%%_t&dJH)U2Yv5%<3`*S@nWB)U-e|QYvL?YU=&_^N^AvD+n!GyWU<@0`3PM zF#Hptlc$0ue*rgeL=E8uU1rc6QwFRA6syGgO8#O2+XP+LozvH@T?1ACMFY8Aq$b^j zEUzsmw_&uu3uzeW?;pxKJm_7oOT}%h2;wnw(Yb0E)VZX@M@JV#II*!HFAhlP^USB9 z6#s+aa&~emI#9YnN@~5(n->scxju!1 z^lENwR4v3jmywaFkiCuFfgl6E1baUe9AY~NjN8=I1Y$i8#6R$Dp=t~C7qq}b2tg#s zz&syCe=_$Kn+>R2RJ~ABW5!bQ+0O7USCU=1(m54pGxbMYM#g<6@!iryp=gp-M~bw~ zbn~L4m%hF}WI6<9IXW?@ScN5Qai9cxi&n_h@%N`Ya5Fb*&cDv7fBOpWwM)aI$J+(W zavjjG;*sPt-3Ssoc6M1cIqTMh$1Yn7voCcVe|&*$k?{h;Jjd0s7nw>$Wi6mRK7Rbj zLf$l=TXS?j)M|6C3#=+UMwfDq#xC49_%#YPjov$kLLetfM%)MPq_$(Y&U<~XtQ;&) z{`?u8C zf5u%v_5_!%@6-~|c6N6Q9jyGIqM{NP7l)WVL8S=X6xgGaiKe1LAVu0mF1&g3M%#52 zdFf0?M>p)gZ#IjD#5U8@n*e*4A|0&+JY%4fo#Qw?ZBgKksv9}lDoIOA19+g&cFjvq z7bkqKpip2r`u)vmf=keb$47?*#54!Jel=sG1xZE!3vD>5#H|>4tMmfmHSxuG2!7?NPfq(8B{0S0uRb>g|9dW%ce;^>h z#kEnjJ)D`H9V_Uv1%Q_-9o@aup9P{tPEJloC(%ywe;H(L%lqF3S&NE_0Q^Jjn}7fA zFR_TYzkvVW}B|ZA8Tl9 zYrl9=1ddWVnkN=w7Lcslv0EbZu7QEU@aXP9mdF3ih%1%^zGZE56CQTq8Le9(bPsfx z_TiketnlH6Np2NGSJ2688x}AB@87>eu$GoSm`(nl!>4dDHg(Y?pisF>)2XMW|1}q2dkLHwDA8}<9-->M7z3|3{{8mm&!0c- z?d?S-J!-^v*x9u!9j$g8(HN1 zcZ)BoZVdSPNWbyp?UH_6U!SV+)OjMJP;X`=Y^MH11_T7e#l^v6(gKX&o-Gbn?L!{f z+S@BJT><1MDs~jhegaGYH?Ef5-O;f=R`1uYyajL%o}y6o2Tr;2f5&=>s>lB}@c4x( z-)36I$gvBIg-pDV+xi5Ry}f-1qpXay^i{MeIH~?ZBVKk>P(siTAmR9p;?osU`v(Rf zGF%|gN)GNHFamqLBc=r@t(K?z^wFb7^78G-s+)E2us_->R7x!qi`>Ks^FZA|a-KSk zPly5`6cZI?%ozzye-Aof5_D(Mvq10*>A~4#W##4NCsXeTQ4leL0s?9|M4Hh41%|R< zAy6W4pYS;=xgR{~tgXMlzeF-9`htuMiQFD!641bagSi<9PX4wFFt> zHC*Xb(tiwu*Y0s?F)TXz+U3h_)ye}7M=>!mm*Nx%b-1V@eKMaxO$6nn#B_uD| z?{V1UfegR$f7a|uNADjff=&H*EUq%K%NX$vMja`!!X8?gUBLA2ATHV~{Xj@D$ghU{rfUqK^H(I^Wjr!YU)C@?4mRGs{Cklz@m74+K4MLX64Ael94+^fcmibzRF5;|s$ zO-$_gG$F2=!ohNJQR50dBJaKO_Vo1pRAtXBjEW;L8}NQemInsl<*|sdn9+XbeeiAQs$c1r%xhO{{kEW6vWKR zDotnw)}SrvnJ};*>$`p)US8Q~o<-n@iWfk3)w=cXk#%s+vtWrK<+-`J0f9h4AQO24 ze*;^7{lcsZbnCPr>*Wesg!b#mWIxafgN-^u21*D$JdPbk+#KK=!0XbwZ3L6hA%&5d zCHRz_2dzo$6cjo>-j-adIX(iq7GA9*<7FrN2X9Az_P|QFy1E)v8wDB=zn<^LE{;Ja zW+%|&;7M+eva&KG1A|tjV_SE(Qf`mre;pZ4r?m;7g|42SXxxVq2wHbeWc*Bq>YSPy1ft*6iiVbGB(D;vR4tDD!` z-{0NYSt!stJnRlReY~lC%xyQ<8D?^Q;NL+pM=vz80s44S=ZJ8mF5}>n*|~sj~6N zXe+1_Wu`0bpOETh{wD{y-|hSNZ6uhRm zy>=^5pxxS>6osv**pImP3ZIC2148)~_%C8$c}NuipF36MhAnX*e*}y9CYo7Qz9J9a!?oyGujmc9{~%5>irsnwqW&Iu~xRfp8_8M^XDvg~$p;f}3`8tAd8-iWP@% zMC$S0y2VP~1il#f66}uqVt)~69dO>oxy8|t#Ww^TTlvC$Lp?o_Nx%RB{-Q~sx&o?$ zqUe&}=rlJsGlZn;f7hM0?8#SQ;o;%2sM_p?M`bL!A)a;G%8TRzIg3h_^QMBVpuU^k z#!MS1H~1Y84-nx^jg6}-EC0(q>vix_J{*QX~Olu06u(VPT}_o^WPDQDYM zRB)VxtVN6$KAz5;OH~6EhP+QTzr(_E@zSNG3}<@a!Xz#``q#~yw8GqKOE0;oxvBlR z9&JOCQ}LLpf7G}iB4!^{Jxb#TfL zguq1osf%9Lz6CwOlY8|0Zmy%VGn;0)?YGyb;9H=3e?g~~TvDsB8vhAS5HO8)_G0&T zbVx`6rtLHQ61PcrjDQm|(tswMAOH648`8o{L+Tkka7zLL2a$$xjeq`JLF*Y9NCYCI z6J5&M;%!#*-P!SOTdL;f<`86HH|w3Z@hrnD4jFGr6FA)RtIxNd{M|s~vcOo+fw$wO zR%Sg3e_5rJrGgR+#UJ~B`u?f!=TFf>%EN*D_{yp(H)m&OYwLV2mqo}T&R0J#qOg8` zO<;;GY&Id0m9?CbJ&uo(ME$Mp>|SJcv9YnW(-$grlQ>R)83qvyeNH3jtU{o60R{gw z9~QoY9O)@3Q+W+E`(u9WVQiXv3b}-Mr7pknf8r?JKd!B<1qG30EA0>3v>bN6x^eyb zQrx{ke9u~B#9lO6{thce_lpmrx7;Y+R7k&k`4^P!u-mrgtWor7tLz`(1!An!`m4;Prxn ze*&)YPw=;0JWnpTBg<^13im_jJ7wUR?=mrAAVAQBu`=5`dR5?Ts5Ze=2x%bOQPi2;yhsTPE>YY$IlnrUe!%F#10EREER@TreagHxUi*A^8Kk&5Cne*zxr zu9tBqh1&|g^-KoT366IJS%$p1saa|{3h`yo9Mf0h;bD|ur>FOY%V!VV3UZ%+Ydzmx zq>@)w-tK)BSTz0~?{x*icwKoYNPe*BV#0m)Wy{t3=79UG9!BH{Q7bDd7DmNs$pG>g z7wt`*Ejnd8C`--g4e5atP6bA050U(%8~7gm`}`-krKX|{I;yy377ljT0UYHo&ZEiw^gGj@18HljpR6j+v9`FK2LUv68z%?I z1C*$#dG_Rl6`b()#s{aJlY=HioxG)ZqO5!}joYM9*cTd|n3&jKe{_6&oQ#t40f;q_ z@imwg2I_|+TjlCkm%lAicP$oRwJ_PuD_jmqCYh=pT5eX^Zx zPX=eqqF%g^_>QI=f6|$t z{~DLo@rDbiKL+cdwr-sq@vdv)Ra)#=LPA2v=~xGNSVVaNe8a*Vbfzn?SFU`AyYwOfo0p!R-hRYyzW}nz zdy`Zh(y_|L0Vu=3Af;Z{X@9ZAi=?=?7@0_%qhV!l4^QbaWPQw^DxaPr6TA168#pgw#91GS4yRhyD%+&0=Cf7(nG0s;pd z)OliJ3N+|qq|jM=z9tYa=mNCQuV25~+vQPp;MD+1S+UT*Ro0ULB|+N0?@8z$K6Kh% z8e#}(#Bf1;Ab+dPofC&D9E9PEPi8miE)A9;^}5hZSKfmRev~Ljh@zvT+uK?ksCLLR zA1a5WL*|H#j*h~2L0er$FAP=iGBX>4YC!wc`%$E(q^R}Kg1u*EVhS2w200A8aG#SC zu0R2dKuMXV$c%_?!+5u1w|XRUXSVpt^Vh+~IB(ABbALu&y8eJe|Mw?P0^&K_a==U? z8UdAl5N4{W9p_NU9067cEcq|u($bn0_GUIV1#Os5Kb=9Y?C$RB>*-PY|AfE*o-`>^ zn`O#Y8c2FZJe!xAYN)TDywO{pcT17E3k2t8r-CfiMQ;$xY^wQnBO^7RKab6{CF$ts zvT0c%`9kTkNhIHqcjeE)z^wM4B%SaLXvUqQ11exM)U% z1_uVJrTta<Bj5*GY0yLR<;8k#tW|KMO04ig_6d$`ubUg9KX zXIE5EU?V3N)Tp<&(IJa7C@8E}0yze9(|&n)DBt8Wi7v>-XdbhS++5yh9P+l9%Sb+x z41Z$y%9SgHNju1P5f{i0mXD8e`%H^fSOC%gmF_hEPRg)t&dOq$f6aR`vjZ@K*L;u( z+iF}CD7dAfsTsTRbA5eXnxP}t<8U4X2*gBEnW86^yJ2qjKM#Ul~5->rAhl}Eu4q=B7ZS4ST|io#ZT|vH2_M1uZ)a|sRXdEcH38D zA=lQ{21W|oXS{tomfykrPsBYS2T%kxyEqHASW8ev(CO^eJ7cnL7f>h^vJD{Z@lHds zWH|H5+KfP z>|9RHKX`mNkAuz`ciOvnc!NJdHSneWOUZwmht$RY)Yd+x_V1p&i0_${^y%vP?Ryjy;iaXe ztm?&|LPPDud7pyRP*U0&au~TyPyc|Qze)RKkxj+p>8yo=3uAM0)DZCD;XSu?{(yw& z>2ZJ%tm8ngre)u9`yL{(CBZlUdslyl?JPD=RKn|uQ{pEJbSFefPs-Sq1%IC`H+p2g z7@wDvk&!_*5082%ASj4P5WI5VOSssX<>is3SIFYDw{Q8Z?eJd5fLv|wx(yHI*7|QT zh5yUd=ucKF1zr1ZzU==)rws;zJ@4MV%b$5tHlozQmdV$ME6SeM1=-?CgBtnJy=*2H zsX&5fed}a>+3P{ElPy|r@_&A${8ymSNeT*;K*dL{I(a`}oS^6`$Bu?H!#fVPeg`S0K1$IB7=}fA5s=Q;vap-%zqS4Y7CVM3n%ec zH9A+-zT}9MvhMEozY{9K$jGRy+%qs}54RSd@kBf;z3h2r*OuJ&%8Io@KQn)3N(ER` zV{>yhcJ>}jC$oA*v;)T6I3umq*xAv!tm3X&`R-6@WTUCEv2hL)drum7vAvnAPF2IQ zZ0gRobT`IyK;o>lw12c(wo;C3`?5a zEv$YcMDEpRdhZ(R&>?|i^7m$?Ns1Yp?5|SU-GzJTZg}qJi9{Q1gauC{SjZJ@ltcSo zd_s?=$)DZZArA{p=gzMAYVE;S?@`&Pmd$hX<|Ak0JeBg#KYz`C{rvf}wib2sW!_)zKQTXL z3|o`b$&}{-yMNi=+uHilX3?rDys z_)Vo(RyI9VW(@STu{IqSG98ZOxh*sdmt=o2ZxRqA5c$AfBU8|$)OA)~XVl->v#Kh# zCU-gLNPj1G6Swbdx0$z)6`jj;r^jeWLqkoemo0lauwJ*X^i>6}rvJBMadEZr=GQl# z<;6PF6z(Ada{m?rpY2G!d*#@)4t(uEiA7*QfRO9X%BMRD5ZL{0Q=SCG5+0BF`T4cA zN5C-i6>kPsN+TQJ*e|H)>gw{d#hwh63){^pQh!iT82Qz{>@7A^S5fIrcdi?nDVjARX!Y#hzyB2O$D8})PU)WI^!9kpX&G0O(3=NLvzK&uv zzjn3dZTd=!CVGZQ4#C=5WC!R;gX!2tK3+PZavML}ZCk&Jr{b~Ax_O_%!o7xiO1^%1 zkbh-SV;?_l>#o&SWb)ke-NwdBng!-TsKb)nl{SbesFM5<$tm*6TvZhsbzL_^q%{{j=gq&TifbfSLW#G zXnRMdaxUM4!lU@Q-@17*4{cIjkQS)0AQkCQ;OK09n`L!*jV*c~_Bw4?QlNW#d$C04 z%(%ED*foFMW!lSAVZxUDG+k69kPr~KAhY`#1wOiIx(p4s2|3$-2?=?%xf#_FStc!wlSsz>{q;s` zE^fAh_#JjTl+7x;bV2thx%LOX+Cbe}%YmG{tu*0i-;Y;fosZPj2W~{$Z(Uec5AraQ zU)u@rkgQ0_o|&DcnppO@IbO=`8-HqaH{aUk>iMS$H8plE2XFn(D(Cd}^_|_>E8-J> z^{T_GNjTsdcgDMS??}Gm>h&jDb-ZrhCNC)K)8mVDNhwbeCA{3*=?u;b?9x_@}?LJ3dL zL=3;Oypq9Xa=VtewkJ!%9<%M-*~R6>TSqIF9<(EseiXS^DDGg;K%;v`u6Ho^p)_?NeYb^68`eS z&j(WO)qSS+R`vlj0$(N_9Qw?y;n7wV9`2R%>EvNI%Gl{2Jg7FwLM=Pz8y7SHUiwH}8ot*PIdQe`R7 zdiwfZot+88{S_h#SpUb(a#S)>hZtE>rG5st=|+@>q!84 z-qY2!IorX=!jjeX)PK#@RgK}Ek?xb()y?^yg8clbsHjg8`XVA&(WHmY8<0UAv1Fla*cW%2Y2|Cf8xQC}9>{kd0tR(WU~N8fzD{+7g&f3_e{3>A`Ro5$cGO9tUJZ!shPRb1g0<)rxi(4bQajOPycD*p!`5#OwCXy@@r79 z(a86Sw+@yhvwy2wB~=NZi4et*G+Q?sqR>G)O|G|h$F(Uyxz$aL+pH}l$=ZXbr3+V7 zo$`jnI-^v;RTs0xs!GNv&BV&ah)sL@iB(#y+(R-%>1x)5OrklaySUI`5*MW$Bu?nE zWlMy@j;^v8NFJG$y|OMiK)-s0d6^)>LS9j7YwtjYR(}Z-w9l}en`qoswb2lv^Xrlz zY}?#?(bcKf5*5qO|D>mfKjGunl8kS!mnh+l;4&*?Z;=4UVmKMIQHW_0OZaJEyB zG%-n#NbfdwFMX7)G&+Cx3SmHa_){-0)`1ZMj>~9D@4UXO$oulI7^Rq)A6_P-ii{QVYj_o< zUWC>6laP@jBx-7j3JK%dTxlc?>AU_#F`Zj@%YQTFwn{Q*l+-f`3HgweDMQ@zoxQj; zCfabBoUDh8_ExGKhUQAfYDO=TYcaM96R6z7^IqQG8C}MF4UNV{Jlxz5r^c!Lev41>gZtiyw~S1U+Qo;f0EBV^XE{pv9UbSID>*bmVvgm(dlX4@4gVT{r&xfC}cwA zxqow!!X8JR=?Z@D-!Ir#fFh#y-`(9kd-g1;@0W^-X#R|x9GTpn>FH_Nc%j4ZUKhA3 z4Jk!)dkppTAW>t5+?-d=utrM#9A5?cAVj&jx$#8%Hz^7Lb70Sroj-pb$W=l@f)Lf% z*eE~)IV#H>%6YM4csMRTK3DN*MfUvghqL zY&WqYXUNbHwOZ9$OEl)#pw?d`{%Vr6;S=N2lT%9)gsWSdpYL}V;3O|xJa-ej^MA{2 zZ+`C{x$bX4c+^&Bz3_{R3frt-1bzH)wxGVfZzySH z^)?oZe?|*qOoxS#Qa4lb5PpcF7hsB5>g#SpZLeOgC?!Fo3H%?bu!N0rRznbs)}pW^ ziH}Iq6pj1)T?MKLQ5zJlA<+Hlbbr`C($Q3;Bw~cY`#T%6n^=jpm-Y;y} z(gZe)ueu5fdi1V8GtOq<;*et^;kZafLz>n7VFMM=-u?ai=0HjIK(XC=+|Y2GmKE7& zLX@$;0a}F#g$*F#Ii!?JpE!^9$yA(T4lVz!hb2*t{PU7)lWN1+6ZPQcYk!ilrKzdW zx$faUsxR_I81>od;jAwFJ1?S&m1x;5h2V|#mhYpY%Hk%fhYuSomwFdMm_9iOJ8 zq~DOateDu!=H_I8v5Corix($W9Z7w$*Gg|;TWfjK6@O0?=PA*nfPP976W@@ux3-d8 zzy2o_*>;zn9!o+O-n75Bhkw1EBlc;IuMlcR~Jni&UG&vLH}q0YI{`;~RQDh2g_ z1h0oRjJG{#oseT9eUINcPG^1ZVu5RMqn`ccL&tMyos!4T2+wUOXB1KMMrLIf+~>aM zOY*tfxVcO7Yk_@3?-Tkf!SP2kT#>j`X4(0@JwlYTr_Og-Wq(dEd&d4LDM$Y#(vF2n z-}}6F|Nd=V-!{GeatB#QOO6}F_oAfV1<D#}$VhK9OcFb7jgPZc)@NLM(t4V`hVZZw_B`EC?Dm_2_- z*ri*KlgxXD$bb8kWaLGMMP()ymJbZKyL)=h!wKN_7!GPX$@eZNDGJs*Xv-8QhPQ0&%X8BK6Q^YoRUa*({I4 zr@jLZ+IT63aa~3>6Ul}@$&NabawVGZlMC{ zuonXut12tc{B!CDN8BaP&xo&9ZUI0ViWS77;QWF^1Ang{3{?N35S zdY(0mb}jbrOi;6~Fh@nkFsTMnT-v!sl& zV`+I~mD`zr-qd0QoaYpm7A`s{D|@zmHQHXHWq-GM>Dknxco{u~lQN`CDJ``9R-sE_ zHHb}1TUoig6!E5xjqSOPPI73fp>(tiVQ^{bA1RqF+il9pQ8qTZf<7sgFn7yKhY7}D zj(nOQ{2H@P~zj zj4v(a^vsvNw$uaVDL~U=P{7U0oB5Mz4}W=kNm<)#$T(MSSN~4Jc8Cv6*pzQK&E|te zM`kKgC1A=Eiq*`pK^KaMi0q^h6`}Gc?6R>*kNw8>R)tG>)1e#xK*gTR{y7u`$fPja z_`TPCrk4qKIhF4;1Vxts0hXVtQRJRF3I` z{|5mL>(8p0MQYhqhld1#6w!YGS!omGVl2`au@S6cDPiPMHPiEpW}K01T-@!KuNKtP zO zI6k9a1r;u(cRsz>jK1)c?Yp>wEs`!Bt#DDq%mkd? z_xk6to)~62VPqtPL4UNO)CUyo-o~MBFcTLC6C3k;63&NwQ;tr3-Bm7xsNlrJHCm6m z1Uq+IcspCfr0B4YrDb=nuCcmo`(QuU_4WqjOMQb{D-3{#5uW`e}u>@NKi&@c`rfT1B3x7A7ok733Y5yG?5*q4M zU?BTG%JK7O*QU53`>+>{SL4i=CV!B9tesR*lDcqxe%s5``7a6Q!ku>q!=aL+bZ(T zt}ackr+@1PJZmLCG4^ob(%=sV^}JhszIb@yBH2n71I0MwA~hEBBDKZ!aRFrGzSq}! zCk+|b&bn6Mn#V_M^J0b!rZ3J^;Y+0!o=IO`er!~2Lz{fRwid`pR1 zwkH{3t{ZcxL{gjSK(W70L_$IWIObLJw$_}ElYf2ZO*$rzGf4dEmHaeq*PrT=7f7>^ z6Ej`$t0#{p3dTp(nHGHZ$SFqgtI`E)q$d9Jg9F)hiqCG&k#~YFs~c5*1JQ148b|D} zh#dmW%~~jVCY{@cGS(>zzn50Ldp1v*ZRJp9GCymz{peUj^NB-#g^RlSKxyGLLtA(E z)PItY!G$!q!Z+!qwOjWR<(QOzsbAy!BkDI~K>LG7GkSriqVHvQw*%9a_ow_`lcBNb zM05_u)Pgq($FuK0a?P`E!9J;PuyvTn^q9$f?ud$vVo|S5W4N~$!$JA=(mrLrS~k9C zVqTurFLPuKajAgvr(g6}d?wt_$L2I(IDgs+WQV?;`KMZiPU+WGbZx6}{TaH%cy!Ku z8;m*VR3~c?4T$CNNwxUUwYkO5L6P^LEV++>~ zj6}9%vc#3Q(~_eTTN_+@-&GBp!Yv1~hq+xN-)lIBMWecDkU1TtTRLYE;)BER$$!7^ zAMpN~`urbdWMhbe|J|hcb%D+uj?z9=7V=mbLk>z)mA1B1@h#yJ$>!$fDkUdPZ~TZJ zpO?F!Z?LQ=UIW6-?ebSxWPcCCJ_we?@I}PyfTxgj6AI*hhtt zo%e#Q^Y!)ZX}%Mkz?g=iAtE6sp<8#>`alQwuO-zVOCaF4vwI(7y&1FhLERE zpFYe+=IP*BhLpCa8G$hezjDG%H~8)MHfFI{Y#yeU$WOn|$HynL{DFvtMQ-g&m9H;B zKn{wREt>p>^nZ6PbZ&Om2!DgIG@utH3>KqLPEM9cCVi!Ua^V;LeLJBlESJuoH#Rl> z!k(FtK}}6fh_WsdK%w3=jGGOXTD5->H!dpA&1FZS9w)VJY;3GJR&H$AzIoKz(V-wO zuge*^VU9Nh z!Vi9BnI9hyiHVUS)S*OnM+F6~-#0O#=Y@Vuc!!nsMP?V41iBDD@z$w6+!~mfnL*an zs(gKv+Y|ojQ!AASX!O<9RTLH(MlLQ^q9?UVx*dZWP(4}j`*a}k<43wsiOkGQ@PEq6 z;qvKMd_`=f{+RO6@_*ZBfgI59OG``p_3Kw$TpWP!ozUL_0hc^$gCZit1~i^OZ)a!(`%9Cun5Tklf?`mxyT4o$nQQkLyq?Mt`-#@IL`E30r|k<=Hd12{Bv zI9O&QC@9DiEuGpSPX7_Q2if#%c(}B*^b|@?L7`)|BQ;y;?tdZ|O(1UqkFQ9+)B4oG zfhz?CMSr6Jjm6qTqo>P$YvPlor6nRFB8a8z^z_76x~H9`=t+^?Ty^sxT0FKE`aFfV zAsolXbd%aJB?CWx`~ab2$2YV+;^8r1R-)M$p9l9S$CL$a>+5U9!W$`d`}S>3P0fox z&JYkZ)Yo4|^M9E3lF-tQbar<3^ia^y$PlMzWo6~&GGYO(?kJ>K#y1rij0{&TnwgzG z?{;{=nVaMEje5vdR_^ZAB6PD$ODWkO8})W~ck}Y{LPJAsd9#(G z!;zzBXlSUjQ)Iv(PlcRKG20v`$nUT;h-`Z| zJba2msDCupprGu_7i7yyxF(>JVRKAkD#pl2Tv9Tc%ZSurA@aUqo$l(v?m7_v@1`aq z{L?6r)Q;V~Jp(<)v9hw7U0zmZ z4yB@^a;`e6^CdGfGIDZq0wviHNSm77Zd@cTE`Pp0g`0<@H8+=$m6a72PtVA(t`z;Z zL>VL?M2cU%yr!mLDNmx@%=Gj#VQI9FS~esxbxsLCAK%*A+QH%BY_q3})J+n4ditHc zJ!E@`UoBPTJ6 zi+|xtZ*P3($csN_HupY!_>h&wLYqH92`wojmHUX-ij#fLTA&g_B8t z#-;6Irqj)_*LckjwgxOp%m&~muU@+*NeEAL>D;-?=e;iez$)y>?uRYWi;5xG6hE`r++qd z^F(6^BJhO8=t=w0Zyr73|2;Gm8;0SEN=UdV6wglTYi(l#uHSopv{of7xuwb2%xrUY zHF1cBloY&&QJxB>rPW!FGg5e+}S^wv6(q7Q9x#6ZB0+=+lCp;d-V*1VZzmOQu_m>7k?EMVM+Fq zcHf1ZJA)2GNMSABa4Tmbwd&dN z$Cj9fPu_hOJ<`ZId(X;hlY*`FwFc9bpLO;A4t@w+n$x|yFDu1D{!COfEHpGZHI)nv z4U0~sJPdpVxW8u;#2Jm-2zP$;=n+IR&LHU)@rfWyO-?3KmVJpF3H7=UttZ6H%vfV} zxW55~oI|Oqs$Tp7sDJwQZt4ZKlYxz(`1obVUm!)wridt6KI0b_Bql!2Rx;GrhfsmM zy+FbCAntox@U3T`laii1d2$W~7UJ4cd7bXP?MIBBwcn=K*^Ay8-CkT=v>h-g=rb*D zYdEKySGw5n@F}@py>8w`)#yhzk$DKlMaD(WAVc(ahG|}w(tnIM3r$SZ+(3?@fq@E- zV|QU;VNgiVwVI!vJM*?NgfU*g>Enghni?8X3}iP>+kQAE0Lc!}-P5GzM;FY*z?QSn zc?T^fr7`%o;$&Ki<>rSzfjnO_MhJ9(RZ{dP3H>KePP^eh*VMeB`R(NyTPEKe;kJ&B zjvnOo!ZX4|Dt})HPOk64O_OjNwy%>jGv_%KH`-;$oG-4#B7&_XLo@Fa#1_sKyxKy-Z^i=I11wA6dq}J;OH|l{J*3Hu> zwba2H-UH~Q7UtsOioi{cZh@yuJ%rpof8m0Qiwm^gIe*l7ug@oizyfK;=I8nMriohP zdS-1|nvk7i5)*Yw`~UgppSiiY1$%yJhU;Y|H}-Wb1KS#1^dedgXWEjup2{&mV*L}Q z4yKh9+=OY-~21-z8H*=l=9D4iHkO$(R%SvHD&djL({0W?lPU9*DYIMV@%=5HcOS?8^6tHl{q?^- zG;rVRTGv{?;XK#1uJiZ2xVU)d3F8NTx9!!iFn{!dwnV(7+qV7t`st~u+U#$)Sw4jV zHdInllCYh4)oo5m=yT&BgyP&e``u04HJyAO;_-zA21Z7Shec-r;vvE2q9PF>uz*Ve z;dRm&pU}45UN!SI1Z;fr_)9-O+1t0P;mVK>A-rp9_Ph`|mCMJ&lUY{g4lV@)1FQ)c z3x7J3#`gom@FQU$C-i|hefI2GcBKz;^71q#I^YOMG?77+fH^cYG`AwEzl!{|(QH== zd=p?MM+Aw}=d(fg6cji(IDj|-l;z-fQ#XD_OXudz??{p!Ix^7DEhr?SAAAfwIG4IN zMIv<+z*2w*!%!nHdiM!ngi^Ao>*g|LdVlQiCyj5f6hB}1JOJ!l!sZu}siyIL9S}fo zi;d8i*eC?{p;XLB_5C{s;xl;To?|8@#2Tuq6f`t5%|G#kRNdUf^<2r=;U^N$amMEhIEQ5V)>z%_9g2o^co zb#-;K8?*`SLc^AY*I(B>icp}WpctQ>6FIJ%3u^1wgAa z>0Y?p#qpsJbm0{bf6UnX`1k;k0jk70|N3YgqqWJMGbD^+SV!C=gxd4^o{kTFrh{*- z{P|P7kUs#SGb%b-xU&BI)X{hcH-Qs|$Hid^2DBm>mhuNjA4KL2Eby7O0u!Y-6#RE; z1ymO+YEV#M(E)!Gy$B!S27mHH!^Vh>#i%r|& z?hh9xTr2s~$bih?1rA`ZimGaX)rgY8VqcCaq#u)<=rUBVtvQ-cRYfI|Q|oj46K59} z51hXNy|}aeSf!6Q*?-HM%RhCjYJecs)GQ2_#*jTK7|=}DjsAezZar)8Z+j7``o*E* z@USoy6_sJvKlilL`kwB0XSnklH@@B6-1K8|cbq7WK=fWcRpZ%n)Z&ihilWMQCnvjA z4Ga)1JWauNj*?PcQ}bX-uzYJR!=u!BZMNy3*-%+Vr@ghF(|^o51sHKio_97z@+}AU zHbxGb4ED2&incd#2pkk}#eY>UE)%WwScl=PzNf)(JtTFgt2;kF-Z?O!NYIyW8KaRZ?zA$IqMCe; z@Q#_;%;q!XVTvrFoO(sM+1X+H!Q0go%0Fx|JFTKiuH%7%RNVSva81#r61(pT0aoRE z&owlDHbz{PmXazdDS@R~f$^7a{_?Nt{@LD+L=EM`*?($kYtb9LLF#TR4eV_aJ5LP_ z$B@z|(qJ4T^;lk8>o(6@9h#1FSq%2rO&H%t>OyvH;tpUzJDZ!A&%KGbs+s;EtMaM9 zz`{CG4g#Z4O}gu}TybjVOmT%K4rw?Y)yoCut($GspvYZ%j)tbtq9?tzwH4_PGcz+^ zzmCi6(SN54SCT=YVVq4=bO)AXXlUr@{9IpOU#@FgocNV1SL}IvPmqdby6vnV8^N)J z{)U^s=zWo$T~JVvLhAYAV4+b1dGy^{o@SWZLa^Zee(h3yNry#Usrn&@k$X!|8Yfo( z1LEKm|-EoW-0 zWq)-}oqSFfmS2C`Bn`0EK&UwZKXP-oH8f~tJ@NtU3WibUwgXXR4(=!@iB9$~@YV*( zU2JS=8N%A2qkVk5yx5cppiW5WAQ&}eMaA$2Blt2SAU#hy8A&0*T5d%HMiDUsDk%mu98Ao?2}3g zL={~w&D8FL?VfU(-olR`Z(csPvb78T_#@`ghxBwVAE~hiEawQ_TwO&(Mg6|bwt4LT zfw@p5I1P=E@M}f}(^!e*!B(4@#2qcI=oS-2dHJ#7&#Zd3g|5r@k!Ipnn}?EB?|hh1#3#7U#C`)9|;r3*?+O0XFLXVX1XLv~l) z;|mHlUhH^9ojOb-$q>qa_VfViH#IV{_5oro8_bxPsu%J0?GIr*fW^t3XMZ+sc7T89 zS@g`VITsHhp^>SnDPKQ7BA-gV;^$|j$~J!yNyIA?Y;BGQ8+hzJi!=tmQs?MafA4(; z&$`rQGD1_|X)>a$OhSqvzHNGcDbWtY&2jD8!hluzGtRy;Hy0o`*4E1*d3!5SkQB4e1y=R0m z0_Ulxgol?btgM(O$5; za5%6oH#fJaQqJ>u-vh7l@!0{HTPpcO!hAbLO+#J%tQ0Z+iGtCEdQ?!zZo0K#*g3VJ zpvNRsMM$-3=)7^1}aTO z(ra1shH|NNV_25St$(W@we3nGZloH0>(;G5(`^Uaa~TjA4|b;|!G5dw^)HZFU!nW} z_K0rYJ0v|l9kK?jU{Dg13>$WZ13(5>#LWx8fB*hCkWseHq1o!z1ivQPj8naQZgO(c zz8I1Lrn z&I?%X^5x6y?0!2VE+-)aLVk4H-_ws7G?D~>xY7TH@@n-Xo9EBh zA;}L74pLpyR)4#HKQuD3HhUg`L)0}L0o`#V$Atv{z~}5aU1t)bkdCak_esX!jUUpa z#wI2~pNY6V$IAZTr>3L;$t_v2gM`>J`gw$QQ~Ma+t|U*;&u?0gnl^;Cz5wk6g5KTT zO&z=FawxyKyP{asxX3@(#9dx89wh4PLj5mR6_m(&Fn_;W*XQEm(iY7(4J$`CU=B$R z0-sZ$pCP{2%k*L)`u~P|5{W9pjcWq6D3zk>+Ei2;Dk{8el&vv>Xwi2DM)n2R^7O<- zVlfllvOLQFqEBi%I-Lg(gho^9l*njkoF?i+uYU{SdgHPn>bN{QSZF7E1RI5v@7-&0 z6g-AE%6~RFJNrH~G|RBcx2sEylr%V$VtO>2hS(Q?BxDExkPSxJXV-5dFKYFQ-o_IY z9t@%}fcOMRFCrp>Hn4Wft`3<2fZ3_trN$n4t>-p`WH1xgvX*$O$ z&)`3cMRVymOyv(GMbIezOhivzJwhhoI&Gk4o;>v>Dt~nj^}BZiQd8&ZU04vvw77Hg z=Jz`r_fxx-o;0jkRCxYHJ!A^V4E`5LC{8ShO8r8Alz{t%9hVsGEPE{s8lM$cg}F?ZP#RT@ff(0>LJ`h3pM7r1cYg?^K!f!m!CLQ+ymkNuLz z;_S+CU-l%kD=Vdxm6hxMUM`%D)5$aMw%)NbEg@!dU9QMmj>7wR#8jTNvlti{gvuGw zS+RuH_w+d6e$@bOoSU1Y`!tD`XjHqWqeBHEEEu5Bw0GOIAV2?%eUXh>@8lJ3Zhwb; zdBExW;J;#ftDUrgCdUU0haT{EqnM zs27S)8y%PegXijan!mucVUakSf`1&O-93#_eN7Dwji5}@Lz78r=LsPDH9gHv<$r34 z3@DxuXKl(q|MUWyfsq6=h??YSpJqnY**x}lVL*V_pHDSMAKP(oa9A2F%*oBog%v=O z@s^gkC11aq*99>EOb~Kfxwx0M1!+G{*v@3UHc%kO68_A~%iGyl8Yy~~s(+n^cFN+! zT?mPYW@wPsSM0E~2vN5<7J7pGGU9Qtcixxg zhTH}3<`2T1BO@L+{4Sp(Ow$l`bdlq1D%+k-g@hB%c5i#Riu5$|^J2Hj#)yW)7A&?x za3%tPI4Xp6$DisF8(Z0*R)10Nkd>7ctsIjy-NI~0qqAKpaLFV}^jH~?F0fjcsc6$? z6F%lIU%zsQii!#d2uMnnmzC`UU_{l%t4Jl$Q_8W{wVC92E?q2-gaq0(L?$}j5+mrb z@9OMPl$2xwJ_P+iU_dHRgYJ8htgD%iFFqgr{?cWsG|ImkNm)ln%YPF@^BOBCDmIC4 z40itf8TtNwe^=LS0>ClK=H})Q>v}Z74OzXvY3I%2>X$Nb+^lr zuU|)6+(I_LJ_y@6is{1~g=h*sn^j{BjtUQFjZpYMKgexbl&*6<&m~vi(&Dz>XUbjN zdiH65uG!LXDXfXO_2_qi3u?N$B@pi+Sc3s(V6pFvwP+Q89BV#9C-Af{dooaP7$}OX zM0s|$ZEXOJPJjN>tnR2>{px zX?DF!RT)@=$M#He!JuuE^>oMF8e(Peb)@&S+Nr$MpQm_%Y`!N9*_ZVv$T&@`JFg% z;xseTd*a|g)%E5w%F!X!p-tC)AUXgI5dj38hfvRn)+c$|2JTyvK<>|MveLVDpJ@H< z_y$1MJtTmhJJYRcVEOdv{OqhVjNFXZ+Q{hQf>98FqS@IZ>oL!}Y{gx1C8(sjySqD~ zkJP8XtAFe24)&Hj$`#nNwbPJ@&Yckk(hrPfB}1Yd2P8$Fn?dXapUdI*_$3V3Kz*=-sBPLxqtZ_ z$2mghS^(VP4PAqS^yK8gjA(pM6A>kpKRfShqpRy3^s?TFH$_chsj1N@+n;MVv1e{) zd%Lo-l7JZq+M_INLPA1m=@2l3{V&-0ODyOXljGgr`w}J)SMl=les*6?HQ1X~X~RM| zt$*>SR=h~g&7Hw28+7r~C8Ubp5O#?-I>7K9+AIKGZQtfYL`^OQEKZFhF(C+kMY0A= zFSM2&0AVRaDseF}SU9(hp#rBrQ{a9{No+-GwU2|v1um?gU(^*A7WNLw%*+G;u)J(t zl-6xdM@I*Y5+ISjl$?r6Sb6zD*5f*^8GmQ)6u(R44FNQK5ag44=2BBr$H&LP{hS~e z!FodkF*Y(Hc8GLYEc7#c2mBG{0plI{{`zD5J?Tl2ma|RSFJHby;?Dr&nkn^X)kkcb zu6dJzTW@Y|hJ~Tq1RU?<>q{=x(b>tZiyg)CRq-G@t>R%-6Vi~_U6xJ*tZI%p%73AH z8W?B&4k>nwR{?Mn>$mWRQqk?V?Wrx%4MnA;r4TiNLj?JN{ojPCcW~HfjJS#lsOxY> zE-o&@IHwbWC1z)573AbTsuDUZ4etee?2h+lJziT|qokxnTME8n>*fZPFyMLk#=>En zn-g{0UIoUlzYtDx+JgN!-uJwtmwyAa(tg5iL?}Su(c*n`lq9Fe#%vY`g}H9k81cTo z%~EuY{54jX?|22Nfh%!UCZ~?7shw*XDXU4c5Iwny`6;!^4YXW48)`L7rv?@9EfMmBzz6!Es{VmMX_luQeRmxI)ZKWA(%jrt$bWgkuV0&CFzyR^ zJrEMIz!lIFMhAy-@Q_rEw9n%_XxGig1_zEIBl-rj)R!|&UA}n-j0SBhUKvl)G#!Laai2E)?uackkUR{USM|Si{p?8%W1b+k##@ zk+-mzOHoY*)^?SQ07zS|?PMbW=QNEN7+-AcJp!jOAL_RXiGK}7NMab=KtX!jG|p*i z$YG=uFw7|?(MpClSyBnNrCzm|3;;|A++uM5e#M^P?;GbSP~`M^z^SC5Ku&NHJS~B= z>L2jo*;#Y0mgbroAOEtuY~lX?O(C*AK0d~#sC8ytS+p)5!sPVn>grx3m$$dKcRy@k ztq|2_ND@l++J6>I3Iqkr@Xu ziaT#EkFBoSOUVIiX-|+PWe}No_g-k~i^_~5cj+qNp$^H)(2VycK9I#Xflek|0wQal zP+UAPFyMlASp=<;$~O;|{UnJcV(sv&@iY6L-r!{V;CO|Mpfz4HJ}L_0v&s9DG4Kz- z?+xMX2VjfD7;r?S^1V9K2^J|NbgdJow-|CiY20>)R0*3mu%H;l zhJXv2aR~LrDt&fjQ!Dnb- zVQsOZ)RdHW6vYl3EiElQQQ;6ilZ*O*Bwl>mL0_Bu)Xaa3{1Vp5#l=qeoc#`}AcKVW z5*4FNOiYrJlS$*EosM?#_|e;*iq1CAo-r7omqB|=VC;h;^a_dDSy`bZ)Lq@(S0Wmj zgMa4yo_G&EaL<-0x@+1s~uhX;8Q zRpdqOs(jB-?}f&OhyQ629Qkcu1YyL}(-S6Pa&j_FuUI3aXJBC+?X3t3I;|g{{S8T}dQ@<0(5~&Q)X9J2x6qN|36(ZVGBPq++9Gr?U(Us4 zN19ap#tLtzm!3IkU0vPW+V(Y_{O0%k{sP}ka@-E~Hcqfye|hs^o_3veyZ?Yyx!&b- z9j460PThkvX8P$;pGJKvpR5l-a_8XSP*G745f%0F@`7Xzq!`Iw+89K88TWN`bU=s) z_ac9dc5L7Y7{Z`MlG)f;UHu^8Cc=D?larI5U!9W*Kt!SLaDTtZ%4->=rilOvhA7$( z);b0T85*fp#R~#bNCUb0HAOJJFt2W^jGXebXU|&N+L*RJ*M88?aG+PD_OAhFp}t0M zD43l0f$ULE-_LZtfe|G5$~QscD&Ya-C8K|IUE9#mP(_8DA)V=Jz0ygD68_1_(_iGn zXXoaU@5MZqKUG^@ZS8Q?%hS`@*}3ds-$m+Ge7u3Z{pu6*kOm|0n8WuMF0!*zAVi~- zJdkG*HG~1)7%%c{_7eXUF0MrwB_zI)5d%)D9L}rf2q$f~0F^>=Nmh>6S5f(&4~TzU ziVdP*VmhcK;{K*zy4|TPSz1CH$!)L?@c9%z{?x=o{p3n0`@o>{TpCdBl#~?CCW-Ce z3Bc!a1{UA~Kt2VUvdzrQl!1i*R*r?itE&U{FwT0w!pbTM0L9mEAA+<5u9^aJ!>fRR zFUob=nGY*E5*5)Fn;(<=rb^pdpJ{(Q5)MV2JGgGA#me1|CN*78g_MstJTw%^3xoT2 zhN0aFz2eAPe0oySV8rF(#I|Cr$_l&IiKp{=^kdL#AB-zs3;9Sk2Q)Y$U{oTpixHao zxQz{i5=UH*frmH{9q{`OMeZR0fC%~&X0}A52OE%bJ;^?+q@X(RtE;Qw?8<*6N+ql7 z>+7ql6FB$twxf~cG#}DLR%W=~N6H8OYc5(^Gn11wLu(%+V49ef1>di#nT9nO1qGAO z%*=qR^PeXUs*=t9VbfM|N%s>)e~I&&`TKkQBO~zuF2Us-ot(}T@KJBe$jZixIoT4& zygVd_!mI1McN`v{_Z^l>0&jo1b?exMEnxg0MVC+}YUcAL3zsEO8_v2YBI11Wf}oK& zqz&E0M__0}AH9U_W11R1onY-6oguS1Z1ygd-lwGnY;R08M_28gWO@l~V{wsDx9my# zXJGK{mLlEyi7M^!7trqWsrlw{oW3h6xZ&EKWpua)%k41Og1cWcD6oH#8Qa_Y0JDR( zlV8a5L*Ik68(m1%Q*s{{Z13W2mzbPPO-0pV$+gDC%iDqLtBW#yD}ER8#2{`Yh6~i} zg-b)4bAe$Me$jO!gZ6!o3G_&F;;i;B>^)->la2^nN_F*Zt~jQ{m9*YjDCm6Qx3aeO zO!vJf8!0K~69v*_cNl-P@q2ta%5mnw11&A#MsInpvr)VD@^{}P8Dj?WTdJxax4h@C z5+~SEQ8g;`)?o}b6^KCydV0Dp!a5>gFyBH}O-&8RcE!Vw_c6xClK?kLN=pmZ)PU~X zWmA=ts|Uv_Z1w?M@$TI_=HO>iF-t{rTq4Tz${yR{8mY0uc2j=@qM}Ou^aImV%;?$w z=&7E5uUp4zo1U#&jS+U|EN%$0q_w{^lcbQi^70hpJ5dLWwY9a9QtSTS z&S|6!KpV)$#f1T)?A6K31nafE2-(g+y8+-J_mw-(tt)@8Rq;R$KxL(e9mmhSzP++F z9q;0d8VP0~1Zy<(?b|mOpiy7bW3h%+zQv10{>EDVH7r#A>`EUVXlrjn6c~aJSe4*p zAWZe=S^RbUWlYS#YD@uBnvjEu&@x^PeVgPpQz&9ZI=5S5dZ`jgo#FQE31GUvgz^b1yD( zWo&a$O927^02BZK00;mvhJ{q*s3&Yb5dZ)sRsaAK0000000001000000OV?yA3p&h vAF+9iRRUqp-2$=z02a;w02%-Q00000000000000}mtQ{tEe4G)0RR91{>kk# diff --git a/NLA_GUI_exported.m b/NLA_GUI_exported.m index ed5e40ee..c14d1ec2 100644 --- a/NLA_GUI_exported.m +++ b/NLA_GUI_exported.m @@ -128,7 +128,7 @@ function startupFcn(app) netLevelOptions = genTests('net.test'); netLevelNames = string; for i = 1:numel(netLevelOptions) - netLevelNames(i) = netLevelOptions{i}.display_name; + netLevelNames(i) = netLevelOptions{i}.name; end app.NetTestSelector.Items = netLevelNames; app.NetTestSelector.ItemsData = netLevelOptions;