diff --git a/.gitignore b/.gitignore
index 1e71cec..a1653e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,16 @@
-# Benchmarking data
-# benchmarking/data/citrus_output/
-# benchmarking/data/citrus_phenos/
-# benchmarking/data/splits/
-# benchmarking/data/ukb/*
-# !benchmarking/data/ukb/
-# !benchmarking/data/ukb/*.py
-
-# benchmarking/prs/plink_output/*
-# !benchmarking/prs/plink_output/
-# !benchmarking/prs/plink_output/*.py
-# benchmarking/prs/prsice2_output/
+# Benchmarking
benchmarking*/
+# Large plots
+paper/pheno_sim/sim_configs/complex_pheno_1.png
+paper/pheno_sim/sim_configs/complex_pheno_1_noise.png
+paper/pheno_sim/sim_configs/complex_pheno_4.png
+
+# Paper eval
+paper/data/
+paper/output/
+paper/pheno_sim/citrus*/
+
# Tools
benchmarking/PRSice2/
benchmarking/QCTOOL/
diff --git a/paper/pheno_sim/citrus_out_to_plink_fmt.py b/paper/pheno_sim/citrus_out_to_plink_fmt.py
new file mode 100644
index 0000000..1fb6704
--- /dev/null
+++ b/paper/pheno_sim/citrus_out_to_plink_fmt.py
@@ -0,0 +1,58 @@
+"""Convert CITRUS output CSV to plink phenotype file format.
+
+Example output:
+
+ #IID gene1 phenotype
+ 1110 23.31 22.22
+ 2202 34.12 18.23
+ ...
+
+"""
+
+import os
+
+import pandas as pd
+
+# # Write a function to replace main
+# def citrus_out_to_plink_phenotype(
+# sample_id_col=''
+# )
+
+import argparse
+
+
+if __name__ == "__main__":
+
+ # args
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument("desc")
+
+ args = parser.parse_args()
+
+ sample_id_col = 'sample_id'
+
+ pheno_cols = ['phenotype']
+
+ csv_path = f'citrus_output/{args.desc}.csv'
+ output_path = f'citrus_phenos/{args.desc}.pheno'
+
+ # function
+ df = pd.read_csv(
+ csv_path,
+ index_col=False
+ )
+
+ df = df[[sample_id_col] + pheno_cols]
+
+ # Split FID and IID
+ df['FID'] = df[sample_id_col].str.split('_').map(lambda x: x[0])
+ df['IID'] = df[sample_id_col].str.split('_').map(lambda x: x[1])
+
+ df[['FID', 'IID'] + pheno_cols].to_csv(
+ output_path,
+ sep='\t',
+ index=False
+ )
+
+
diff --git a/paper/pheno_sim/est_heritability.py b/paper/pheno_sim/est_heritability.py
new file mode 100644
index 0000000..3616081
--- /dev/null
+++ b/paper/pheno_sim/est_heritability.py
@@ -0,0 +1,45 @@
+"""Estimate heritability of simulated CITRUS phenotypes."""
+
+import json
+import os
+
+from pheno_sim import PhenoSimulation
+from pheno_sim.heritability_estimation import broad_sense_heritability
+
+
+if __name__ == '__main__':
+
+ sim_name = 'gepsi_lin_add_hFULL_hFULL'
+ config_dir = 'citrus_output'
+
+ print(sim_name)
+
+ # Load simulation config
+ with open(os.path.join(config_dir, sim_name + '_config.json'), 'r') as f:
+ sim_config = json.load(f)
+
+ # Create simulation
+ sim = PhenoSimulation(sim_config)
+
+ # Load genotype data
+ input_vals = sim.run_input_step()
+
+ # Compute heritability
+ confidence_level = 95
+
+ heritability = broad_sense_heritability(
+ sim,
+ input_vals=input_vals,
+ n_samples=0.1,
+ confidence_level=confidence_level/100,
+ )
+
+ # Save results
+ with open(
+ os.path.join(
+ config_dir, sim_name + f'_heritability_ci{confidence_level}.json'
+ ),
+ 'w'
+ ) as f:
+ json.dump(heritability, f, indent=4)
+
diff --git a/paper/pheno_sim/gen_lin_add_sim.py b/paper/pheno_sim/gen_lin_add_sim.py
new file mode 100644
index 0000000..cdc64a4
--- /dev/null
+++ b/paper/pheno_sim/gen_lin_add_sim.py
@@ -0,0 +1,121 @@
+"""Generate linear additive phenotype CITRUS simulation configs."""
+
+import copy
+import json
+
+import numpy as np
+import pandas as pd
+
+
+CONFIG_TEMPLATE = {
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": []
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": True
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ }
+ ]
+}
+
+
+class NpEncoder(json.JSONEncoder):
+ def default(self, obj):
+ if isinstance(obj, np.integer):
+ return int(obj)
+ if isinstance(obj, np.floating):
+ return float(obj)
+ if isinstance(obj, np.ndarray):
+ return obj.tolist()
+ return super(NpEncoder, self).default(obj)
+
+
+def create_config(pos, heritability):
+ sim_config = copy.deepcopy(CONFIG_TEMPLATE)
+
+ sim_config['input'][0]['input_nodes'][0]['pos'] = list(pos)
+ sim_config['simulation_steps'][-1]['heritability'] = float(heritability)
+
+ return sim_config
+
+
+if __name__ == '__main__':
+
+ # Options
+ n_vars = [10, 100, 1000]
+ herit_vals = [0.05, 0.1, 0.2, 0.4, 0.8]
+ version_num = 1
+
+ config_save_dir = 'sim_configs'
+
+ # Load variant info
+ var_info_path = '../data/ukb/chr19_var_info.csv'
+ var_df = pd.read_csv(
+ var_info_path
+ )
+
+ # Add position column
+ var_df['pos'] = var_df.locus.apply(lambda x: int(x.split(':')[1]))
+
+ for n_var in n_vars:
+ for herit in herit_vals:
+ rng = np.random.default_rng(seed=147*version_num)
+
+ # Select loci
+ pos = rng.choice(
+ var_df.pos,
+ size=n_var,
+ replace=False
+ )
+
+ sim_config = create_config(list(pos), herit)
+
+ # Save config
+ h_str = str(herit).split('.')[1]
+ config_fname = f'lin_add_nvar{n_var}_h{h_str}_v{version_num}'
+
+ with open(f'{config_save_dir}/{config_fname}.json', 'w') as f:
+ json.dump(sim_config, f, indent=4, cls=NpEncoder)
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/complex_pheno_1.json b/paper/pheno_sim/sim_configs/complex_pheno_1.json
new file mode 100644
index 0000000..03d10b8
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/complex_pheno_1.json
@@ -0,0 +1,407 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "ENSG00000267443_transcribed",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 375779,
+ 376008,
+ 376382,
+ 376585,
+ 376653,
+ 378566,
+ 378597,
+ 379164,
+ 379227,
+ 384724,
+ 388463,
+ 390319,
+ 391125,
+ 392840,
+ 396396,
+ 398636,
+ 399132
+ ]
+ },
+ {
+ "alias": "ENSG00000267443_promoter",
+ "type": "SNP",
+ "chr": "19",
+ "pos": 399170
+ },
+ {
+ "alias": "CYP4F12_common",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 15797532,
+ 15800331,
+ 15807305,
+ 15807884,
+ 15807984,
+ 15830583,
+ 15839081,
+ 15839459
+ ]
+ },
+ {
+ "alias": "CYP4F12_rare",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 15807491,
+ 15782397,
+ 15850632,
+ 15839365,
+ 15887706
+ ]
+ },
+ {
+ "alias": "EID2B_common",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 39994711,
+ 40000638,
+ 40009683,
+ 40008118,
+ 40047633,
+ 40093111,
+ 40116048,
+ 40023308,
+ 40163241
+ ]
+ },
+ {
+ "alias": "EID2B_deleterious",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 39991203,
+ 39980412,
+ 40058427,
+ 40075510,
+ 39996347,
+ 40081651,
+ 40092547
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "ENSG00000267443_betas",
+ "input_match_size": "ENSG00000267443_transcribed",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "ENSG00000267443_effects",
+ "input_aliases": [
+ "ENSG00000267443_betas",
+ "ENSG00000267443_transcribed"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "ENSG00000267443_effect_sum",
+ "input_alias": "ENSG00000267443_effects"
+ },
+ {
+ "type": "StandardScaler",
+ "alias": "ENSG00000267443_scaled",
+ "input_alias": "ENSG00000267443_effect_sum"
+ },
+ {
+ "type": "Sigmoid",
+ "alias": "ENSG00000267443_damped_effect",
+ "input_alias": "ENSG00000267443_scaled"
+ },
+ {
+ "type": "Distribution",
+ "alias": "ENSG00000267443_promoter_multiplier",
+ "input_match_size": "ENSG00000267443_damped_effect",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.8,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Product",
+ "alias": "ENSG00000267443_effect_with_promoter",
+ "input_aliases": [
+ "ENSG00000267443_damped_effect",
+ "ENSG00000267443_promoter_multiplier"
+ ]
+ },
+ {
+ "type": "IfElse",
+ "alias": "ENSG00000267443_haplotype_values",
+ "input_cond_vals": "ENSG00000267443_promoter",
+ "input_if_vals": "ENSG00000267443_effect_with_promoter",
+ "input_else_vals": "ENSG00000267443_damped_effect"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "ENSG00000267443",
+ "input_alias": "ENSG00000267443_haplotype_values",
+ "mean_type": "geometric"
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "CYP4F12_common_betas",
+ "input_match_size": "CYP4F12_common",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 0.2
+ },
+ "by_feat": true
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "CYP4F12_rare_betas",
+ "input_match_size": "CYP4F12_rare",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 0.4
+ },
+ "by_feat": true
+ },
+ {
+ "type": "ReLU",
+ "alias": "CYP4F12_rare_betas_pos",
+ "input_alias": "CYP4F12_rare_betas",
+ "neg_slope": -1.0
+ },
+ {
+ "type": "Product",
+ "alias": "CYP4F12_common_effects",
+ "input_aliases": [
+ "CYP4F12_common_betas",
+ "CYP4F12_common"
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "CYP4F12_rare_effects",
+ "input_aliases": [
+ "CYP4F12_rare_betas_pos",
+ "CYP4F12_rare"
+ ]
+ },
+ {
+ "type": "Concatenate",
+ "alias": "CYP4F12_effects",
+ "input_aliases": [
+ "CYP4F12_common_effects",
+ "CYP4F12_rare_effects"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "CYP4F12_hap_val",
+ "input_alias": "CYP4F12_effects"
+ },
+ {
+ "type": "Tanh",
+ "alias": "CYP4F12_hap_val_damped",
+ "input_alias": "CYP4F12_hap_val"
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "CYP4F12_max",
+ "input_alias": "CYP4F12_hap_val_damped"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "CYP4F12_mean",
+ "input_alias": "CYP4F12_hap_val_damped"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "CYP4F12_comb_vals",
+ "input_aliases": [
+ "CYP4F12_max",
+ "CYP4F12_mean"
+ ]
+ },
+ {
+ "type": "Constant",
+ "alias": "CYP4F12_comb_weights",
+ "constant": [
+ 0.8,
+ 0.2
+ ],
+ "input_match_size": "CYP4F12_comb_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "CYP4F12_comb_vals_weighted",
+ "input_aliases": [
+ "CYP4F12_comb_vals",
+ "CYP4F12_comb_weights"
+ ]
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "CYP4F12",
+ "input_alias": "CYP4F12_comb_vals_weighted"
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "EID2B_common_betas",
+ "input_match_size": "EID2B_common",
+ "dist_name": "uniform",
+ "dist_kwargs": {
+ "low": 0.01,
+ "high": 0.25
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "EID2B_common_effects",
+ "input_aliases": [
+ "EID2B_common_betas",
+ "EID2B_common"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "EID2B_common_effects_sum",
+ "input_alias": "EID2B_common_effects"
+ },
+ {
+ "type": "GaussianNoise",
+ "alias": "EID2B_common_effects_sum_w_noise_unbounded",
+ "input_alias": "EID2B_common_effects_sum",
+ "noise_std": 0.025
+ },
+ {
+ "type": "Clip",
+ "alias": "EID2B_common_effects_sum_w_noise",
+ "input_alias": "EID2B_common_effects_sum_w_noise_unbounded",
+ "min_val": 0
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "EID2B_deleterious_multiplier",
+ "input_match_size": "EID2B_deleterious",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.3,
+ "scale": 0.05
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "constant_1",
+ "input_match_size": "EID2B_deleterious",
+ "constant": 1.0
+ },
+ {
+ "type": "IfElse",
+ "alias": "EID2B_multiplier_by_variant",
+ "input_cond_vals": "EID2B_deleterious",
+ "input_if_vals": "EID2B_deleterious_multiplier",
+ "input_else_vals": "constant_1"
+ },
+ {
+ "type": "MinReduce",
+ "alias": "EID2B_deleterious_multiplier",
+ "input_alias": "EID2B_multiplier_by_variant"
+ },
+ {
+ "type": "Product",
+ "alias": "EID2B_hap_val",
+ "input_aliases": [
+ "EID2B_deleterious_multiplier",
+ "EID2B_common_effects_sum_w_noise"
+ ]
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "EID2B",
+ "input_alias": "EID2B_hap_val"
+ },
+ {
+ "type": "ReLU",
+ "alias": "ReLU_EID2B",
+ "input_alias": "EID2B",
+ "threshold": 0.2,
+ "neg_slope": 1.0,
+ "pos_slope": 1.2
+ },
+ {
+ "type": "Product",
+ "alias": "EID2B_ENSG00000267443_interaction",
+ "input_aliases": [
+ "ReLU_EID2B",
+ "ENSG00000267443"
+ ]
+ },
+ {
+ "type": "StandardScaler",
+ "alias": "zscore_ENSG00000267443",
+ "input_alias": "ENSG00000267443"
+ },
+ {
+ "type": "StandardScaler",
+ "alias": "zscore_CYP4F12",
+ "input_alias": "CYP4F12"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "concat_zscores",
+ "input_aliases": [
+ "zscore_ENSG00000267443",
+ "zscore_CYP4F12"
+ ]
+ },
+ {
+ "type": "Softmax",
+ "alias": "softmax_zscores",
+ "input_alias": "concat_zscores"
+ },
+ {
+ "type": "MinReduce",
+ "alias": "min_softmax",
+ "input_alias": "softmax_zscores"
+ },
+ {
+ "type": "Product",
+ "alias": "EID2B_relative_abundance_interaction",
+ "input_aliases": [
+ "min_softmax",
+ "EID2B"
+ ]
+ },
+ {
+ "type": "Sum",
+ "alias": "phenotype",
+ "input_aliases": [
+ "CYP4F12",
+ "EID2B_ENSG00000267443_interaction",
+ "EID2B_relative_abundance_interaction"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/complex_pheno_1_noise.json b/paper/pheno_sim/sim_configs/complex_pheno_1_noise.json
new file mode 100644
index 0000000..fb5c8ec
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/complex_pheno_1_noise.json
@@ -0,0 +1,431 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "ENSG00000267443_transcribed",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 375779,
+ 376008,
+ 376382,
+ 376585,
+ 376653,
+ 378566,
+ 378597,
+ 379164,
+ 379227,
+ 384724,
+ 388463,
+ 390319,
+ 391125,
+ 392840,
+ 396396,
+ 398636,
+ 399132
+ ]
+ },
+ {
+ "alias": "ENSG00000267443_promoter",
+ "type": "SNP",
+ "chr": "19",
+ "pos": 399170
+ },
+ {
+ "alias": "CYP4F12_common",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 15797532,
+ 15800331,
+ 15807305,
+ 15807884,
+ 15807984,
+ 15830583,
+ 15839081,
+ 15839459
+ ]
+ },
+ {
+ "alias": "CYP4F12_rare",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 15807491,
+ 15782397,
+ 15850632,
+ 15839365,
+ 15887706
+ ]
+ },
+ {
+ "alias": "EID2B_common",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 39994711,
+ 40000638,
+ 40009683,
+ 40008118,
+ 40047633,
+ 40093111,
+ 40116048,
+ 40023308,
+ 40163241
+ ]
+ },
+ {
+ "alias": "EID2B_deleterious",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 39991203,
+ 39980412,
+ 40058427,
+ 40075510,
+ 39996347,
+ 40081651,
+ 40092547
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "ENSG00000267443_betas",
+ "input_match_size": "ENSG00000267443_transcribed",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "ENSG00000267443_effects",
+ "input_aliases": [
+ "ENSG00000267443_betas",
+ "ENSG00000267443_transcribed"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "ENSG00000267443_effect_sum",
+ "input_alias": "ENSG00000267443_effects"
+ },
+ {
+ "type": "StandardScaler",
+ "alias": "ENSG00000267443_scaled",
+ "input_alias": "ENSG00000267443_effect_sum"
+ },
+ {
+ "type": "Sigmoid",
+ "alias": "ENSG00000267443_damped_effect",
+ "input_alias": "ENSG00000267443_scaled"
+ },
+ {
+ "type": "Distribution",
+ "alias": "ENSG00000267443_promoter_multiplier",
+ "input_match_size": "ENSG00000267443_damped_effect",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.8,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Product",
+ "alias": "ENSG00000267443_effect_with_promoter",
+ "input_aliases": [
+ "ENSG00000267443_damped_effect",
+ "ENSG00000267443_promoter_multiplier"
+ ]
+ },
+ {
+ "type": "IfElse",
+ "alias": "ENSG00000267443_haplotype_values",
+ "input_cond_vals": "ENSG00000267443_promoter",
+ "input_if_vals": "ENSG00000267443_effect_with_promoter",
+ "input_else_vals": "ENSG00000267443_damped_effect"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "ENSG00000267443_no_noise",
+ "input_alias": "ENSG00000267443_haplotype_values",
+ "mean_type": "geometric"
+ },
+ {
+ "type": "Heritability",
+ "alias": "ENSG00000267443",
+ "input_alias": "ENSG00000267443_no_noise",
+ "heritability": 0.8
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "CYP4F12_common_betas",
+ "input_match_size": "CYP4F12_common",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 0.2
+ },
+ "by_feat": true
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "CYP4F12_rare_betas",
+ "input_match_size": "CYP4F12_rare",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 0.4
+ },
+ "by_feat": true
+ },
+ {
+ "type": "ReLU",
+ "alias": "CYP4F12_rare_betas_pos",
+ "input_alias": "CYP4F12_rare_betas",
+ "neg_slope": -1.0
+ },
+ {
+ "type": "Product",
+ "alias": "CYP4F12_common_effects",
+ "input_aliases": [
+ "CYP4F12_common_betas",
+ "CYP4F12_common"
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "CYP4F12_rare_effects",
+ "input_aliases": [
+ "CYP4F12_rare_betas_pos",
+ "CYP4F12_rare"
+ ]
+ },
+ {
+ "type": "Concatenate",
+ "alias": "CYP4F12_effects",
+ "input_aliases": [
+ "CYP4F12_common_effects",
+ "CYP4F12_rare_effects"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "CYP4F12_hap_val",
+ "input_alias": "CYP4F12_effects"
+ },
+ {
+ "type": "Tanh",
+ "alias": "CYP4F12_hap_val_damped",
+ "input_alias": "CYP4F12_hap_val"
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "CYP4F12_max",
+ "input_alias": "CYP4F12_hap_val_damped"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "CYP4F12_mean",
+ "input_alias": "CYP4F12_hap_val_damped"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "CYP4F12_comb_vals",
+ "input_aliases": [
+ "CYP4F12_max",
+ "CYP4F12_mean"
+ ]
+ },
+ {
+ "type": "Constant",
+ "alias": "CYP4F12_comb_weights",
+ "constant": [
+ 0.8,
+ 0.2
+ ],
+ "input_match_size": "CYP4F12_comb_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "CYP4F12_comb_vals_weighted",
+ "input_aliases": [
+ "CYP4F12_comb_vals",
+ "CYP4F12_comb_weights"
+ ]
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "CYP4F12_no_noise",
+ "input_alias": "CYP4F12_comb_vals_weighted"
+ },
+ {
+ "type": "Heritability",
+ "alias": "CYP4F12",
+ "input_alias": "CYP4F12_no_noise",
+ "heritability": 0.8
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "EID2B_common_betas",
+ "input_match_size": "EID2B_common",
+ "dist_name": "uniform",
+ "dist_kwargs": {
+ "low": 0.01,
+ "high": 0.25
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "EID2B_common_effects",
+ "input_aliases": [
+ "EID2B_common_betas",
+ "EID2B_common"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "EID2B_common_effects_sum",
+ "input_alias": "EID2B_common_effects"
+ },
+ {
+ "type": "GaussianNoise",
+ "alias": "EID2B_common_effects_sum_w_noise_unbounded",
+ "input_alias": "EID2B_common_effects_sum",
+ "noise_std": 0.025
+ },
+ {
+ "type": "Clip",
+ "alias": "EID2B_common_effects_sum_w_noise",
+ "input_alias": "EID2B_common_effects_sum_w_noise_unbounded",
+ "min_val": 0
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "EID2B_deleterious_multiplier",
+ "input_match_size": "EID2B_deleterious",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.3,
+ "scale": 0.05
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "constant_1",
+ "input_match_size": "EID2B_deleterious",
+ "constant": 1.0
+ },
+ {
+ "type": "IfElse",
+ "alias": "EID2B_multiplier_by_variant",
+ "input_cond_vals": "EID2B_deleterious",
+ "input_if_vals": "EID2B_deleterious_multiplier",
+ "input_else_vals": "constant_1"
+ },
+ {
+ "type": "MinReduce",
+ "alias": "EID2B_deleterious_multiplier_val",
+ "input_alias": "EID2B_multiplier_by_variant"
+ },
+ {
+ "type": "Product",
+ "alias": "EID2B_hap_val",
+ "input_aliases": [
+ "EID2B_deleterious_multiplier_val",
+ "EID2B_common_effects_sum_w_noise"
+ ]
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "EID2B_no_noise",
+ "input_alias": "EID2B_hap_val"
+ },
+ {
+ "type": "Heritability",
+ "alias": "EID2B",
+ "input_alias": "EID2B_no_noise",
+ "heritability": 0.8
+ },
+ {
+ "type": "ReLU",
+ "alias": "ReLU_EID2B",
+ "input_alias": "EID2B",
+ "threshold": 0.2,
+ "neg_slope": 1.0,
+ "pos_slope": 1.2
+ },
+ {
+ "type": "Product",
+ "alias": "EID2B_ENSG00000267443_interaction",
+ "input_aliases": [
+ "ReLU_EID2B",
+ "ENSG00000267443"
+ ]
+ },
+ {
+ "type": "StandardScaler",
+ "alias": "zscore_ENSG00000267443",
+ "input_alias": "ENSG00000267443"
+ },
+ {
+ "type": "StandardScaler",
+ "alias": "zscore_CYP4F12",
+ "input_alias": "CYP4F12"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "concat_zscores",
+ "input_aliases": [
+ "zscore_ENSG00000267443",
+ "zscore_CYP4F12"
+ ]
+ },
+ {
+ "type": "Softmax",
+ "alias": "softmax_zscores",
+ "input_alias": "concat_zscores"
+ },
+ {
+ "type": "MinReduce",
+ "alias": "min_softmax",
+ "input_alias": "softmax_zscores"
+ },
+ {
+ "type": "Product",
+ "alias": "EID2B_relative_abundance_interaction",
+ "input_aliases": [
+ "min_softmax",
+ "EID2B"
+ ]
+ },
+ {
+ "type": "Sum",
+ "alias": "no_noise_phenotype",
+ "input_aliases": [
+ "CYP4F12",
+ "EID2B_ENSG00000267443_interaction",
+ "EID2B_relative_abundance_interaction"
+ ]
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.5
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/complex_pheno_1_noise.svg b/paper/pheno_sim/sim_configs/complex_pheno_1_noise.svg
new file mode 100644
index 0000000..7158aec
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/complex_pheno_1_noise.svg
@@ -0,0 +1,656 @@
+
+
+
+
+
diff --git a/paper/pheno_sim/sim_configs/complex_pheno_2.json b/paper/pheno_sim/sim_configs/complex_pheno_2.json
new file mode 100644
index 0000000..383c6b8
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/complex_pheno_2.json
@@ -0,0 +1,460 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "Gene1_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 904528,
+ 906703,
+ 907821,
+ 908648,
+ 983609,
+ 998855,
+ 999439,
+ 982698,
+ 1004687,
+ 1011999,
+ 1017057
+ ]
+ },
+ {
+ "alias": "Gene1_promoter",
+ "type": "SNP",
+ "chr": "19",
+ "pos": 899123
+ },
+ {
+ "alias": "Gene2_a_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 49253389,
+ 49262500,
+ 49270230,
+ 49273784,
+ 49292197,
+ 49309776,
+ 49342237,
+ 49370819,
+ 49377436,
+ 49401940,
+ 49415131,
+ 49421903,
+ 49438433,
+ 49462708,
+ 49482522,
+ 49506390,
+ 49518484,
+ 49540266,
+ 49561942
+ ]
+ },
+ {
+ "alias": "Gene2_b_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 50167726,
+ 50187430,
+ 50208627,
+ 50228192,
+ 50249905,
+ 50267988,
+ 50271110,
+ 50293110,
+ 50310775,
+ 50360989,
+ 50386340,
+ 50404939,
+ 50482614,
+ 50519249
+ ]
+ },
+ {
+ "alias": "Gene3_a_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 29545730,
+ 29572039,
+ 29575619,
+ 29611377,
+ 29639464,
+ 29680838,
+ 29736342,
+ 29751114,
+ 29781502,
+ 29812294,
+ 29851078,
+ 29886029,
+ 29898144,
+ 29928415,
+ 29945801,
+ 29968837,
+ 29982870,
+ 30015157,
+ 30030578,
+ 30041392
+ ]
+ },
+ {
+ "alias": "Gene3_b_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 38478280,
+ 38522972,
+ 38578183,
+ 38700944,
+ 38711515,
+ 38732251,
+ 38758140,
+ 38817876,
+ 38888587,
+ 38927316,
+ 38980666,
+ 39040184,
+ 39119494,
+ 39400175,
+ 39480064,
+ 39575750,
+ 39731783,
+ 39879663,
+ 39964315
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "Gene1_betas",
+ "input_match_size": "Gene1_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_effects",
+ "input_aliases": [
+ "Gene1_betas",
+ "Gene1_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene1_effect_sum",
+ "input_alias": "Gene1_effects"
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_promoter_multiplier",
+ "input_match_size": "Gene1_effect_sum",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.7,
+ "scale": 0.05
+ }
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_effect_sum_if_promoter",
+ "input_aliases": [
+ "Gene1_promoter_multiplier",
+ "Gene1_effect_sum"
+ ]
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_hap_vals",
+ "input_cond_vals": "Gene1_promoter",
+ "input_if_vals": "Gene1_effect_sum_if_promoter",
+ "input_else_vals": "Gene1_effect_sum"
+ },
+ {
+ "type": "MinCombine",
+ "alias": "Gene1_min",
+ "input_alias": "Gene1_hap_vals"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene1_mean",
+ "input_alias": "Gene1_hap_vals"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "Gene1_comb_vals",
+ "input_aliases": [
+ "Gene1_min",
+ "Gene1_mean"
+ ]
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "Gene1_no_noise",
+ "input_alias": "Gene1_comb_vals"
+ },
+ {
+ "type": "Heritability",
+ "alias": "Gene1",
+ "input_alias": "Gene1_no_noise",
+ "heritability": 0.8
+ },
+
+ {
+ "type": "RandomConstant",
+ "alias": "Gene2_a_betas",
+ "input_match_size": "Gene2_a_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_a_effects",
+ "input_aliases": [
+ "Gene2_a_betas",
+ "Gene2_a_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene2_a_effect_sum",
+ "input_alias": "Gene2_a_effects"
+ },
+ {
+ "type": "Tanh",
+ "alias": "Gene2_a_tanh",
+ "input_alias": "Gene2_a_effect_sum"
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene2_b_betas",
+ "input_match_size": "Gene2_b_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_b_effects",
+ "input_aliases": [
+ "Gene2_b_betas",
+ "Gene2_b_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene2_b_effect_sum",
+ "input_alias": "Gene2_b_effects"
+ },
+ {
+ "type": "Sigmoid",
+ "alias": "Gene2_b_sigmoid",
+ "input_alias": "Gene2_b_effect_sum"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_no_noise",
+ "input_aliases": [
+ "Gene2_a_tanh",
+ "Gene2_b_sigmoid"
+ ]
+ },
+ {
+ "type": "Heritability",
+ "alias": "Gene2_haps",
+ "input_alias": "Gene2_no_noise",
+ "heritability": 0.8
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene2",
+ "input_alias": "Gene2_haps"
+ },
+
+ {
+ "type": "RandomConstant",
+ "alias": "Gene3_a_betas",
+ "input_match_size": "Gene3_a_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.2,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene3_a_effects",
+ "input_aliases": [
+ "Gene3_a_betas",
+ "Gene3_a_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene3_a_effect_sum",
+ "input_alias": "Gene3_a_effects"
+ },
+ {
+ "type": "ReLU",
+ "alias": "Gene3_a_relu",
+ "input_alias": "Gene3_a_effect_sum"
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene3_b_betas",
+ "input_match_size": "Gene3_b_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene3_b_effects",
+ "input_aliases": [
+ "Gene3_b_betas",
+ "Gene3_b_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene3_b_effect_sum",
+ "input_alias": "Gene3_b_effects"
+ },
+ {
+ "type": "ReLU",
+ "alias": "Gene3_b_relu",
+ "input_alias": "Gene3_b_effect_sum",
+ "neg_slope": -0.5
+ },
+ {
+ "type": "Sum",
+ "alias": "Gene3_haps",
+ "input_aliases": [
+ "Gene3_a_relu",
+ "Gene3_b_relu"
+ ]
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "Gene3_no_noise",
+ "input_alias": "Gene3_haps"
+ },
+ {
+ "type": "Heritability",
+ "alias": "Gene3",
+ "input_alias": "Gene3_no_noise",
+ "heritability": 0.8
+ },
+
+ {
+ "type": "Concatenate",
+ "alias": "Genes_1_2",
+ "input_aliases": [
+ "Gene1",
+ "Gene2"
+ ]
+ },
+ {
+ "type": "Distribution",
+ "alias": "1_2_pos_multiplier",
+ "input_match_size": "Genes_1_2",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.15,
+ "scale": 0.02
+ }
+ },
+ {
+ "type": "Product",
+ "alias": "Genes_1_2_multiplied",
+ "input_aliases": [
+ "Genes_1_2",
+ "1_2_pos_multiplier"
+ ]
+ },
+ {
+ "type": "IfElse",
+ "alias": "Genes_1_2_rescaled",
+ "input_cond_vals": "Genes_1_2",
+ "input_if_vals": "Genes_1_2_multiplied",
+ "input_else_vals": "Genes_1_2",
+ "threshold": 0.0
+ },
+ {
+ "type": "Product",
+ "alias": "all_inter_1",
+ "input_aliases": [
+ "Genes_1_2_rescaled",
+ "Gene3"
+ ]
+ },
+ {
+ "type": "Tanh",
+ "alias": "interaction_term_components",
+ "input_alias": "all_inter_1"
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "interaction_term",
+ "input_alias": "interaction_term_components"
+ },
+ {
+ "type": "Constant",
+ "alias": "interaction_term_weight",
+ "constant": 0.2,
+ "input_match_size": "interaction_term"
+ },
+ {
+ "type": "Product",
+ "alias": "interaction_term_scaled",
+ "input_aliases": [
+ "interaction_term_weight",
+ "interaction_term"
+ ]
+ },
+ {
+ "type": "Concatenate",
+ "alias": "pheno_factors",
+ "input_aliases": [
+ "Genes_1_2_multiplied",
+ "Gene3",
+ "interaction_term_scaled"
+ ]
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "pheno_factors"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.6
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/complex_pheno_2.png b/paper/pheno_sim/sim_configs/complex_pheno_2.png
new file mode 100644
index 0000000..c416a36
Binary files /dev/null and b/paper/pheno_sim/sim_configs/complex_pheno_2.png differ
diff --git a/paper/pheno_sim/sim_configs/complex_pheno_3.json b/paper/pheno_sim/sim_configs/complex_pheno_3.json
new file mode 100644
index 0000000..2046d68
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/complex_pheno_3.json
@@ -0,0 +1,516 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "Gene1_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 53420774,
+ 55569915,
+ 57085769,
+ 57162101,
+ 57176198,
+ 57217621,
+ 57398148,
+ 57791758,
+ 57797663,
+ 58708730
+ ]
+ },
+ {
+ "alias": "Gene1_mult_1",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 57075629,
+ 57008320
+ ]
+ },
+ {
+ "alias": "Gene1_mult_2",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 57265933,
+ 57320223
+ ]
+ },
+ {
+ "alias": "Gene1_mult_3",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 58058329,
+ 58207385
+ ]
+ },
+ {
+ "alias": "Gene1_mult_4",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 58510010,
+ 58684319
+ ]
+ },
+
+ {
+ "alias": "Gene2_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 22158299,
+ 21283183,
+ 22045128,
+ 22098198,
+ 22114065,
+ 22210564,
+ 23442629,
+ 23646411,
+ 23669376,
+ 23704463,
+ 23899814
+ ]
+ },
+ {
+ "alias": "Gene2_mult_1",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 23711555,
+ 23569065
+ ]
+ },
+ {
+ "alias": "Gene2_mult_2",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 23150326,
+ 20171270
+ ]
+ },
+ {
+ "alias": "Gene2_mult_3",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 21000562,
+ 21563958
+ ]
+ },
+ {
+ "alias": "Gene2_mult_4",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 21907988,
+ 23483927
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "Gene1_betas",
+ "input_match_size": "Gene1_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 2.5,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_effects",
+ "input_aliases": [
+ "Gene1_betas",
+ "Gene1_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene1_effects_sum",
+ "input_alias": "Gene1_effects"
+ },
+ {
+ "type": "GaussianNoise",
+ "alias": "Gene1_effects_sum_w_noise",
+ "input_alias": "Gene1_effects_sum",
+ "noise_std": 0.5
+ },
+ {
+ "type": "Constant",
+ "alias": "ones_vec",
+ "constant": 1.0,
+ "input_match_size": "Gene1_effects_sum_w_noise"
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_mult_1_multiplier",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.75,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_mult_2_multiplier",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.2,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_mult_3_multiplier",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.1,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_mult_4_multiplier",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.5,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene1_has_mult_1",
+ "input_alias": "Gene1_mult_1"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene1_has_mult_2",
+ "input_alias": "Gene1_mult_2"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene1_has_mult_3",
+ "input_alias": "Gene1_mult_3"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene1_has_mult_4",
+ "input_alias": "Gene1_mult_4"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_1_val",
+ "input_cond_vals": "Gene1_has_mult_1",
+ "input_if_vals": "Gene1_mult_1_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_2_val",
+ "input_cond_vals": "Gene1_has_mult_2",
+ "input_if_vals": "Gene1_mult_2_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_3_val",
+ "input_cond_vals": "Gene1_has_mult_3",
+ "input_if_vals": "Gene1_mult_3_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_4_val",
+ "input_cond_vals": "Gene1_has_mult_4",
+ "input_if_vals": "Gene1_mult_4_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_noise_scaling_term",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.03
+ }
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_haps",
+ "input_aliases": [
+ "Gene1_effects_sum_w_noise",
+ "Gene1_mult_1_val",
+ "Gene1_mult_2_val",
+ "Gene1_mult_3_val",
+ "Gene1_mult_4_val",
+ "Gene1_noise_scaling_term"
+ ]
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "Gene1_max",
+ "input_alias": "Gene1_haps"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene1_mean",
+ "input_alias": "Gene1_haps"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "Gene1_comb_vals",
+ "input_aliases": [
+ "Gene1_max",
+ "Gene1_mean"
+ ]
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene1_comb_weights",
+ "constant": [
+ 0.6,
+ 0.4
+ ],
+ "input_match_size": "Gene1_comb_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_comb_vals_weighted",
+ "input_aliases": [
+ "Gene1_comb_vals",
+ "Gene1_comb_weights"
+ ]
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "Gene1",
+ "input_alias": "Gene1_comb_vals_weighted"
+ },
+
+ {
+ "type": "RandomConstant",
+ "alias": "Gene2_betas",
+ "input_match_size": "Gene2_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.5,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_effects",
+ "input_aliases": [
+ "Gene2_betas",
+ "Gene2_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene2_effects_sum",
+ "input_alias": "Gene2_effects"
+ },
+ {
+ "type": "GaussianNoise",
+ "alias": "Gene2_effects_sum_w_noise",
+ "input_alias": "Gene2_effects_sum",
+ "noise_std": 0.5
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_mult_1_multiplier",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.17,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_mult_2_multiplier",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.82,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_mult_3_multiplier",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.22,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_mult_4_multiplier",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.68,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene2_has_mult_1",
+ "input_alias": "Gene2_mult_1"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene2_has_mult_2",
+ "input_alias": "Gene2_mult_2"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene2_has_mult_3",
+ "input_alias": "Gene2_mult_3"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene2_has_mult_4",
+ "input_alias": "Gene2_mult_4"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_1_val",
+ "input_cond_vals": "Gene2_has_mult_1",
+ "input_if_vals": "Gene2_mult_1_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_2_val",
+ "input_cond_vals": "Gene2_has_mult_2",
+ "input_if_vals": "Gene2_mult_2_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_3_val",
+ "input_cond_vals": "Gene2_has_mult_3",
+ "input_if_vals": "Gene2_mult_3_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_4_val",
+ "input_cond_vals": "Gene2_has_mult_4",
+ "input_if_vals": "Gene2_mult_4_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_noise_scaling_term",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.03
+ }
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_haps",
+ "input_aliases": [
+ "Gene2_effects_sum_w_noise",
+ "Gene2_mult_1_val",
+ "Gene2_mult_2_val",
+ "Gene2_mult_3_val",
+ "Gene2_mult_4_val",
+ "Gene2_noise_scaling_term"
+ ]
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "Gene2_max",
+ "input_alias": "Gene2_haps"
+ },
+ {
+ "type": "MinCombine",
+ "alias": "Gene2_min",
+ "input_alias": "Gene2_haps"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "Gene2_comb_vals",
+ "input_aliases": [
+ "Gene2_max",
+ "Gene2_min"
+ ]
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene2_comb_weights",
+ "constant": [
+ 0.4,
+ 0.6
+ ],
+ "input_match_size": "Gene2_comb_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_comb_vals_weighted",
+ "input_aliases": [
+ "Gene2_comb_vals",
+ "Gene2_comb_weights"
+ ]
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "Gene2_wo_noise",
+ "input_alias": "Gene2_comb_vals_weighted"
+ },
+ {
+ "type": "Heritability",
+ "alias": "Gene2",
+ "input_alias": "Gene2_wo_noise",
+ "heritability": 0.6
+ },
+
+ {
+ "type": "ReLU",
+ "alias": "Gene2_relu",
+ "input_alias": "Gene2",
+ "neg_slope": -0.3
+ },
+ {
+ "type": "Product",
+ "alias": "no_noise_phenotype",
+ "input_aliases": [
+ "Gene1",
+ "Gene2_relu"
+ ]
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.5
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/complex_pheno_3.png b/paper/pheno_sim/sim_configs/complex_pheno_3.png
new file mode 100644
index 0000000..82a9c67
Binary files /dev/null and b/paper/pheno_sim/sim_configs/complex_pheno_3.png differ
diff --git a/paper/pheno_sim/sim_configs/complex_pheno_4.json b/paper/pheno_sim/sim_configs/complex_pheno_4.json
new file mode 100644
index 0000000..687a3c1
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/complex_pheno_4.json
@@ -0,0 +1,657 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "Gene1_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 3089244,
+ 3171565,
+ 3352401,
+ 3548313,
+ 3761652,
+ 4308128
+ ]
+ },
+ {
+ "alias": "Gene1_mult_1",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 3278884,
+ 3803176,
+ 3114177,
+ 4972391
+ ]
+ },
+ {
+ "alias": "Gene1_mult_2",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 3429937,
+ 3906688,
+ 2828196,
+ 2591597
+ ]
+ },
+ {
+ "alias": "Gene1_mult_3",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 4436634,
+ 4559474,
+ 4829250
+ ]
+ },
+ {
+ "alias": "Gene1_mult_4",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 2532538,
+ 2380846,
+ 5212482
+ ]
+ },
+
+ {
+ "alias": "Gene2_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 41882712,
+ 41386033,
+ 43923008,
+ 44981883,
+ 45639716
+ ]
+ },
+ {
+ "alias": "Gene2_mult_1",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 41674278,
+ 43635280
+ ]
+ },
+ {
+ "alias": "Gene2_mult_2",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 44256205,
+ 45105085
+ ]
+ },
+ {
+ "alias": "Gene2_mult_3",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 45924532,
+ 46189861
+ ]
+ },
+ {
+ "alias": "Gene2_mult_4",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 50271924,
+ 51288656
+ ]
+ },
+
+ {
+ "alias": "Gene3_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 29749444,
+ 30183330,
+ 31186609,
+ 31850047,
+ 32809524,
+ 34295278,
+ 36071771
+ ]
+ },
+ {
+ "alias": "Gene3_mult",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 29947251,
+ 30670527,
+ 30873514,
+ 32323786,
+ 33235593,
+ 33653539,
+ 34130336,
+ 35175877,
+ 35434582,
+ 35557923,
+ 36612994
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "Gene1_betas",
+ "input_match_size": "Gene1_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 2.5,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_effects",
+ "input_aliases": [
+ "Gene1_betas",
+ "Gene1_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene1_effects_sum",
+ "input_alias": "Gene1_effects"
+ },
+ {
+ "type": "GaussianNoise",
+ "alias": "Gene1_effects_sum_w_noise",
+ "input_alias": "Gene1_effects_sum",
+ "noise_std": 0.8
+ },
+ {
+ "type": "Constant",
+ "alias": "ones_vec",
+ "constant": 1.0,
+ "input_match_size": "Gene1_effects_sum_w_noise"
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_mult_1_multiplier",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.7,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_mult_2_multiplier",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.22,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_mult_3_multiplier",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.28,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_mult_4_multiplier",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.5,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene1_has_mult_1",
+ "input_alias": "Gene1_mult_1"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene1_has_mult_2",
+ "input_alias": "Gene1_mult_2"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene1_has_mult_3",
+ "input_alias": "Gene1_mult_3"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene1_has_mult_4",
+ "input_alias": "Gene1_mult_4"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_1_val",
+ "input_cond_vals": "Gene1_has_mult_1",
+ "input_if_vals": "Gene1_mult_1_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_2_val",
+ "input_cond_vals": "Gene1_has_mult_2",
+ "input_if_vals": "Gene1_mult_2_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_3_val",
+ "input_cond_vals": "Gene1_has_mult_3",
+ "input_if_vals": "Gene1_mult_3_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_4_val",
+ "input_cond_vals": "Gene1_has_mult_4",
+ "input_if_vals": "Gene1_mult_4_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene1_noise_scaling_term",
+ "input_match_size": "Gene1_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.03
+ }
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_haps",
+ "input_aliases": [
+ "Gene1_effects_sum_w_noise",
+ "Gene1_mult_1_val",
+ "Gene1_mult_2_val",
+ "Gene1_mult_3_val",
+ "Gene1_mult_4_val",
+ "Gene1_noise_scaling_term"
+ ]
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "Gene1_max",
+ "input_alias": "Gene1_haps"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene1_mean",
+ "input_alias": "Gene1_haps"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "Gene1_comb_vals",
+ "input_aliases": [
+ "Gene1_max",
+ "Gene1_mean"
+ ]
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene1_comb_weights",
+ "constant": [
+ 0.6,
+ 0.4
+ ],
+ "input_match_size": "Gene1_comb_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_comb_vals_weighted",
+ "input_aliases": [
+ "Gene1_comb_vals",
+ "Gene1_comb_weights"
+ ]
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "Gene1",
+ "input_alias": "Gene1_comb_vals_weighted"
+ },
+
+ {
+ "type": "RandomConstant",
+ "alias": "Gene2_betas",
+ "input_match_size": "Gene2_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 2.5,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_effects",
+ "input_aliases": [
+ "Gene2_betas",
+ "Gene2_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene2_effects_sum",
+ "input_alias": "Gene2_effects"
+ },
+ {
+ "type": "GaussianNoise",
+ "alias": "Gene2_effects_sum_w_noise",
+ "input_alias": "Gene2_effects_sum",
+ "noise_std": 0.75
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_mult_1_multiplier",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.27,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_mult_2_multiplier",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.72,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_mult_3_multiplier",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.18,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_mult_4_multiplier",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.66,
+ "scale": 0.025
+ }
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene2_has_mult_1",
+ "input_alias": "Gene2_mult_1"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene2_has_mult_2",
+ "input_alias": "Gene2_mult_2"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene2_has_mult_3",
+ "input_alias": "Gene2_mult_3"
+ },
+ {
+ "type": "AnyReduce",
+ "alias": "Gene2_has_mult_4",
+ "input_alias": "Gene2_mult_4"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_1_val",
+ "input_cond_vals": "Gene2_has_mult_1",
+ "input_if_vals": "Gene2_mult_1_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_2_val",
+ "input_cond_vals": "Gene2_has_mult_2",
+ "input_if_vals": "Gene2_mult_2_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_3_val",
+ "input_cond_vals": "Gene2_has_mult_3",
+ "input_if_vals": "Gene2_mult_3_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_4_val",
+ "input_cond_vals": "Gene2_has_mult_4",
+ "input_if_vals": "Gene2_mult_4_multiplier",
+ "input_else_vals": "ones_vec"
+ },
+ {
+ "type": "Distribution",
+ "alias": "Gene2_noise_scaling_term",
+ "input_match_size": "Gene2_effects_sum_w_noise",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.03
+ }
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_haps",
+ "input_aliases": [
+ "Gene2_effects_sum_w_noise",
+ "Gene2_mult_1_val",
+ "Gene2_mult_2_val",
+ "Gene2_mult_3_val",
+ "Gene2_mult_4_val",
+ "Gene2_noise_scaling_term"
+ ]
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "Gene2_max",
+ "input_alias": "Gene2_haps"
+ },
+ {
+ "type": "MinCombine",
+ "alias": "Gene2_min",
+ "input_alias": "Gene2_haps"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "Gene2_comb_vals",
+ "input_aliases": [
+ "Gene2_max",
+ "Gene2_min"
+ ]
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene2_comb_weights",
+ "constant": [
+ 0.4,
+ 0.6
+ ],
+ "input_match_size": "Gene2_comb_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_comb_vals_weighted",
+ "input_aliases": [
+ "Gene2_comb_vals",
+ "Gene2_comb_weights"
+ ]
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "Gene2_wo_noise",
+ "input_alias": "Gene2_comb_vals_weighted"
+ },
+ {
+ "type": "Heritability",
+ "alias": "Gene2",
+ "input_alias": "Gene2_wo_noise",
+ "heritability": 0.6
+ },
+
+ {
+ "type": "RandomConstant",
+ "alias": "Gene3_betas",
+ "input_match_size": "Gene3_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 2.5,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "Gene3_effects",
+ "input_aliases": [
+ "Gene3_betas",
+ "Gene3_vars"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "Gene3_effects_sum",
+ "input_alias": "Gene3_effects"
+ },
+ {
+ "type": "GaussianNoise",
+ "alias": "Gene3_effects_sum_w_noise",
+ "input_alias": "Gene3_effects_sum",
+ "noise_std": 0.75
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene3_mult_vals",
+ "input_match_size": "Gene3_mult",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.125
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "ones_mult_vec",
+ "constant": 1.0,
+ "input_match_size": "Gene3_mult"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene3_mult_actual_vals",
+ "input_cond_vals": "Gene3_mult",
+ "input_if_vals": "Gene3_mult_vals",
+ "input_else_vals": "ones_mult_vec"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene3_multiplied_vals",
+ "input_aliases": [
+ "Gene3_effects_sum_w_noise",
+ "Gene3_mult_actual_vals"
+ ]
+ },
+ {
+ "type": "MeanReduce",
+ "alias": "Gene3_haps",
+ "input_alias": "Gene3_multiplied_vals"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene3_no_noise",
+ "input_alias": "Gene3_haps"
+ },
+ {
+ "type": "Heritability",
+ "alias": "Gene3",
+ "input_alias": "Gene3_no_noise",
+ "heritability": 0.8
+ },
+
+ {
+ "type": "ReLU",
+ "alias": "Gene2_relu",
+ "input_alias": "Gene2",
+ "neg_slope": -0.7
+ },
+ {
+ "type": "Product",
+ "alias": "G1_G2",
+ "input_aliases": [
+ "Gene1",
+ "Gene2_relu"
+ ]
+ },
+
+ {
+ "type": "Sigmoid",
+ "alias": "Gene3_damped",
+ "input_alias": "Gene3"
+ },
+ {
+ "type": "Product",
+ "alias": "G1_G3",
+ "input_aliases": [
+ "Gene1",
+ "Gene3_damped"
+ ]
+ },
+
+ {
+ "type": "Product",
+ "alias": "G2_G3",
+ "input_aliases": [
+ "Gene2",
+ "Gene3"
+ ]
+ },
+
+ {
+ "type": "Sum",
+ "alias": "no_herit_phenotype",
+ "input_aliases": [
+ "G1_G2",
+ "G1_G3",
+ "G2_G3"
+ ]
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_herit_phenotype",
+ "heritability": 0.5
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/compound_het.json b/paper/pheno_sim/sim_configs/compound_het.json
new file mode 100644
index 0000000..d009586
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/compound_het.json
@@ -0,0 +1,39 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "LOF_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 24368053,
+ 24451636
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "AllReduce",
+ "alias": "protein_function",
+ "input_alias": "LOF_vars",
+ "comparison": "lt"
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "gene_function",
+ "input_alias": "protein_function"
+ },
+ {
+ "type": "StandardScaler",
+ "alias": "phenotype",
+ "input_alias": "gene_function"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/compound_het.png b/paper/pheno_sim/sim_configs/compound_het.png
new file mode 100644
index 0000000..6f55a6a
Binary files /dev/null and b/paper/pheno_sim/sim_configs/compound_het.png differ
diff --git a/paper/pheno_sim/sim_configs/compound_het_2.json b/paper/pheno_sim/sim_configs/compound_het_2.json
new file mode 100644
index 0000000..57f6547
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/compound_het_2.json
@@ -0,0 +1,39 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "LOF_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 24368053,
+ 46408356
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "AllReduce",
+ "alias": "protein_function",
+ "input_alias": "LOF_vars",
+ "comparison": "lt"
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "gene_function",
+ "input_alias": "protein_function"
+ },
+ {
+ "type": "StandardScaler",
+ "alias": "phenotype",
+ "input_alias": "gene_function"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/gepsi_lin_add_h0625_h0625.json b/paper/pheno_sim/sim_configs/gepsi_lin_add_h0625_h0625.json
new file mode 100644
index 0000000..39b68f0
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/gepsi_lin_add_h0625_h0625.json
@@ -0,0 +1,251 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 57619241,
+ 30827371,
+ 726482,
+ 45030209,
+ 48816109,
+ 46390280,
+ 42107207,
+ 55573633,
+ 52010404,
+ 457720,
+ 30105969,
+ 22695709,
+ 24217139,
+ 57175121,
+ 54114819,
+ 43554213,
+ 9006749,
+ 45086946,
+ 57706254,
+ 53577419,
+ 48523128,
+ 33241732,
+ 36376966,
+ 14898112,
+ 1370742,
+ 38501417,
+ 52570714,
+ 18459377,
+ 2356013,
+ 38524768,
+ 22915253,
+ 48523317,
+ 1538411,
+ 54931791,
+ 32091682,
+ 55377080,
+ 30326771,
+ 57182846,
+ 18367995,
+ 41888850,
+ 4208788,
+ 35811336,
+ 1729244,
+ 11979164,
+ 57684962,
+ 53202300,
+ 42132193,
+ 21461151,
+ 46997522,
+ 18158423,
+ 55560202,
+ 41489448,
+ 35435069,
+ 42737136,
+ 58788236,
+ 49400000,
+ 34266248,
+ 41573562,
+ 57430917,
+ 35843086,
+ 38690006,
+ 59067623,
+ 51517479,
+ 13135197,
+ 3805801,
+ 14621320,
+ 45427648,
+ 16815476,
+ 17756179,
+ 4915341,
+ 58571049,
+ 9013275,
+ 41033384,
+ 35922437,
+ 3338774,
+ 18457739,
+ 15990431,
+ 30867886,
+ 30681696,
+ 9118528,
+ 9225685,
+ 29659141,
+ 33459592,
+ 36159368,
+ 38432391,
+ 6634526,
+ 44078736,
+ 21387192,
+ 957447,
+ 45029208,
+ 9601155,
+ 15791132,
+ 2325172,
+ 16569843,
+ 3556464,
+ 38363084,
+ 32501719,
+ 45039384,
+ 17710372,
+ 29751114
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "Constant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "constant": [
+ 0.3818153664265401,
+ 0.8623790982829797,
+ 0.04351098667031583,
+ 0.2442856034115395,
+ 0.7704492480399494,
+ 0.19076947543875267,
+ 0.7525623243616776,
+ 0.8798635765106556,
+ 0.1238577623504774,
+ 0.13400218020483434,
+ 0.8373080317303877,
+ 0.4889758498017531,
+ 0.5812764756275756,
+ 0.1443556576656988,
+ 0.5085576811332512,
+ 0.32716451034352345,
+ 0.9399819237541984,
+ 0.6521939160472541,
+ 0.3677577682784876,
+ 0.22167539968462668,
+ 0.3789970814070903,
+ 0.4745425663861167,
+ 0.7016283997772098,
+ 0.9270621856302328,
+ 0.8699675346992766,
+ 0.5081873211393421,
+ 0.7071968243055105,
+ 0.4675940238225826,
+ 0.2646106583958938,
+ 0.7508269132948941,
+ 0.8380523280989056,
+ 0.5670069031780364,
+ 0.9478240307398291,
+ 0.16269390332912748,
+ 0.7679840982814082,
+ 0.7515695600509577,
+ 0.20893706899638032,
+ 0.8317294438096605,
+ 0.10825618474350518,
+ 0.03716420011206212,
+ 0.5543332588371703,
+ 0.6322928456210322,
+ 0.60975618211982,
+ 0.7778025373839508,
+ 0.3928336774099072,
+ 0.2807628554516413,
+ 0.4506701828217576,
+ 0.21543603504143735,
+ 0.9274686673163256,
+ 0.01154133618070996,
+ 0.5725419694425811,
+ 0.2004893283165734,
+ 0.9454019698162788,
+ 0.5758708915513909,
+ 0.17882596387392946,
+ 0.9942569548324588,
+ 0.010045151913685045,
+ 0.5168777446114223,
+ 0.15434442232736278,
+ 0.6800300565749678,
+ 0.9746362460970458,
+ 0.3522489381681789,
+ 0.5613421311132509,
+ 0.3007474911930267,
+ 0.8239779498913072,
+ 0.03847824405225664,
+ 0.1830052509567429,
+ 0.6559860581982095,
+ 0.11949464106074048,
+ 0.5521068463801629,
+ 0.5723073392208289,
+ 0.3198902873330367,
+ 0.10742991202984108,
+ 0.22676920832936864,
+ 0.3413968154761577,
+ 0.4989246107791182,
+ 0.5207054331773132,
+ 0.4029500287182109,
+ 0.5665120934723001,
+ 0.9323738005936127,
+ 0.3821486401386188,
+ 0.3535916878900471,
+ 0.11012547355371027,
+ 0.5101801995986255,
+ 0.0605174030975173,
+ 0.3529430273117657,
+ 0.9243322723021749,
+ 0.7767877995935561,
+ 0.8019187827610346,
+ 0.4243923060215817,
+ 0.2985388539130385,
+ 0.61471921582651,
+ 0.33254878751025163,
+ 0.4391998238543328,
+ 0.06948923348241487,
+ 0.9884079011591206,
+ 0.09492821898536796,
+ 0.4781355072081762,
+ 0.4662808412549794,
+ 0.6902270323338189
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.0625
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/gepsi_lin_add_h125_h125.json b/paper/pheno_sim/sim_configs/gepsi_lin_add_h125_h125.json
new file mode 100644
index 0000000..c7f4117
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/gepsi_lin_add_h125_h125.json
@@ -0,0 +1,251 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 18047521,
+ 48382226,
+ 9646898,
+ 52932420,
+ 43680051,
+ 49034011,
+ 33780575,
+ 50045979,
+ 12508061,
+ 36442117,
+ 33700078,
+ 56578370,
+ 48519241,
+ 56734713,
+ 56699244,
+ 5270047,
+ 58353003,
+ 7835233,
+ 23237309,
+ 45016116,
+ 45522732,
+ 8197786,
+ 14997021,
+ 57211310,
+ 36258721,
+ 49206603,
+ 2356013,
+ 53482629,
+ 6635086,
+ 14164223,
+ 1452522,
+ 23199441,
+ 43806760,
+ 30255068,
+ 55441769,
+ 45257253,
+ 32685208,
+ 56993038,
+ 6409691,
+ 49647678,
+ 2550138,
+ 47724564,
+ 33738185,
+ 9361302,
+ 35612159,
+ 56236863,
+ 36113590,
+ 55760320,
+ 58172208,
+ 54043068,
+ 12716493,
+ 19789528,
+ 18518216,
+ 56425689,
+ 54044965,
+ 11348960,
+ 44037370,
+ 57423353,
+ 10116375,
+ 4650256,
+ 23633079,
+ 20685655,
+ 57320223,
+ 9343660,
+ 28652149,
+ 9011538,
+ 21210260,
+ 52694426,
+ 9001822,
+ 49470200,
+ 10143082,
+ 30734591,
+ 55690030,
+ 56321414,
+ 44188485,
+ 46052454,
+ 5599152,
+ 15271771,
+ 41585673,
+ 18494090,
+ 858376,
+ 47222310,
+ 49610460,
+ 54030697,
+ 18376517,
+ 29706319,
+ 17088810,
+ 4115684,
+ 51141486,
+ 52018540,
+ 51585615,
+ 55317669,
+ 18130500,
+ 21170348,
+ 41249446,
+ 54143430,
+ 1102203,
+ 1280552,
+ 687279,
+ 14752325
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "Constant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "constant": [
+ 0.10413150642110458,
+ 0.9124850733523012,
+ 0.544394557863162,
+ 0.3821304305641722,
+ 0.7170565427908235,
+ 0.43095695020473057,
+ 0.6392042822976768,
+ 0.8247522314252751,
+ 0.6156863238086696,
+ 0.9769853011407352,
+ 0.4134269664054344,
+ 0.2803086159943955,
+ 0.8168442396661864,
+ 0.5056606714498508,
+ 0.8540260579800995,
+ 0.9115027586210238,
+ 0.4155695099029084,
+ 0.2425684426385424,
+ 0.8496937021406548,
+ 0.5882503268364002,
+ 0.971955542098749,
+ 0.4946085313054166,
+ 0.3812186906601618,
+ 0.9606148829653592,
+ 0.3959755669675064,
+ 0.2128201460131968,
+ 0.9045174574993512,
+ 0.22099063618620385,
+ 0.5984956183510115,
+ 0.2277281910957101,
+ 0.7232250864077624,
+ 0.7698542499309816,
+ 0.2234157527207624,
+ 0.6800366140869736,
+ 0.1926351587712085,
+ 0.5022285462286917,
+ 0.6607563171406469,
+ 0.8825647680681822,
+ 0.12271955491961628,
+ 0.5112799529999561,
+ 0.4670218825265504,
+ 0.9508918338868512,
+ 0.7792281394305667,
+ 0.487274904596765,
+ 0.4109643147033081,
+ 0.6846130502443797,
+ 0.8953373441934184,
+ 0.8311536049822495,
+ 0.9609794893182836,
+ 0.20770181981046465,
+ 0.03721183799617789,
+ 0.7381931608244144,
+ 0.0999305738176548,
+ 0.4388485247854964,
+ 0.9353449286158952,
+ 0.2990175523275012,
+ 0.725268680707788,
+ 0.7064982090939688,
+ 0.4518564998707944,
+ 0.3047938721407266,
+ 0.4130029688970384,
+ 0.4785571920622014,
+ 0.9340268034195038,
+ 0.2500512817202736,
+ 0.8388315203889951,
+ 0.8752907614964035,
+ 0.8262180028810463,
+ 0.22200034521876036,
+ 0.4446002597197205,
+ 0.9430387248240064,
+ 0.4112522104887305,
+ 0.462793428497582,
+ 0.5152892234895547,
+ 0.8782870542136431,
+ 0.9952111576011936,
+ 0.8290431122113845,
+ 0.7625691292025008,
+ 0.28517857174792993,
+ 0.047217952753094934,
+ 0.3455314204166333,
+ 0.4985189051215242,
+ 0.6595096401175896,
+ 0.7905794593995836,
+ 0.08310352680648714,
+ 0.6892116079113018,
+ 0.3146038736050324,
+ 0.36627907523831016,
+ 0.3177426716536457,
+ 0.5430151902190974,
+ 0.16650466932274488,
+ 0.9938071936528264,
+ 0.08209158247260506,
+ 0.4191929346850372,
+ 0.6257121511515333,
+ 0.4778571712142826,
+ 0.06833708792079796,
+ 0.6559272569560781,
+ 0.8788487883799346,
+ 0.017667608975205695,
+ 0.4914996827812027
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.125
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/gepsi_lin_add_h25_h25.json b/paper/pheno_sim/sim_configs/gepsi_lin_add_h25_h25.json
new file mode 100644
index 0000000..812caa1
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/gepsi_lin_add_h25_h25.json
@@ -0,0 +1,251 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 6744903,
+ 58680873,
+ 53928357,
+ 57575554,
+ 8420583,
+ 57914308,
+ 12435819,
+ 50816813,
+ 1339429,
+ 51574038,
+ 47676259,
+ 52007416,
+ 50909765,
+ 3084944,
+ 39703020,
+ 30852662,
+ 10142998,
+ 608668,
+ 3471275,
+ 4890914,
+ 44955113,
+ 5396310,
+ 7681134,
+ 51172616,
+ 20796683,
+ 20909853,
+ 18820164,
+ 50182891,
+ 12154799,
+ 22741675,
+ 23528062,
+ 51263510,
+ 34232172,
+ 35422808,
+ 9049339,
+ 52218958,
+ 56314337,
+ 47665006,
+ 3275315,
+ 34069166,
+ 51710132,
+ 55416954,
+ 37528528,
+ 8769653,
+ 18380072,
+ 12145874,
+ 51166225,
+ 28758493,
+ 8925231,
+ 45200634,
+ 35982472,
+ 13581464,
+ 39329205,
+ 49039790,
+ 46915702,
+ 54937386,
+ 8052646,
+ 19303185,
+ 20303526,
+ 10111065,
+ 20922418,
+ 8566634,
+ 687835,
+ 53727282,
+ 15328028,
+ 2655292,
+ 454524,
+ 51677132,
+ 52717165,
+ 44983375,
+ 11425097,
+ 28974774,
+ 39523341,
+ 28636232,
+ 9962371,
+ 31151734,
+ 766369,
+ 8320555,
+ 31582566,
+ 43296256,
+ 19625547,
+ 58873238,
+ 40882352,
+ 9048342,
+ 28541200,
+ 6997373,
+ 13019554,
+ 50405218,
+ 1812521,
+ 11245708,
+ 39167360,
+ 53002227,
+ 52367633,
+ 4080424,
+ 4852106,
+ 6968186,
+ 33328583,
+ 5790540,
+ 36643695,
+ 17818117
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "Constant",
+ "alias": "variant_betas",
+ "input_match_size": "variants",
+ "constant": [
+ 0.6937043829586242,
+ 0.952421995652094,
+ 0.774294231141111,
+ 0.6203870493680277,
+ 0.8344369941659531,
+ 0.8895499548944947,
+ 0.1903986134283271,
+ 0.9427103549757354,
+ 0.44116632241502,
+ 0.8596459533865226,
+ 0.7846831242846974,
+ 0.32925282077241425,
+ 0.09288825254940468,
+ 0.4400459850584856,
+ 0.8337149092780345,
+ 0.4315027336391174,
+ 0.8373929139241082,
+ 0.5051256820617062,
+ 0.4530453996129167,
+ 0.6682124738868211,
+ 0.4204248363542419,
+ 0.4047227081136966,
+ 0.8086265073317723,
+ 0.4719545017534187,
+ 0.19286607334244865,
+ 0.5383680948657927,
+ 0.3202510876667869,
+ 0.6023438845858737,
+ 0.6274379312480768,
+ 0.4618295535510777,
+ 0.5410122247879724,
+ 0.7790782315741891,
+ 0.9035531465946248,
+ 0.8008606665063299,
+ 0.9362360172716822,
+ 0.8904915010534115,
+ 0.6385957877334679,
+ 0.5026065908790919,
+ 0.3601566253841598,
+ 0.6710740194720548,
+ 0.9137764059689232,
+ 0.02605554644136576,
+ 0.3816224523384131,
+ 0.0348136372621044,
+ 0.4322223307381645,
+ 0.3000644378503841,
+ 0.1268223359465086,
+ 0.20136833083974714,
+ 0.7094362325891626,
+ 0.7618086279400041,
+ 0.3281531909010962,
+ 0.9466455135465612,
+ 0.6055813274147763,
+ 0.7139487443662991,
+ 0.2542092625763752,
+ 0.0055758382123057846,
+ 0.7298204383908605,
+ 0.795931194504054,
+ 0.5741088017148968,
+ 0.9579564361877672,
+ 0.6616950098163967,
+ 0.8414822146341004,
+ 0.4614527532618198,
+ 0.19918274824848406,
+ 0.02448535665916673,
+ 0.31226290929360945,
+ 0.2261363894941706,
+ 0.8695815277952634,
+ 0.7259217497816037,
+ 0.08954021606035634,
+ 0.8756618125665123,
+ 0.033232747561292915,
+ 0.7600745686029506,
+ 0.9689827603905068,
+ 0.8525783184742488,
+ 0.8994745161771557,
+ 0.8262490435261847,
+ 0.577227931272939,
+ 0.9139848980179912,
+ 0.3984259277811274,
+ 0.905063786219185,
+ 0.22072394241531054,
+ 0.1567079364576126,
+ 0.06727586399340257,
+ 0.9826029288656066,
+ 0.8720528974238916,
+ 0.01879547811239401,
+ 0.9871159089282081,
+ 0.96248531259782,
+ 0.7493812576954385,
+ 0.4379004587736797,
+ 0.3061024914562548,
+ 0.7069793473667688,
+ 0.23520416410132786,
+ 0.49992022478601,
+ 0.313984469221807,
+ 0.2790136340416253,
+ 0.6624344556661086,
+ 0.7940600647093542,
+ 0.4878972981566815
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variant_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.25
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/gepsi_lin_add_h25_h25.png b/paper/pheno_sim/sim_configs/gepsi_lin_add_h25_h25.png
new file mode 100644
index 0000000..0e8b5e0
Binary files /dev/null and b/paper/pheno_sim/sim_configs/gepsi_lin_add_h25_h25.png differ
diff --git a/paper/pheno_sim/sim_configs/gepsi_lin_add_h5_h5.json b/paper/pheno_sim/sim_configs/gepsi_lin_add_h5_h5.json
new file mode 100644
index 0000000..7f2b889
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/gepsi_lin_add_h5_h5.json
@@ -0,0 +1,251 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 16890243,
+ 4830628,
+ 48048515,
+ 9077264,
+ 10178063,
+ 13966800,
+ 58610835,
+ 29787392,
+ 20117685,
+ 31174166,
+ 4821612,
+ 1948784,
+ 56308477,
+ 2605046,
+ 3475634,
+ 51256586,
+ 55940893,
+ 8839278,
+ 56288941,
+ 49930352,
+ 5153606,
+ 54209600,
+ 17395055,
+ 44296689,
+ 58657428,
+ 48510553,
+ 2997976,
+ 14752608,
+ 52984556,
+ 41737414,
+ 46812451,
+ 12186921,
+ 3265535,
+ 36882133,
+ 4847713,
+ 54934308,
+ 36290900,
+ 58537665,
+ 3293845,
+ 19765499,
+ 58852541,
+ 35811336,
+ 27995745,
+ 52732763,
+ 53088058,
+ 8994104,
+ 57863601,
+ 51195891,
+ 48953257,
+ 5100777,
+ 1952841,
+ 15774241,
+ 55899102,
+ 13602721,
+ 54048273,
+ 40865568,
+ 7257444,
+ 459922,
+ 17918524,
+ 55097584,
+ 15160031,
+ 2374210,
+ 6904490,
+ 40266687,
+ 2532605,
+ 8071839,
+ 9074265,
+ 41682274,
+ 51682959,
+ 13448511,
+ 5589860,
+ 43876891,
+ 18645354,
+ 1731774,
+ 55697766,
+ 731144,
+ 30741623,
+ 35612159,
+ 16077928,
+ 18150118,
+ 52627349,
+ 1538107,
+ 17198195,
+ 55715464,
+ 986657,
+ 20171692,
+ 56149601,
+ 40904890,
+ 28586861,
+ 20102753,
+ 56459342,
+ 35527030,
+ 48261615,
+ 760809,
+ 35825211,
+ 12781728,
+ 46709129,
+ 46059364,
+ 48974704,
+ 2994107
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "Constant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "constant": [
+ 0.08029195317465421,
+ 0.5766681754400308,
+ 0.04653270175287738,
+ 0.15704312603748194,
+ 0.2650182957750403,
+ 0.658717934174885,
+ 0.1197655055036797,
+ 0.4893418768810943,
+ 0.20954865344510354,
+ 0.3594896925602443,
+ 0.01667657396158906,
+ 0.9940771098061648,
+ 0.3853238940011201,
+ 0.42678070023645404,
+ 0.9793206181559566,
+ 0.16266653136357012,
+ 0.9841436683789384,
+ 0.045262849291253134,
+ 0.06402887771003285,
+ 0.14530237664875578,
+ 0.7890210951269078,
+ 0.5031053855862412,
+ 0.7162096627196864,
+ 0.7989821348242013,
+ 0.05146026922921132,
+ 0.04308369526754297,
+ 0.4779180230855773,
+ 0.917858443541123,
+ 0.6515370694268271,
+ 0.3667820722078371,
+ 0.8818566690771135,
+ 0.2259021878254001,
+ 0.2941946867965837,
+ 0.8766031677200322,
+ 0.8925573334102925,
+ 0.9090365631979695,
+ 0.4196483633627868,
+ 0.8156053171523931,
+ 0.7283751099861581,
+ 0.4602786666597766,
+ 0.9656340663842568,
+ 0.4434479025004003,
+ 0.19056815879511144,
+ 0.8257513562280868,
+ 0.20089182735024655,
+ 0.5031439038514777,
+ 0.06527835592284592,
+ 0.7760905043565606,
+ 0.9945093019817308,
+ 0.023834120952734184,
+ 0.05010690724638167,
+ 0.354562621152241,
+ 0.2758266957600524,
+ 0.024817535803922645,
+ 0.7623380312096293,
+ 0.09652145698232206,
+ 0.5726902734999234,
+ 0.60578901671202,
+ 0.7362547951906915,
+ 0.8589134263263506,
+ 0.20988288011033096,
+ 0.2430429667555,
+ 0.9988858031996198,
+ 0.3340889270406213,
+ 0.5857849126987936,
+ 0.15599047096069152,
+ 0.3475174423530928,
+ 0.2198101316528496,
+ 0.8290130754917284,
+ 0.11780168230253195,
+ 0.22260987036552515,
+ 0.3623272485510329,
+ 0.9530543282478636,
+ 0.07013719655071315,
+ 0.7788824376481164,
+ 0.4814634521814125,
+ 0.9559499661869194,
+ 0.5553331913225454,
+ 0.37352063311140216,
+ 0.3014117818715345,
+ 0.3484870328176773,
+ 0.2619538854437251,
+ 0.559109007403853,
+ 0.7981595459388747,
+ 0.031866209884248035,
+ 0.44051906312399797,
+ 0.17509214317000654,
+ 0.4821143065457364,
+ 0.4326645212108933,
+ 0.003010853482403264,
+ 0.18912682353336485,
+ 0.7221083526323264,
+ 0.7399197348173989,
+ 0.4009234973468615,
+ 0.2079769091638416,
+ 0.3218628762460536,
+ 0.7547646767584254,
+ 0.91727995391129,
+ 0.4483957756779064,
+ 0.45837462765753095
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.5
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/gepsi_lin_add_hFULL_hFULL.json b/paper/pheno_sim/sim_configs/gepsi_lin_add_hFULL_hFULL.json
new file mode 100644
index 0000000..62395ea
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/gepsi_lin_add_hFULL_hFULL.json
@@ -0,0 +1,251 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 37620531,
+ 50328436,
+ 12887032,
+ 21780332,
+ 52532271,
+ 2510963,
+ 20143022,
+ 30930222,
+ 32390553,
+ 56723329,
+ 29589082,
+ 47994210,
+ 13763845,
+ 33314913,
+ 58230931,
+ 37039069,
+ 43867349,
+ 56203985,
+ 34438693,
+ 10426597,
+ 51070460,
+ 58257389,
+ 48047821,
+ 6746450,
+ 41094765,
+ 47853124,
+ 29335480,
+ 3393376,
+ 15595193,
+ 38292025,
+ 29515771,
+ 15586077,
+ 13796644,
+ 54170518,
+ 50713411,
+ 54553697,
+ 53189428,
+ 56755451,
+ 54811680,
+ 1045173,
+ 39465161,
+ 43804115,
+ 1778039,
+ 40569551,
+ 8921033,
+ 52011164,
+ 49447713,
+ 51889109,
+ 57249503,
+ 33305012,
+ 2485656,
+ 33705455,
+ 1618982,
+ 7196565,
+ 5393748,
+ 54447325,
+ 54272614,
+ 16954218,
+ 5352619,
+ 6461716,
+ 57521142,
+ 32591791,
+ 7257444,
+ 15023219,
+ 14463674,
+ 49424247,
+ 55590599,
+ 19570428,
+ 29200002,
+ 43576164,
+ 29575619,
+ 51415515,
+ 58424951,
+ 49344521,
+ 789454,
+ 53893338,
+ 15190752,
+ 31751255,
+ 6995920,
+ 48601512,
+ 53800401,
+ 49034011,
+ 31668216,
+ 7831953,
+ 57866873,
+ 46974324,
+ 4080424,
+ 40906936,
+ 45039384,
+ 56308477,
+ 8808240,
+ 30058229,
+ 55815159,
+ 51593443,
+ 17221537,
+ 58846001,
+ 55715464,
+ 38735581,
+ 2350926,
+ 6652550
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "Constant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "constant": [
+ 0.9695967581004554,
+ 0.966274929488375,
+ 0.8105804225776749,
+ 0.6567964015969973,
+ 0.3482907852022946,
+ 0.13504792387815046,
+ 0.7344695348517115,
+ 0.6600360108601164,
+ 0.1832550550496601,
+ 0.16637466605738382,
+ 0.6986872479924985,
+ 0.5871858435526842,
+ 0.667436543382894,
+ 0.8662723564239886,
+ 0.21523110011355628,
+ 0.8224605535931229,
+ 0.20525449053741876,
+ 0.6872786494944153,
+ 0.1584264568668965,
+ 0.04950680605249125,
+ 0.8116511388128136,
+ 0.9789462045218515,
+ 0.1468679088224043,
+ 0.8267776832033774,
+ 0.23292050089013935,
+ 0.1570658485904738,
+ 0.5214961115949136,
+ 0.7544813195725961,
+ 0.104857629545257,
+ 0.3001807938231513,
+ 0.5196716859886722,
+ 0.12170177829324068,
+ 0.7118356605856234,
+ 0.8808130486073109,
+ 0.4958330195066123,
+ 0.2189335422840776,
+ 0.6453473830237891,
+ 0.5410013709842889,
+ 0.17987102053846082,
+ 0.09815992499509883,
+ 0.12891544509504893,
+ 0.7534685981221005,
+ 0.01716115325629375,
+ 0.7041891934111717,
+ 0.5679843168061518,
+ 0.15753306480371576,
+ 0.3130412902660837,
+ 0.2753121774205798,
+ 0.5774898449697439,
+ 0.5039722013245423,
+ 0.9363000120974924,
+ 0.7398003586804129,
+ 0.2325332442569357,
+ 0.4585751395317607,
+ 0.8158446072718815,
+ 0.6899539054458478,
+ 0.6580414636346641,
+ 0.7874797325920752,
+ 0.2101769638491905,
+ 0.4177227162437993,
+ 0.7019090463386396,
+ 0.8182099609829945,
+ 0.813809003677303,
+ 0.24738726971995384,
+ 0.15514739784190956,
+ 0.1259431774837696,
+ 0.5462753718912076,
+ 0.02887991081771768,
+ 0.05901633807694895,
+ 0.3251266011182901,
+ 0.5938881373729398,
+ 0.6271293236820559,
+ 0.9132271804919152,
+ 0.3915899539866893,
+ 0.9045407411476868,
+ 0.4426471781070872,
+ 0.528369847082051,
+ 0.8582070754128207,
+ 0.3959045840300993,
+ 0.5926458065812475,
+ 0.3870200815094891,
+ 0.0896528888158924,
+ 0.5778625580376056,
+ 0.8597990682600174,
+ 0.2359303469500337,
+ 0.0307974662837498,
+ 0.3061849177522972,
+ 0.8556452941917015,
+ 0.2868160293904309,
+ 0.33829030969756313,
+ 0.6094247786757018,
+ 0.3419267768371518,
+ 0.8956421425039621,
+ 0.5899331837801179,
+ 0.25167964540279697,
+ 0.6785303470051022,
+ 0.03912421116857212,
+ 0.5367631003665589,
+ 0.048534734358540055,
+ 0.05346885201792506
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 1.0
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar1000_h05_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h05_v1.json
new file mode 100644
index 0000000..19c1c0a
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h05_v1.json
@@ -0,0 +1,1055 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 36546015,
+ 57323275,
+ 17415457,
+ 44063815,
+ 18326222,
+ 30106275,
+ 51086098,
+ 42882829,
+ 33776125,
+ 556692,
+ 35496231,
+ 44418077,
+ 50248501,
+ 51473947,
+ 11955632,
+ 56401993,
+ 5893058,
+ 15430227,
+ 51444233,
+ 52957492,
+ 30894239,
+ 2350926,
+ 41637658,
+ 39621265,
+ 18455857,
+ 56277999,
+ 34266342,
+ 41947625,
+ 56758980,
+ 54965860,
+ 32727985,
+ 3005474,
+ 508626,
+ 11300584,
+ 2146852,
+ 54455256,
+ 4348967,
+ 22210971,
+ 41527275,
+ 14836462,
+ 49760724,
+ 56131709,
+ 51301456,
+ 54609836,
+ 54047013,
+ 17728134,
+ 4867690,
+ 2011117,
+ 9019429,
+ 20899673,
+ 18926705,
+ 14341871,
+ 45836109,
+ 9548788,
+ 1763776,
+ 21823852,
+ 8772045,
+ 55013827,
+ 35435001,
+ 23558905,
+ 10127568,
+ 35595222,
+ 10106871,
+ 29508489,
+ 38040836,
+ 10224548,
+ 57640664,
+ 31929293,
+ 3961533,
+ 40478516,
+ 15138406,
+ 12165770,
+ 53239084,
+ 54182518,
+ 6187686,
+ 54634830,
+ 58131576,
+ 23647327,
+ 54313707,
+ 907821,
+ 48573648,
+ 37230491,
+ 42353436,
+ 8003040,
+ 5309846,
+ 47032344,
+ 53825305,
+ 45769181,
+ 44998259,
+ 19109957,
+ 37933936,
+ 12133692,
+ 31891775,
+ 54077870,
+ 32441876,
+ 40598201,
+ 56308477,
+ 50431946,
+ 608668,
+ 52580003,
+ 39266289,
+ 35002775,
+ 51728641,
+ 9001822,
+ 13383313,
+ 37038092,
+ 13581464,
+ 51983673,
+ 32121000,
+ 51809973,
+ 49233406,
+ 2917287,
+ 41271534,
+ 53021396,
+ 10449358,
+ 44947197,
+ 55574496,
+ 53078012,
+ 7296283,
+ 57755914,
+ 18311199,
+ 10670184,
+ 9057896,
+ 57058998,
+ 57768636,
+ 4783024,
+ 42219428,
+ 10002861,
+ 52632802,
+ 55564670,
+ 14029269,
+ 56403361,
+ 3143320,
+ 54719858,
+ 18803172,
+ 24475700,
+ 47677604,
+ 39250337,
+ 55103756,
+ 48896237,
+ 47136936,
+ 35524944,
+ 366451,
+ 47523427,
+ 10020385,
+ 45818835,
+ 39266194,
+ 38569359,
+ 12630235,
+ 46491358,
+ 5516115,
+ 33532300,
+ 49993535,
+ 23205816,
+ 11704630,
+ 39955351,
+ 17644301,
+ 2634823,
+ 31317393,
+ 49605705,
+ 54141524,
+ 51868035,
+ 55443467,
+ 57869881,
+ 17170885,
+ 32506502,
+ 17153149,
+ 10920115,
+ 55958845,
+ 35397786,
+ 43841838,
+ 33389327,
+ 56764791,
+ 55032293,
+ 7743975,
+ 54655836,
+ 23599638,
+ 35799200,
+ 45389596,
+ 52941847,
+ 7253184,
+ 49043693,
+ 1773466,
+ 5789565,
+ 8787273,
+ 31434505,
+ 16855265,
+ 51353973,
+ 57417056,
+ 56387677,
+ 791630,
+ 58599443,
+ 39539336,
+ 19212298,
+ 56306196,
+ 51643997,
+ 47313331,
+ 28257867,
+ 46694319,
+ 50940315,
+ 16060658,
+ 38527052,
+ 53344919,
+ 30939748,
+ 28554581,
+ 21297358,
+ 16408418,
+ 52097401,
+ 37175752,
+ 4821612,
+ 18368810,
+ 601373,
+ 30096708,
+ 48317892,
+ 49315992,
+ 45043259,
+ 22112089,
+ 18558517,
+ 32685208,
+ 29604802,
+ 48687779,
+ 7815376,
+ 58974378,
+ 3478864,
+ 42887492,
+ 35918910,
+ 10920315,
+ 36567153,
+ 50109230,
+ 42045576,
+ 45122043,
+ 40724776,
+ 18847921,
+ 593757,
+ 14288104,
+ 49209010,
+ 55937417,
+ 15513003,
+ 38711515,
+ 51042560,
+ 18700047,
+ 45543373,
+ 52751335,
+ 6199880,
+ 29949075,
+ 15128250,
+ 17634505,
+ 40247355,
+ 51260956,
+ 50740979,
+ 21962370,
+ 52795682,
+ 6744762,
+ 16059846,
+ 3372514,
+ 40212855,
+ 2339949,
+ 3781557,
+ 12225324,
+ 36295375,
+ 36349752,
+ 10523086,
+ 14587982,
+ 37173385,
+ 17367092,
+ 45038456,
+ 31051406,
+ 15905289,
+ 52659991,
+ 28587534,
+ 48821757,
+ 5478748,
+ 40168701,
+ 1124871,
+ 46766459,
+ 18197635,
+ 1152257,
+ 7970635,
+ 9601155,
+ 24113517,
+ 57791758,
+ 53767180,
+ 18411802,
+ 2337286,
+ 47300066,
+ 10114759,
+ 40163241,
+ 23207354,
+ 47539572,
+ 56723652,
+ 33347439,
+ 39313977,
+ 49222483,
+ 14299125,
+ 44800714,
+ 21409361,
+ 17338033,
+ 45257201,
+ 18679155,
+ 33036281,
+ 15270636,
+ 41109456,
+ 850299,
+ 33468067,
+ 14608008,
+ 31071370,
+ 5324873,
+ 51069146,
+ 977763,
+ 3434028,
+ 35495680,
+ 39408688,
+ 51135457,
+ 19658232,
+ 6972939,
+ 38221032,
+ 51402682,
+ 44166187,
+ 15971473,
+ 49206726,
+ 56301501,
+ 54114819,
+ 9492370,
+ 50829530,
+ 32479224,
+ 17012657,
+ 2190845,
+ 57939619,
+ 52696006,
+ 51160387,
+ 38717143,
+ 34074328,
+ 5794240,
+ 51463646,
+ 1207238,
+ 44890817,
+ 51405673,
+ 35072183,
+ 20976742,
+ 38475375,
+ 22731058,
+ 48727625,
+ 712340,
+ 3743703,
+ 22521619,
+ 23447373,
+ 5972358,
+ 7424528,
+ 11492060,
+ 4511181,
+ 47661961,
+ 8949716,
+ 19738554,
+ 54655647,
+ 1858281,
+ 9104899,
+ 31240705,
+ 2085347,
+ 13967542,
+ 59050356,
+ 33163841,
+ 52217405,
+ 51633660,
+ 14950679,
+ 24179959,
+ 1804174,
+ 35999198,
+ 7936208,
+ 3733333,
+ 54419539,
+ 3976103,
+ 43519362,
+ 46112907,
+ 2198240,
+ 11215846,
+ 7508913,
+ 18829770,
+ 35437618,
+ 55106663,
+ 42989155,
+ 49631698,
+ 20722999,
+ 57084609,
+ 16642465,
+ 56032711,
+ 33599745,
+ 5868309,
+ 19830928,
+ 45382034,
+ 10215271,
+ 5753116,
+ 51999271,
+ 41725932,
+ 54170900,
+ 46047055,
+ 4312042,
+ 52604654,
+ 22831067,
+ 53077258,
+ 6769415,
+ 46721467,
+ 22750932,
+ 6736607,
+ 36051333,
+ 8486884,
+ 47767643,
+ 14447674,
+ 30164574,
+ 47332590,
+ 5382472,
+ 50148052,
+ 31498374,
+ 20494856,
+ 46566881,
+ 31961928,
+ 55484163,
+ 28637480,
+ 49382171,
+ 17549328,
+ 28211945,
+ 18457955,
+ 406783,
+ 53187079,
+ 17362941,
+ 8796021,
+ 17516764,
+ 50161265,
+ 32183171,
+ 6903920,
+ 35898899,
+ 42596056,
+ 9027148,
+ 43357365,
+ 39681367,
+ 16459005,
+ 57773447,
+ 18518216,
+ 56703248,
+ 54297423,
+ 36119330,
+ 2152224,
+ 11466741,
+ 39044492,
+ 35835940,
+ 38173433,
+ 5397866,
+ 8787140,
+ 32115446,
+ 2279695,
+ 51994367,
+ 10099910,
+ 653468,
+ 41386814,
+ 15676750,
+ 31830613,
+ 35643713,
+ 528591,
+ 36164495,
+ 39410119,
+ 2229584,
+ 49367739,
+ 36351768,
+ 56699244,
+ 523110,
+ 2312386,
+ 52484221,
+ 32056504,
+ 20873204,
+ 6940439,
+ 1119963,
+ 8483308,
+ 18912264,
+ 38993372,
+ 45924532,
+ 2926993,
+ 47144045,
+ 52367633,
+ 20808143,
+ 54633058,
+ 13640224,
+ 55955282,
+ 48570915,
+ 14942691,
+ 21347598,
+ 3054567,
+ 839158,
+ 46345886,
+ 8257417,
+ 54280799,
+ 56716921,
+ 59030580,
+ 52224441,
+ 10124504,
+ 11319978,
+ 30155027,
+ 38981284,
+ 54866045,
+ 53871390,
+ 47033030,
+ 14115718,
+ 2927085,
+ 30240345,
+ 2833864,
+ 39167360,
+ 30171271,
+ 44085827,
+ 52738606,
+ 28408240,
+ 13556797,
+ 31376020,
+ 55850651,
+ 455285,
+ 24371875,
+ 35727654,
+ 32461213,
+ 51278536,
+ 28843848,
+ 48621335,
+ 54164590,
+ 51967867,
+ 407900,
+ 32956946,
+ 52152481,
+ 29154853,
+ 56360663,
+ 37690420,
+ 50820610,
+ 4510530,
+ 51892218,
+ 16670660,
+ 41756038,
+ 5270047,
+ 33138067,
+ 7837743,
+ 48217665,
+ 1076025,
+ 31668562,
+ 9125547,
+ 1119019,
+ 11245472,
+ 2244623,
+ 4971561,
+ 28151265,
+ 52022102,
+ 22019133,
+ 13704512,
+ 9390224,
+ 57420124,
+ 9631701,
+ 55329892,
+ 32526017,
+ 3236191,
+ 35635231,
+ 35028009,
+ 29890018,
+ 53746800,
+ 49206674,
+ 13574131,
+ 7103211,
+ 43870887,
+ 40168669,
+ 56011573,
+ 56031838,
+ 17041172,
+ 6198291,
+ 9020211,
+ 46774360,
+ 30054617,
+ 8764560,
+ 532066,
+ 58010642,
+ 55225108,
+ 23633079,
+ 15291576,
+ 41467722,
+ 53455877,
+ 53695141,
+ 51276046,
+ 10295433,
+ 56505712,
+ 3198841,
+ 42393286,
+ 46032124,
+ 8099824,
+ 48469675,
+ 2481236,
+ 1527772,
+ 32436858,
+ 5194778,
+ 29247283,
+ 21436738,
+ 51979222,
+ 16429375,
+ 4569809,
+ 3790866,
+ 10079093,
+ 45683448,
+ 1813207,
+ 11537377,
+ 11671427,
+ 35577163,
+ 47851021,
+ 3311830,
+ 7255984,
+ 6263495,
+ 41552739,
+ 57806937,
+ 46830079,
+ 57667735,
+ 4681152,
+ 6594602,
+ 3374818,
+ 50420671,
+ 38199462,
+ 30458799,
+ 1966430,
+ 9362443,
+ 6901891,
+ 50801194,
+ 47311673,
+ 58425928,
+ 56323867,
+ 46929591,
+ 52011164,
+ 8396758,
+ 37050703,
+ 16860084,
+ 34482758,
+ 11675455,
+ 11942362,
+ 41693940,
+ 17015499,
+ 28070483,
+ 9343660,
+ 41654689,
+ 50902196,
+ 55373710,
+ 14512489,
+ 1899264,
+ 6658613,
+ 51726911,
+ 15275757,
+ 14806551,
+ 10672493,
+ 12876964,
+ 18820164,
+ 10189321,
+ 55870260,
+ 58251468,
+ 41336795,
+ 48087491,
+ 55922885,
+ 52967570,
+ 33489039,
+ 47012749,
+ 37875631,
+ 8118000,
+ 16899731,
+ 8173312,
+ 34139099,
+ 11849841,
+ 1794257,
+ 9024871,
+ 37854040,
+ 646507,
+ 4472098,
+ 35246250,
+ 13683881,
+ 35887023,
+ 55739048,
+ 53115785,
+ 35952065,
+ 37183250,
+ 55972983,
+ 9218054,
+ 33355892,
+ 990281,
+ 35836600,
+ 58280265,
+ 35124211,
+ 51821262,
+ 825680,
+ 57736003,
+ 47938663,
+ 47756776,
+ 50312801,
+ 20431814,
+ 34517370,
+ 15529193,
+ 56343909,
+ 3584261,
+ 18042945,
+ 757412,
+ 13521528,
+ 48842083,
+ 53068851,
+ 13934296,
+ 40011857,
+ 51991241,
+ 32647937,
+ 39161851,
+ 53212361,
+ 17642864,
+ 3020678,
+ 36457755,
+ 941325,
+ 52887427,
+ 9074950,
+ 35462160,
+ 32587297,
+ 32226925,
+ 35500955,
+ 46445422,
+ 35128640,
+ 16192958,
+ 44566766,
+ 13604414,
+ 13584318,
+ 21387754,
+ 6817368,
+ 3534655,
+ 51480840,
+ 11836477,
+ 15036496,
+ 55990603,
+ 48697641,
+ 3797100,
+ 17544039,
+ 39865736,
+ 9347495,
+ 2675678,
+ 45395619,
+ 41333441,
+ 9070225,
+ 15169836,
+ 40580431,
+ 16126821,
+ 5946266,
+ 39042032,
+ 2794410,
+ 52298281,
+ 32823374,
+ 4442811,
+ 562253,
+ 11700877,
+ 53716190,
+ 55212754,
+ 10143082,
+ 33281924,
+ 2662783,
+ 50504250,
+ 58631968,
+ 35239780,
+ 48059326,
+ 54120074,
+ 52258677,
+ 31482804,
+ 50986649,
+ 41341589,
+ 45862436,
+ 34110446,
+ 53284135,
+ 29994722,
+ 5935035,
+ 30952008,
+ 50244925,
+ 17485311,
+ 47108485,
+ 5608214,
+ 2224387,
+ 8620410,
+ 17934018,
+ 55888095,
+ 36122602,
+ 15727766,
+ 29707067,
+ 49939420,
+ 20136547,
+ 47225377,
+ 41298228,
+ 18613917,
+ 15198441,
+ 4818378,
+ 50839838,
+ 34980189,
+ 52570714,
+ 40176836,
+ 21823790,
+ 51070460,
+ 50244487,
+ 20046147,
+ 42486461,
+ 39391547,
+ 55913678,
+ 17957309,
+ 19714886,
+ 14713522,
+ 18376509,
+ 51349090,
+ 9312256,
+ 55494651,
+ 17432677,
+ 51328794,
+ 34265878,
+ 45048858,
+ 7817819,
+ 31329217,
+ 814907,
+ 55001283,
+ 51155522,
+ 36119911,
+ 46251768,
+ 40116994,
+ 36161913,
+ 39850982,
+ 54855568,
+ 40813912,
+ 4378827,
+ 21023438,
+ 36918102,
+ 52293208,
+ 54587396,
+ 50093248,
+ 31155393,
+ 55357462,
+ 37854580,
+ 29681344,
+ 44470147,
+ 38146923,
+ 12921186,
+ 9128889,
+ 55509865,
+ 22098198,
+ 6833210,
+ 35453460,
+ 31603130,
+ 55536595,
+ 46254070,
+ 47156201,
+ 48898786,
+ 17936233,
+ 55063691,
+ 7238771,
+ 5861300,
+ 57156445,
+ 58661549,
+ 32568772,
+ 8129464,
+ 8432138,
+ 401213,
+ 41199718,
+ 633013,
+ 31693677,
+ 31096453,
+ 10520064,
+ 42899539,
+ 17777508,
+ 39499089,
+ 18974001,
+ 49576155,
+ 8324893,
+ 45179567,
+ 36534273,
+ 48243036,
+ 7544474,
+ 7804512,
+ 28028452,
+ 6517476,
+ 13712366,
+ 2196783,
+ 49507446,
+ 50533877,
+ 4357555,
+ 57408581,
+ 12802153,
+ 57909827,
+ 52043069,
+ 14692790,
+ 51254187,
+ 48589146,
+ 53541112,
+ 54498789,
+ 45326664,
+ 52641561,
+ 45449166,
+ 3660619,
+ 51153432,
+ 36418603,
+ 51829548,
+ 53195134,
+ 12982783,
+ 39359377,
+ 50207774,
+ 41712275,
+ 39207742,
+ 6767743,
+ 6458240,
+ 15131330,
+ 20011986,
+ 14709846,
+ 957504,
+ 43268140,
+ 32119538,
+ 32057219,
+ 8386367,
+ 38875072,
+ 48322918,
+ 1943717,
+ 18928671,
+ 6702246,
+ 24067865,
+ 46923752,
+ 58801784,
+ 17113634,
+ 58559583,
+ 45199082,
+ 10151721,
+ 17650053,
+ 47239972,
+ 56499279,
+ 717664,
+ 13754039,
+ 56237665,
+ 34213920,
+ 44176333,
+ 29828675,
+ 2206575,
+ 34664325,
+ 12331379,
+ 30603410,
+ 53267089,
+ 52216154,
+ 1021725,
+ 44377669,
+ 12641232,
+ 3115402,
+ 6808656,
+ 49064855,
+ 13585351,
+ 15690666,
+ 846716,
+ 11558451,
+ 50549462,
+ 33585617,
+ 49447748,
+ 19855549,
+ 23065177,
+ 13262322,
+ 33768892,
+ 6678753,
+ 13557907,
+ 56369189,
+ 53849956,
+ 11729197,
+ 3722669,
+ 38872634,
+ 17938891,
+ 30955279,
+ 45017956,
+ 46247641,
+ 55525497,
+ 58233008,
+ 1821637,
+ 5770762,
+ 55080578,
+ 47129570,
+ 2098063,
+ 54584438,
+ 56805360,
+ 41806918,
+ 2500252,
+ 1005230,
+ 295676,
+ 2500027,
+ 384724,
+ 49661678,
+ 5260674,
+ 32006579,
+ 37613594,
+ 55661477,
+ 3180770,
+ 7413468,
+ 21000562,
+ 41117300,
+ 45448465,
+ 37267194,
+ 3918721,
+ 22729318,
+ 13577102,
+ 57408419,
+ 49899076,
+ 19300192,
+ 35612159,
+ 54590425,
+ 41356188,
+ 37940044,
+ 50284994,
+ 29373446,
+ 58568958,
+ 2238667
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.05
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar1000_h1_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h1_v1.json
new file mode 100644
index 0000000..5e1867e
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h1_v1.json
@@ -0,0 +1,1055 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 36546015,
+ 57323275,
+ 17415457,
+ 44063815,
+ 18326222,
+ 30106275,
+ 51086098,
+ 42882829,
+ 33776125,
+ 556692,
+ 35496231,
+ 44418077,
+ 50248501,
+ 51473947,
+ 11955632,
+ 56401993,
+ 5893058,
+ 15430227,
+ 51444233,
+ 52957492,
+ 30894239,
+ 2350926,
+ 41637658,
+ 39621265,
+ 18455857,
+ 56277999,
+ 34266342,
+ 41947625,
+ 56758980,
+ 54965860,
+ 32727985,
+ 3005474,
+ 508626,
+ 11300584,
+ 2146852,
+ 54455256,
+ 4348967,
+ 22210971,
+ 41527275,
+ 14836462,
+ 49760724,
+ 56131709,
+ 51301456,
+ 54609836,
+ 54047013,
+ 17728134,
+ 4867690,
+ 2011117,
+ 9019429,
+ 20899673,
+ 18926705,
+ 14341871,
+ 45836109,
+ 9548788,
+ 1763776,
+ 21823852,
+ 8772045,
+ 55013827,
+ 35435001,
+ 23558905,
+ 10127568,
+ 35595222,
+ 10106871,
+ 29508489,
+ 38040836,
+ 10224548,
+ 57640664,
+ 31929293,
+ 3961533,
+ 40478516,
+ 15138406,
+ 12165770,
+ 53239084,
+ 54182518,
+ 6187686,
+ 54634830,
+ 58131576,
+ 23647327,
+ 54313707,
+ 907821,
+ 48573648,
+ 37230491,
+ 42353436,
+ 8003040,
+ 5309846,
+ 47032344,
+ 53825305,
+ 45769181,
+ 44998259,
+ 19109957,
+ 37933936,
+ 12133692,
+ 31891775,
+ 54077870,
+ 32441876,
+ 40598201,
+ 56308477,
+ 50431946,
+ 608668,
+ 52580003,
+ 39266289,
+ 35002775,
+ 51728641,
+ 9001822,
+ 13383313,
+ 37038092,
+ 13581464,
+ 51983673,
+ 32121000,
+ 51809973,
+ 49233406,
+ 2917287,
+ 41271534,
+ 53021396,
+ 10449358,
+ 44947197,
+ 55574496,
+ 53078012,
+ 7296283,
+ 57755914,
+ 18311199,
+ 10670184,
+ 9057896,
+ 57058998,
+ 57768636,
+ 4783024,
+ 42219428,
+ 10002861,
+ 52632802,
+ 55564670,
+ 14029269,
+ 56403361,
+ 3143320,
+ 54719858,
+ 18803172,
+ 24475700,
+ 47677604,
+ 39250337,
+ 55103756,
+ 48896237,
+ 47136936,
+ 35524944,
+ 366451,
+ 47523427,
+ 10020385,
+ 45818835,
+ 39266194,
+ 38569359,
+ 12630235,
+ 46491358,
+ 5516115,
+ 33532300,
+ 49993535,
+ 23205816,
+ 11704630,
+ 39955351,
+ 17644301,
+ 2634823,
+ 31317393,
+ 49605705,
+ 54141524,
+ 51868035,
+ 55443467,
+ 57869881,
+ 17170885,
+ 32506502,
+ 17153149,
+ 10920115,
+ 55958845,
+ 35397786,
+ 43841838,
+ 33389327,
+ 56764791,
+ 55032293,
+ 7743975,
+ 54655836,
+ 23599638,
+ 35799200,
+ 45389596,
+ 52941847,
+ 7253184,
+ 49043693,
+ 1773466,
+ 5789565,
+ 8787273,
+ 31434505,
+ 16855265,
+ 51353973,
+ 57417056,
+ 56387677,
+ 791630,
+ 58599443,
+ 39539336,
+ 19212298,
+ 56306196,
+ 51643997,
+ 47313331,
+ 28257867,
+ 46694319,
+ 50940315,
+ 16060658,
+ 38527052,
+ 53344919,
+ 30939748,
+ 28554581,
+ 21297358,
+ 16408418,
+ 52097401,
+ 37175752,
+ 4821612,
+ 18368810,
+ 601373,
+ 30096708,
+ 48317892,
+ 49315992,
+ 45043259,
+ 22112089,
+ 18558517,
+ 32685208,
+ 29604802,
+ 48687779,
+ 7815376,
+ 58974378,
+ 3478864,
+ 42887492,
+ 35918910,
+ 10920315,
+ 36567153,
+ 50109230,
+ 42045576,
+ 45122043,
+ 40724776,
+ 18847921,
+ 593757,
+ 14288104,
+ 49209010,
+ 55937417,
+ 15513003,
+ 38711515,
+ 51042560,
+ 18700047,
+ 45543373,
+ 52751335,
+ 6199880,
+ 29949075,
+ 15128250,
+ 17634505,
+ 40247355,
+ 51260956,
+ 50740979,
+ 21962370,
+ 52795682,
+ 6744762,
+ 16059846,
+ 3372514,
+ 40212855,
+ 2339949,
+ 3781557,
+ 12225324,
+ 36295375,
+ 36349752,
+ 10523086,
+ 14587982,
+ 37173385,
+ 17367092,
+ 45038456,
+ 31051406,
+ 15905289,
+ 52659991,
+ 28587534,
+ 48821757,
+ 5478748,
+ 40168701,
+ 1124871,
+ 46766459,
+ 18197635,
+ 1152257,
+ 7970635,
+ 9601155,
+ 24113517,
+ 57791758,
+ 53767180,
+ 18411802,
+ 2337286,
+ 47300066,
+ 10114759,
+ 40163241,
+ 23207354,
+ 47539572,
+ 56723652,
+ 33347439,
+ 39313977,
+ 49222483,
+ 14299125,
+ 44800714,
+ 21409361,
+ 17338033,
+ 45257201,
+ 18679155,
+ 33036281,
+ 15270636,
+ 41109456,
+ 850299,
+ 33468067,
+ 14608008,
+ 31071370,
+ 5324873,
+ 51069146,
+ 977763,
+ 3434028,
+ 35495680,
+ 39408688,
+ 51135457,
+ 19658232,
+ 6972939,
+ 38221032,
+ 51402682,
+ 44166187,
+ 15971473,
+ 49206726,
+ 56301501,
+ 54114819,
+ 9492370,
+ 50829530,
+ 32479224,
+ 17012657,
+ 2190845,
+ 57939619,
+ 52696006,
+ 51160387,
+ 38717143,
+ 34074328,
+ 5794240,
+ 51463646,
+ 1207238,
+ 44890817,
+ 51405673,
+ 35072183,
+ 20976742,
+ 38475375,
+ 22731058,
+ 48727625,
+ 712340,
+ 3743703,
+ 22521619,
+ 23447373,
+ 5972358,
+ 7424528,
+ 11492060,
+ 4511181,
+ 47661961,
+ 8949716,
+ 19738554,
+ 54655647,
+ 1858281,
+ 9104899,
+ 31240705,
+ 2085347,
+ 13967542,
+ 59050356,
+ 33163841,
+ 52217405,
+ 51633660,
+ 14950679,
+ 24179959,
+ 1804174,
+ 35999198,
+ 7936208,
+ 3733333,
+ 54419539,
+ 3976103,
+ 43519362,
+ 46112907,
+ 2198240,
+ 11215846,
+ 7508913,
+ 18829770,
+ 35437618,
+ 55106663,
+ 42989155,
+ 49631698,
+ 20722999,
+ 57084609,
+ 16642465,
+ 56032711,
+ 33599745,
+ 5868309,
+ 19830928,
+ 45382034,
+ 10215271,
+ 5753116,
+ 51999271,
+ 41725932,
+ 54170900,
+ 46047055,
+ 4312042,
+ 52604654,
+ 22831067,
+ 53077258,
+ 6769415,
+ 46721467,
+ 22750932,
+ 6736607,
+ 36051333,
+ 8486884,
+ 47767643,
+ 14447674,
+ 30164574,
+ 47332590,
+ 5382472,
+ 50148052,
+ 31498374,
+ 20494856,
+ 46566881,
+ 31961928,
+ 55484163,
+ 28637480,
+ 49382171,
+ 17549328,
+ 28211945,
+ 18457955,
+ 406783,
+ 53187079,
+ 17362941,
+ 8796021,
+ 17516764,
+ 50161265,
+ 32183171,
+ 6903920,
+ 35898899,
+ 42596056,
+ 9027148,
+ 43357365,
+ 39681367,
+ 16459005,
+ 57773447,
+ 18518216,
+ 56703248,
+ 54297423,
+ 36119330,
+ 2152224,
+ 11466741,
+ 39044492,
+ 35835940,
+ 38173433,
+ 5397866,
+ 8787140,
+ 32115446,
+ 2279695,
+ 51994367,
+ 10099910,
+ 653468,
+ 41386814,
+ 15676750,
+ 31830613,
+ 35643713,
+ 528591,
+ 36164495,
+ 39410119,
+ 2229584,
+ 49367739,
+ 36351768,
+ 56699244,
+ 523110,
+ 2312386,
+ 52484221,
+ 32056504,
+ 20873204,
+ 6940439,
+ 1119963,
+ 8483308,
+ 18912264,
+ 38993372,
+ 45924532,
+ 2926993,
+ 47144045,
+ 52367633,
+ 20808143,
+ 54633058,
+ 13640224,
+ 55955282,
+ 48570915,
+ 14942691,
+ 21347598,
+ 3054567,
+ 839158,
+ 46345886,
+ 8257417,
+ 54280799,
+ 56716921,
+ 59030580,
+ 52224441,
+ 10124504,
+ 11319978,
+ 30155027,
+ 38981284,
+ 54866045,
+ 53871390,
+ 47033030,
+ 14115718,
+ 2927085,
+ 30240345,
+ 2833864,
+ 39167360,
+ 30171271,
+ 44085827,
+ 52738606,
+ 28408240,
+ 13556797,
+ 31376020,
+ 55850651,
+ 455285,
+ 24371875,
+ 35727654,
+ 32461213,
+ 51278536,
+ 28843848,
+ 48621335,
+ 54164590,
+ 51967867,
+ 407900,
+ 32956946,
+ 52152481,
+ 29154853,
+ 56360663,
+ 37690420,
+ 50820610,
+ 4510530,
+ 51892218,
+ 16670660,
+ 41756038,
+ 5270047,
+ 33138067,
+ 7837743,
+ 48217665,
+ 1076025,
+ 31668562,
+ 9125547,
+ 1119019,
+ 11245472,
+ 2244623,
+ 4971561,
+ 28151265,
+ 52022102,
+ 22019133,
+ 13704512,
+ 9390224,
+ 57420124,
+ 9631701,
+ 55329892,
+ 32526017,
+ 3236191,
+ 35635231,
+ 35028009,
+ 29890018,
+ 53746800,
+ 49206674,
+ 13574131,
+ 7103211,
+ 43870887,
+ 40168669,
+ 56011573,
+ 56031838,
+ 17041172,
+ 6198291,
+ 9020211,
+ 46774360,
+ 30054617,
+ 8764560,
+ 532066,
+ 58010642,
+ 55225108,
+ 23633079,
+ 15291576,
+ 41467722,
+ 53455877,
+ 53695141,
+ 51276046,
+ 10295433,
+ 56505712,
+ 3198841,
+ 42393286,
+ 46032124,
+ 8099824,
+ 48469675,
+ 2481236,
+ 1527772,
+ 32436858,
+ 5194778,
+ 29247283,
+ 21436738,
+ 51979222,
+ 16429375,
+ 4569809,
+ 3790866,
+ 10079093,
+ 45683448,
+ 1813207,
+ 11537377,
+ 11671427,
+ 35577163,
+ 47851021,
+ 3311830,
+ 7255984,
+ 6263495,
+ 41552739,
+ 57806937,
+ 46830079,
+ 57667735,
+ 4681152,
+ 6594602,
+ 3374818,
+ 50420671,
+ 38199462,
+ 30458799,
+ 1966430,
+ 9362443,
+ 6901891,
+ 50801194,
+ 47311673,
+ 58425928,
+ 56323867,
+ 46929591,
+ 52011164,
+ 8396758,
+ 37050703,
+ 16860084,
+ 34482758,
+ 11675455,
+ 11942362,
+ 41693940,
+ 17015499,
+ 28070483,
+ 9343660,
+ 41654689,
+ 50902196,
+ 55373710,
+ 14512489,
+ 1899264,
+ 6658613,
+ 51726911,
+ 15275757,
+ 14806551,
+ 10672493,
+ 12876964,
+ 18820164,
+ 10189321,
+ 55870260,
+ 58251468,
+ 41336795,
+ 48087491,
+ 55922885,
+ 52967570,
+ 33489039,
+ 47012749,
+ 37875631,
+ 8118000,
+ 16899731,
+ 8173312,
+ 34139099,
+ 11849841,
+ 1794257,
+ 9024871,
+ 37854040,
+ 646507,
+ 4472098,
+ 35246250,
+ 13683881,
+ 35887023,
+ 55739048,
+ 53115785,
+ 35952065,
+ 37183250,
+ 55972983,
+ 9218054,
+ 33355892,
+ 990281,
+ 35836600,
+ 58280265,
+ 35124211,
+ 51821262,
+ 825680,
+ 57736003,
+ 47938663,
+ 47756776,
+ 50312801,
+ 20431814,
+ 34517370,
+ 15529193,
+ 56343909,
+ 3584261,
+ 18042945,
+ 757412,
+ 13521528,
+ 48842083,
+ 53068851,
+ 13934296,
+ 40011857,
+ 51991241,
+ 32647937,
+ 39161851,
+ 53212361,
+ 17642864,
+ 3020678,
+ 36457755,
+ 941325,
+ 52887427,
+ 9074950,
+ 35462160,
+ 32587297,
+ 32226925,
+ 35500955,
+ 46445422,
+ 35128640,
+ 16192958,
+ 44566766,
+ 13604414,
+ 13584318,
+ 21387754,
+ 6817368,
+ 3534655,
+ 51480840,
+ 11836477,
+ 15036496,
+ 55990603,
+ 48697641,
+ 3797100,
+ 17544039,
+ 39865736,
+ 9347495,
+ 2675678,
+ 45395619,
+ 41333441,
+ 9070225,
+ 15169836,
+ 40580431,
+ 16126821,
+ 5946266,
+ 39042032,
+ 2794410,
+ 52298281,
+ 32823374,
+ 4442811,
+ 562253,
+ 11700877,
+ 53716190,
+ 55212754,
+ 10143082,
+ 33281924,
+ 2662783,
+ 50504250,
+ 58631968,
+ 35239780,
+ 48059326,
+ 54120074,
+ 52258677,
+ 31482804,
+ 50986649,
+ 41341589,
+ 45862436,
+ 34110446,
+ 53284135,
+ 29994722,
+ 5935035,
+ 30952008,
+ 50244925,
+ 17485311,
+ 47108485,
+ 5608214,
+ 2224387,
+ 8620410,
+ 17934018,
+ 55888095,
+ 36122602,
+ 15727766,
+ 29707067,
+ 49939420,
+ 20136547,
+ 47225377,
+ 41298228,
+ 18613917,
+ 15198441,
+ 4818378,
+ 50839838,
+ 34980189,
+ 52570714,
+ 40176836,
+ 21823790,
+ 51070460,
+ 50244487,
+ 20046147,
+ 42486461,
+ 39391547,
+ 55913678,
+ 17957309,
+ 19714886,
+ 14713522,
+ 18376509,
+ 51349090,
+ 9312256,
+ 55494651,
+ 17432677,
+ 51328794,
+ 34265878,
+ 45048858,
+ 7817819,
+ 31329217,
+ 814907,
+ 55001283,
+ 51155522,
+ 36119911,
+ 46251768,
+ 40116994,
+ 36161913,
+ 39850982,
+ 54855568,
+ 40813912,
+ 4378827,
+ 21023438,
+ 36918102,
+ 52293208,
+ 54587396,
+ 50093248,
+ 31155393,
+ 55357462,
+ 37854580,
+ 29681344,
+ 44470147,
+ 38146923,
+ 12921186,
+ 9128889,
+ 55509865,
+ 22098198,
+ 6833210,
+ 35453460,
+ 31603130,
+ 55536595,
+ 46254070,
+ 47156201,
+ 48898786,
+ 17936233,
+ 55063691,
+ 7238771,
+ 5861300,
+ 57156445,
+ 58661549,
+ 32568772,
+ 8129464,
+ 8432138,
+ 401213,
+ 41199718,
+ 633013,
+ 31693677,
+ 31096453,
+ 10520064,
+ 42899539,
+ 17777508,
+ 39499089,
+ 18974001,
+ 49576155,
+ 8324893,
+ 45179567,
+ 36534273,
+ 48243036,
+ 7544474,
+ 7804512,
+ 28028452,
+ 6517476,
+ 13712366,
+ 2196783,
+ 49507446,
+ 50533877,
+ 4357555,
+ 57408581,
+ 12802153,
+ 57909827,
+ 52043069,
+ 14692790,
+ 51254187,
+ 48589146,
+ 53541112,
+ 54498789,
+ 45326664,
+ 52641561,
+ 45449166,
+ 3660619,
+ 51153432,
+ 36418603,
+ 51829548,
+ 53195134,
+ 12982783,
+ 39359377,
+ 50207774,
+ 41712275,
+ 39207742,
+ 6767743,
+ 6458240,
+ 15131330,
+ 20011986,
+ 14709846,
+ 957504,
+ 43268140,
+ 32119538,
+ 32057219,
+ 8386367,
+ 38875072,
+ 48322918,
+ 1943717,
+ 18928671,
+ 6702246,
+ 24067865,
+ 46923752,
+ 58801784,
+ 17113634,
+ 58559583,
+ 45199082,
+ 10151721,
+ 17650053,
+ 47239972,
+ 56499279,
+ 717664,
+ 13754039,
+ 56237665,
+ 34213920,
+ 44176333,
+ 29828675,
+ 2206575,
+ 34664325,
+ 12331379,
+ 30603410,
+ 53267089,
+ 52216154,
+ 1021725,
+ 44377669,
+ 12641232,
+ 3115402,
+ 6808656,
+ 49064855,
+ 13585351,
+ 15690666,
+ 846716,
+ 11558451,
+ 50549462,
+ 33585617,
+ 49447748,
+ 19855549,
+ 23065177,
+ 13262322,
+ 33768892,
+ 6678753,
+ 13557907,
+ 56369189,
+ 53849956,
+ 11729197,
+ 3722669,
+ 38872634,
+ 17938891,
+ 30955279,
+ 45017956,
+ 46247641,
+ 55525497,
+ 58233008,
+ 1821637,
+ 5770762,
+ 55080578,
+ 47129570,
+ 2098063,
+ 54584438,
+ 56805360,
+ 41806918,
+ 2500252,
+ 1005230,
+ 295676,
+ 2500027,
+ 384724,
+ 49661678,
+ 5260674,
+ 32006579,
+ 37613594,
+ 55661477,
+ 3180770,
+ 7413468,
+ 21000562,
+ 41117300,
+ 45448465,
+ 37267194,
+ 3918721,
+ 22729318,
+ 13577102,
+ 57408419,
+ 49899076,
+ 19300192,
+ 35612159,
+ 54590425,
+ 41356188,
+ 37940044,
+ 50284994,
+ 29373446,
+ 58568958,
+ 2238667
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.1
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar1000_h2_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h2_v1.json
new file mode 100644
index 0000000..a554fe6
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h2_v1.json
@@ -0,0 +1,1055 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 36546015,
+ 57323275,
+ 17415457,
+ 44063815,
+ 18326222,
+ 30106275,
+ 51086098,
+ 42882829,
+ 33776125,
+ 556692,
+ 35496231,
+ 44418077,
+ 50248501,
+ 51473947,
+ 11955632,
+ 56401993,
+ 5893058,
+ 15430227,
+ 51444233,
+ 52957492,
+ 30894239,
+ 2350926,
+ 41637658,
+ 39621265,
+ 18455857,
+ 56277999,
+ 34266342,
+ 41947625,
+ 56758980,
+ 54965860,
+ 32727985,
+ 3005474,
+ 508626,
+ 11300584,
+ 2146852,
+ 54455256,
+ 4348967,
+ 22210971,
+ 41527275,
+ 14836462,
+ 49760724,
+ 56131709,
+ 51301456,
+ 54609836,
+ 54047013,
+ 17728134,
+ 4867690,
+ 2011117,
+ 9019429,
+ 20899673,
+ 18926705,
+ 14341871,
+ 45836109,
+ 9548788,
+ 1763776,
+ 21823852,
+ 8772045,
+ 55013827,
+ 35435001,
+ 23558905,
+ 10127568,
+ 35595222,
+ 10106871,
+ 29508489,
+ 38040836,
+ 10224548,
+ 57640664,
+ 31929293,
+ 3961533,
+ 40478516,
+ 15138406,
+ 12165770,
+ 53239084,
+ 54182518,
+ 6187686,
+ 54634830,
+ 58131576,
+ 23647327,
+ 54313707,
+ 907821,
+ 48573648,
+ 37230491,
+ 42353436,
+ 8003040,
+ 5309846,
+ 47032344,
+ 53825305,
+ 45769181,
+ 44998259,
+ 19109957,
+ 37933936,
+ 12133692,
+ 31891775,
+ 54077870,
+ 32441876,
+ 40598201,
+ 56308477,
+ 50431946,
+ 608668,
+ 52580003,
+ 39266289,
+ 35002775,
+ 51728641,
+ 9001822,
+ 13383313,
+ 37038092,
+ 13581464,
+ 51983673,
+ 32121000,
+ 51809973,
+ 49233406,
+ 2917287,
+ 41271534,
+ 53021396,
+ 10449358,
+ 44947197,
+ 55574496,
+ 53078012,
+ 7296283,
+ 57755914,
+ 18311199,
+ 10670184,
+ 9057896,
+ 57058998,
+ 57768636,
+ 4783024,
+ 42219428,
+ 10002861,
+ 52632802,
+ 55564670,
+ 14029269,
+ 56403361,
+ 3143320,
+ 54719858,
+ 18803172,
+ 24475700,
+ 47677604,
+ 39250337,
+ 55103756,
+ 48896237,
+ 47136936,
+ 35524944,
+ 366451,
+ 47523427,
+ 10020385,
+ 45818835,
+ 39266194,
+ 38569359,
+ 12630235,
+ 46491358,
+ 5516115,
+ 33532300,
+ 49993535,
+ 23205816,
+ 11704630,
+ 39955351,
+ 17644301,
+ 2634823,
+ 31317393,
+ 49605705,
+ 54141524,
+ 51868035,
+ 55443467,
+ 57869881,
+ 17170885,
+ 32506502,
+ 17153149,
+ 10920115,
+ 55958845,
+ 35397786,
+ 43841838,
+ 33389327,
+ 56764791,
+ 55032293,
+ 7743975,
+ 54655836,
+ 23599638,
+ 35799200,
+ 45389596,
+ 52941847,
+ 7253184,
+ 49043693,
+ 1773466,
+ 5789565,
+ 8787273,
+ 31434505,
+ 16855265,
+ 51353973,
+ 57417056,
+ 56387677,
+ 791630,
+ 58599443,
+ 39539336,
+ 19212298,
+ 56306196,
+ 51643997,
+ 47313331,
+ 28257867,
+ 46694319,
+ 50940315,
+ 16060658,
+ 38527052,
+ 53344919,
+ 30939748,
+ 28554581,
+ 21297358,
+ 16408418,
+ 52097401,
+ 37175752,
+ 4821612,
+ 18368810,
+ 601373,
+ 30096708,
+ 48317892,
+ 49315992,
+ 45043259,
+ 22112089,
+ 18558517,
+ 32685208,
+ 29604802,
+ 48687779,
+ 7815376,
+ 58974378,
+ 3478864,
+ 42887492,
+ 35918910,
+ 10920315,
+ 36567153,
+ 50109230,
+ 42045576,
+ 45122043,
+ 40724776,
+ 18847921,
+ 593757,
+ 14288104,
+ 49209010,
+ 55937417,
+ 15513003,
+ 38711515,
+ 51042560,
+ 18700047,
+ 45543373,
+ 52751335,
+ 6199880,
+ 29949075,
+ 15128250,
+ 17634505,
+ 40247355,
+ 51260956,
+ 50740979,
+ 21962370,
+ 52795682,
+ 6744762,
+ 16059846,
+ 3372514,
+ 40212855,
+ 2339949,
+ 3781557,
+ 12225324,
+ 36295375,
+ 36349752,
+ 10523086,
+ 14587982,
+ 37173385,
+ 17367092,
+ 45038456,
+ 31051406,
+ 15905289,
+ 52659991,
+ 28587534,
+ 48821757,
+ 5478748,
+ 40168701,
+ 1124871,
+ 46766459,
+ 18197635,
+ 1152257,
+ 7970635,
+ 9601155,
+ 24113517,
+ 57791758,
+ 53767180,
+ 18411802,
+ 2337286,
+ 47300066,
+ 10114759,
+ 40163241,
+ 23207354,
+ 47539572,
+ 56723652,
+ 33347439,
+ 39313977,
+ 49222483,
+ 14299125,
+ 44800714,
+ 21409361,
+ 17338033,
+ 45257201,
+ 18679155,
+ 33036281,
+ 15270636,
+ 41109456,
+ 850299,
+ 33468067,
+ 14608008,
+ 31071370,
+ 5324873,
+ 51069146,
+ 977763,
+ 3434028,
+ 35495680,
+ 39408688,
+ 51135457,
+ 19658232,
+ 6972939,
+ 38221032,
+ 51402682,
+ 44166187,
+ 15971473,
+ 49206726,
+ 56301501,
+ 54114819,
+ 9492370,
+ 50829530,
+ 32479224,
+ 17012657,
+ 2190845,
+ 57939619,
+ 52696006,
+ 51160387,
+ 38717143,
+ 34074328,
+ 5794240,
+ 51463646,
+ 1207238,
+ 44890817,
+ 51405673,
+ 35072183,
+ 20976742,
+ 38475375,
+ 22731058,
+ 48727625,
+ 712340,
+ 3743703,
+ 22521619,
+ 23447373,
+ 5972358,
+ 7424528,
+ 11492060,
+ 4511181,
+ 47661961,
+ 8949716,
+ 19738554,
+ 54655647,
+ 1858281,
+ 9104899,
+ 31240705,
+ 2085347,
+ 13967542,
+ 59050356,
+ 33163841,
+ 52217405,
+ 51633660,
+ 14950679,
+ 24179959,
+ 1804174,
+ 35999198,
+ 7936208,
+ 3733333,
+ 54419539,
+ 3976103,
+ 43519362,
+ 46112907,
+ 2198240,
+ 11215846,
+ 7508913,
+ 18829770,
+ 35437618,
+ 55106663,
+ 42989155,
+ 49631698,
+ 20722999,
+ 57084609,
+ 16642465,
+ 56032711,
+ 33599745,
+ 5868309,
+ 19830928,
+ 45382034,
+ 10215271,
+ 5753116,
+ 51999271,
+ 41725932,
+ 54170900,
+ 46047055,
+ 4312042,
+ 52604654,
+ 22831067,
+ 53077258,
+ 6769415,
+ 46721467,
+ 22750932,
+ 6736607,
+ 36051333,
+ 8486884,
+ 47767643,
+ 14447674,
+ 30164574,
+ 47332590,
+ 5382472,
+ 50148052,
+ 31498374,
+ 20494856,
+ 46566881,
+ 31961928,
+ 55484163,
+ 28637480,
+ 49382171,
+ 17549328,
+ 28211945,
+ 18457955,
+ 406783,
+ 53187079,
+ 17362941,
+ 8796021,
+ 17516764,
+ 50161265,
+ 32183171,
+ 6903920,
+ 35898899,
+ 42596056,
+ 9027148,
+ 43357365,
+ 39681367,
+ 16459005,
+ 57773447,
+ 18518216,
+ 56703248,
+ 54297423,
+ 36119330,
+ 2152224,
+ 11466741,
+ 39044492,
+ 35835940,
+ 38173433,
+ 5397866,
+ 8787140,
+ 32115446,
+ 2279695,
+ 51994367,
+ 10099910,
+ 653468,
+ 41386814,
+ 15676750,
+ 31830613,
+ 35643713,
+ 528591,
+ 36164495,
+ 39410119,
+ 2229584,
+ 49367739,
+ 36351768,
+ 56699244,
+ 523110,
+ 2312386,
+ 52484221,
+ 32056504,
+ 20873204,
+ 6940439,
+ 1119963,
+ 8483308,
+ 18912264,
+ 38993372,
+ 45924532,
+ 2926993,
+ 47144045,
+ 52367633,
+ 20808143,
+ 54633058,
+ 13640224,
+ 55955282,
+ 48570915,
+ 14942691,
+ 21347598,
+ 3054567,
+ 839158,
+ 46345886,
+ 8257417,
+ 54280799,
+ 56716921,
+ 59030580,
+ 52224441,
+ 10124504,
+ 11319978,
+ 30155027,
+ 38981284,
+ 54866045,
+ 53871390,
+ 47033030,
+ 14115718,
+ 2927085,
+ 30240345,
+ 2833864,
+ 39167360,
+ 30171271,
+ 44085827,
+ 52738606,
+ 28408240,
+ 13556797,
+ 31376020,
+ 55850651,
+ 455285,
+ 24371875,
+ 35727654,
+ 32461213,
+ 51278536,
+ 28843848,
+ 48621335,
+ 54164590,
+ 51967867,
+ 407900,
+ 32956946,
+ 52152481,
+ 29154853,
+ 56360663,
+ 37690420,
+ 50820610,
+ 4510530,
+ 51892218,
+ 16670660,
+ 41756038,
+ 5270047,
+ 33138067,
+ 7837743,
+ 48217665,
+ 1076025,
+ 31668562,
+ 9125547,
+ 1119019,
+ 11245472,
+ 2244623,
+ 4971561,
+ 28151265,
+ 52022102,
+ 22019133,
+ 13704512,
+ 9390224,
+ 57420124,
+ 9631701,
+ 55329892,
+ 32526017,
+ 3236191,
+ 35635231,
+ 35028009,
+ 29890018,
+ 53746800,
+ 49206674,
+ 13574131,
+ 7103211,
+ 43870887,
+ 40168669,
+ 56011573,
+ 56031838,
+ 17041172,
+ 6198291,
+ 9020211,
+ 46774360,
+ 30054617,
+ 8764560,
+ 532066,
+ 58010642,
+ 55225108,
+ 23633079,
+ 15291576,
+ 41467722,
+ 53455877,
+ 53695141,
+ 51276046,
+ 10295433,
+ 56505712,
+ 3198841,
+ 42393286,
+ 46032124,
+ 8099824,
+ 48469675,
+ 2481236,
+ 1527772,
+ 32436858,
+ 5194778,
+ 29247283,
+ 21436738,
+ 51979222,
+ 16429375,
+ 4569809,
+ 3790866,
+ 10079093,
+ 45683448,
+ 1813207,
+ 11537377,
+ 11671427,
+ 35577163,
+ 47851021,
+ 3311830,
+ 7255984,
+ 6263495,
+ 41552739,
+ 57806937,
+ 46830079,
+ 57667735,
+ 4681152,
+ 6594602,
+ 3374818,
+ 50420671,
+ 38199462,
+ 30458799,
+ 1966430,
+ 9362443,
+ 6901891,
+ 50801194,
+ 47311673,
+ 58425928,
+ 56323867,
+ 46929591,
+ 52011164,
+ 8396758,
+ 37050703,
+ 16860084,
+ 34482758,
+ 11675455,
+ 11942362,
+ 41693940,
+ 17015499,
+ 28070483,
+ 9343660,
+ 41654689,
+ 50902196,
+ 55373710,
+ 14512489,
+ 1899264,
+ 6658613,
+ 51726911,
+ 15275757,
+ 14806551,
+ 10672493,
+ 12876964,
+ 18820164,
+ 10189321,
+ 55870260,
+ 58251468,
+ 41336795,
+ 48087491,
+ 55922885,
+ 52967570,
+ 33489039,
+ 47012749,
+ 37875631,
+ 8118000,
+ 16899731,
+ 8173312,
+ 34139099,
+ 11849841,
+ 1794257,
+ 9024871,
+ 37854040,
+ 646507,
+ 4472098,
+ 35246250,
+ 13683881,
+ 35887023,
+ 55739048,
+ 53115785,
+ 35952065,
+ 37183250,
+ 55972983,
+ 9218054,
+ 33355892,
+ 990281,
+ 35836600,
+ 58280265,
+ 35124211,
+ 51821262,
+ 825680,
+ 57736003,
+ 47938663,
+ 47756776,
+ 50312801,
+ 20431814,
+ 34517370,
+ 15529193,
+ 56343909,
+ 3584261,
+ 18042945,
+ 757412,
+ 13521528,
+ 48842083,
+ 53068851,
+ 13934296,
+ 40011857,
+ 51991241,
+ 32647937,
+ 39161851,
+ 53212361,
+ 17642864,
+ 3020678,
+ 36457755,
+ 941325,
+ 52887427,
+ 9074950,
+ 35462160,
+ 32587297,
+ 32226925,
+ 35500955,
+ 46445422,
+ 35128640,
+ 16192958,
+ 44566766,
+ 13604414,
+ 13584318,
+ 21387754,
+ 6817368,
+ 3534655,
+ 51480840,
+ 11836477,
+ 15036496,
+ 55990603,
+ 48697641,
+ 3797100,
+ 17544039,
+ 39865736,
+ 9347495,
+ 2675678,
+ 45395619,
+ 41333441,
+ 9070225,
+ 15169836,
+ 40580431,
+ 16126821,
+ 5946266,
+ 39042032,
+ 2794410,
+ 52298281,
+ 32823374,
+ 4442811,
+ 562253,
+ 11700877,
+ 53716190,
+ 55212754,
+ 10143082,
+ 33281924,
+ 2662783,
+ 50504250,
+ 58631968,
+ 35239780,
+ 48059326,
+ 54120074,
+ 52258677,
+ 31482804,
+ 50986649,
+ 41341589,
+ 45862436,
+ 34110446,
+ 53284135,
+ 29994722,
+ 5935035,
+ 30952008,
+ 50244925,
+ 17485311,
+ 47108485,
+ 5608214,
+ 2224387,
+ 8620410,
+ 17934018,
+ 55888095,
+ 36122602,
+ 15727766,
+ 29707067,
+ 49939420,
+ 20136547,
+ 47225377,
+ 41298228,
+ 18613917,
+ 15198441,
+ 4818378,
+ 50839838,
+ 34980189,
+ 52570714,
+ 40176836,
+ 21823790,
+ 51070460,
+ 50244487,
+ 20046147,
+ 42486461,
+ 39391547,
+ 55913678,
+ 17957309,
+ 19714886,
+ 14713522,
+ 18376509,
+ 51349090,
+ 9312256,
+ 55494651,
+ 17432677,
+ 51328794,
+ 34265878,
+ 45048858,
+ 7817819,
+ 31329217,
+ 814907,
+ 55001283,
+ 51155522,
+ 36119911,
+ 46251768,
+ 40116994,
+ 36161913,
+ 39850982,
+ 54855568,
+ 40813912,
+ 4378827,
+ 21023438,
+ 36918102,
+ 52293208,
+ 54587396,
+ 50093248,
+ 31155393,
+ 55357462,
+ 37854580,
+ 29681344,
+ 44470147,
+ 38146923,
+ 12921186,
+ 9128889,
+ 55509865,
+ 22098198,
+ 6833210,
+ 35453460,
+ 31603130,
+ 55536595,
+ 46254070,
+ 47156201,
+ 48898786,
+ 17936233,
+ 55063691,
+ 7238771,
+ 5861300,
+ 57156445,
+ 58661549,
+ 32568772,
+ 8129464,
+ 8432138,
+ 401213,
+ 41199718,
+ 633013,
+ 31693677,
+ 31096453,
+ 10520064,
+ 42899539,
+ 17777508,
+ 39499089,
+ 18974001,
+ 49576155,
+ 8324893,
+ 45179567,
+ 36534273,
+ 48243036,
+ 7544474,
+ 7804512,
+ 28028452,
+ 6517476,
+ 13712366,
+ 2196783,
+ 49507446,
+ 50533877,
+ 4357555,
+ 57408581,
+ 12802153,
+ 57909827,
+ 52043069,
+ 14692790,
+ 51254187,
+ 48589146,
+ 53541112,
+ 54498789,
+ 45326664,
+ 52641561,
+ 45449166,
+ 3660619,
+ 51153432,
+ 36418603,
+ 51829548,
+ 53195134,
+ 12982783,
+ 39359377,
+ 50207774,
+ 41712275,
+ 39207742,
+ 6767743,
+ 6458240,
+ 15131330,
+ 20011986,
+ 14709846,
+ 957504,
+ 43268140,
+ 32119538,
+ 32057219,
+ 8386367,
+ 38875072,
+ 48322918,
+ 1943717,
+ 18928671,
+ 6702246,
+ 24067865,
+ 46923752,
+ 58801784,
+ 17113634,
+ 58559583,
+ 45199082,
+ 10151721,
+ 17650053,
+ 47239972,
+ 56499279,
+ 717664,
+ 13754039,
+ 56237665,
+ 34213920,
+ 44176333,
+ 29828675,
+ 2206575,
+ 34664325,
+ 12331379,
+ 30603410,
+ 53267089,
+ 52216154,
+ 1021725,
+ 44377669,
+ 12641232,
+ 3115402,
+ 6808656,
+ 49064855,
+ 13585351,
+ 15690666,
+ 846716,
+ 11558451,
+ 50549462,
+ 33585617,
+ 49447748,
+ 19855549,
+ 23065177,
+ 13262322,
+ 33768892,
+ 6678753,
+ 13557907,
+ 56369189,
+ 53849956,
+ 11729197,
+ 3722669,
+ 38872634,
+ 17938891,
+ 30955279,
+ 45017956,
+ 46247641,
+ 55525497,
+ 58233008,
+ 1821637,
+ 5770762,
+ 55080578,
+ 47129570,
+ 2098063,
+ 54584438,
+ 56805360,
+ 41806918,
+ 2500252,
+ 1005230,
+ 295676,
+ 2500027,
+ 384724,
+ 49661678,
+ 5260674,
+ 32006579,
+ 37613594,
+ 55661477,
+ 3180770,
+ 7413468,
+ 21000562,
+ 41117300,
+ 45448465,
+ 37267194,
+ 3918721,
+ 22729318,
+ 13577102,
+ 57408419,
+ 49899076,
+ 19300192,
+ 35612159,
+ 54590425,
+ 41356188,
+ 37940044,
+ 50284994,
+ 29373446,
+ 58568958,
+ 2238667
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variant_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variant_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.2
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar1000_h2_v1.png b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h2_v1.png
new file mode 100644
index 0000000..bfa919d
Binary files /dev/null and b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h2_v1.png differ
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar1000_h4_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h4_v1.json
new file mode 100644
index 0000000..d8a6a3b
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h4_v1.json
@@ -0,0 +1,1055 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 36546015,
+ 57323275,
+ 17415457,
+ 44063815,
+ 18326222,
+ 30106275,
+ 51086098,
+ 42882829,
+ 33776125,
+ 556692,
+ 35496231,
+ 44418077,
+ 50248501,
+ 51473947,
+ 11955632,
+ 56401993,
+ 5893058,
+ 15430227,
+ 51444233,
+ 52957492,
+ 30894239,
+ 2350926,
+ 41637658,
+ 39621265,
+ 18455857,
+ 56277999,
+ 34266342,
+ 41947625,
+ 56758980,
+ 54965860,
+ 32727985,
+ 3005474,
+ 508626,
+ 11300584,
+ 2146852,
+ 54455256,
+ 4348967,
+ 22210971,
+ 41527275,
+ 14836462,
+ 49760724,
+ 56131709,
+ 51301456,
+ 54609836,
+ 54047013,
+ 17728134,
+ 4867690,
+ 2011117,
+ 9019429,
+ 20899673,
+ 18926705,
+ 14341871,
+ 45836109,
+ 9548788,
+ 1763776,
+ 21823852,
+ 8772045,
+ 55013827,
+ 35435001,
+ 23558905,
+ 10127568,
+ 35595222,
+ 10106871,
+ 29508489,
+ 38040836,
+ 10224548,
+ 57640664,
+ 31929293,
+ 3961533,
+ 40478516,
+ 15138406,
+ 12165770,
+ 53239084,
+ 54182518,
+ 6187686,
+ 54634830,
+ 58131576,
+ 23647327,
+ 54313707,
+ 907821,
+ 48573648,
+ 37230491,
+ 42353436,
+ 8003040,
+ 5309846,
+ 47032344,
+ 53825305,
+ 45769181,
+ 44998259,
+ 19109957,
+ 37933936,
+ 12133692,
+ 31891775,
+ 54077870,
+ 32441876,
+ 40598201,
+ 56308477,
+ 50431946,
+ 608668,
+ 52580003,
+ 39266289,
+ 35002775,
+ 51728641,
+ 9001822,
+ 13383313,
+ 37038092,
+ 13581464,
+ 51983673,
+ 32121000,
+ 51809973,
+ 49233406,
+ 2917287,
+ 41271534,
+ 53021396,
+ 10449358,
+ 44947197,
+ 55574496,
+ 53078012,
+ 7296283,
+ 57755914,
+ 18311199,
+ 10670184,
+ 9057896,
+ 57058998,
+ 57768636,
+ 4783024,
+ 42219428,
+ 10002861,
+ 52632802,
+ 55564670,
+ 14029269,
+ 56403361,
+ 3143320,
+ 54719858,
+ 18803172,
+ 24475700,
+ 47677604,
+ 39250337,
+ 55103756,
+ 48896237,
+ 47136936,
+ 35524944,
+ 366451,
+ 47523427,
+ 10020385,
+ 45818835,
+ 39266194,
+ 38569359,
+ 12630235,
+ 46491358,
+ 5516115,
+ 33532300,
+ 49993535,
+ 23205816,
+ 11704630,
+ 39955351,
+ 17644301,
+ 2634823,
+ 31317393,
+ 49605705,
+ 54141524,
+ 51868035,
+ 55443467,
+ 57869881,
+ 17170885,
+ 32506502,
+ 17153149,
+ 10920115,
+ 55958845,
+ 35397786,
+ 43841838,
+ 33389327,
+ 56764791,
+ 55032293,
+ 7743975,
+ 54655836,
+ 23599638,
+ 35799200,
+ 45389596,
+ 52941847,
+ 7253184,
+ 49043693,
+ 1773466,
+ 5789565,
+ 8787273,
+ 31434505,
+ 16855265,
+ 51353973,
+ 57417056,
+ 56387677,
+ 791630,
+ 58599443,
+ 39539336,
+ 19212298,
+ 56306196,
+ 51643997,
+ 47313331,
+ 28257867,
+ 46694319,
+ 50940315,
+ 16060658,
+ 38527052,
+ 53344919,
+ 30939748,
+ 28554581,
+ 21297358,
+ 16408418,
+ 52097401,
+ 37175752,
+ 4821612,
+ 18368810,
+ 601373,
+ 30096708,
+ 48317892,
+ 49315992,
+ 45043259,
+ 22112089,
+ 18558517,
+ 32685208,
+ 29604802,
+ 48687779,
+ 7815376,
+ 58974378,
+ 3478864,
+ 42887492,
+ 35918910,
+ 10920315,
+ 36567153,
+ 50109230,
+ 42045576,
+ 45122043,
+ 40724776,
+ 18847921,
+ 593757,
+ 14288104,
+ 49209010,
+ 55937417,
+ 15513003,
+ 38711515,
+ 51042560,
+ 18700047,
+ 45543373,
+ 52751335,
+ 6199880,
+ 29949075,
+ 15128250,
+ 17634505,
+ 40247355,
+ 51260956,
+ 50740979,
+ 21962370,
+ 52795682,
+ 6744762,
+ 16059846,
+ 3372514,
+ 40212855,
+ 2339949,
+ 3781557,
+ 12225324,
+ 36295375,
+ 36349752,
+ 10523086,
+ 14587982,
+ 37173385,
+ 17367092,
+ 45038456,
+ 31051406,
+ 15905289,
+ 52659991,
+ 28587534,
+ 48821757,
+ 5478748,
+ 40168701,
+ 1124871,
+ 46766459,
+ 18197635,
+ 1152257,
+ 7970635,
+ 9601155,
+ 24113517,
+ 57791758,
+ 53767180,
+ 18411802,
+ 2337286,
+ 47300066,
+ 10114759,
+ 40163241,
+ 23207354,
+ 47539572,
+ 56723652,
+ 33347439,
+ 39313977,
+ 49222483,
+ 14299125,
+ 44800714,
+ 21409361,
+ 17338033,
+ 45257201,
+ 18679155,
+ 33036281,
+ 15270636,
+ 41109456,
+ 850299,
+ 33468067,
+ 14608008,
+ 31071370,
+ 5324873,
+ 51069146,
+ 977763,
+ 3434028,
+ 35495680,
+ 39408688,
+ 51135457,
+ 19658232,
+ 6972939,
+ 38221032,
+ 51402682,
+ 44166187,
+ 15971473,
+ 49206726,
+ 56301501,
+ 54114819,
+ 9492370,
+ 50829530,
+ 32479224,
+ 17012657,
+ 2190845,
+ 57939619,
+ 52696006,
+ 51160387,
+ 38717143,
+ 34074328,
+ 5794240,
+ 51463646,
+ 1207238,
+ 44890817,
+ 51405673,
+ 35072183,
+ 20976742,
+ 38475375,
+ 22731058,
+ 48727625,
+ 712340,
+ 3743703,
+ 22521619,
+ 23447373,
+ 5972358,
+ 7424528,
+ 11492060,
+ 4511181,
+ 47661961,
+ 8949716,
+ 19738554,
+ 54655647,
+ 1858281,
+ 9104899,
+ 31240705,
+ 2085347,
+ 13967542,
+ 59050356,
+ 33163841,
+ 52217405,
+ 51633660,
+ 14950679,
+ 24179959,
+ 1804174,
+ 35999198,
+ 7936208,
+ 3733333,
+ 54419539,
+ 3976103,
+ 43519362,
+ 46112907,
+ 2198240,
+ 11215846,
+ 7508913,
+ 18829770,
+ 35437618,
+ 55106663,
+ 42989155,
+ 49631698,
+ 20722999,
+ 57084609,
+ 16642465,
+ 56032711,
+ 33599745,
+ 5868309,
+ 19830928,
+ 45382034,
+ 10215271,
+ 5753116,
+ 51999271,
+ 41725932,
+ 54170900,
+ 46047055,
+ 4312042,
+ 52604654,
+ 22831067,
+ 53077258,
+ 6769415,
+ 46721467,
+ 22750932,
+ 6736607,
+ 36051333,
+ 8486884,
+ 47767643,
+ 14447674,
+ 30164574,
+ 47332590,
+ 5382472,
+ 50148052,
+ 31498374,
+ 20494856,
+ 46566881,
+ 31961928,
+ 55484163,
+ 28637480,
+ 49382171,
+ 17549328,
+ 28211945,
+ 18457955,
+ 406783,
+ 53187079,
+ 17362941,
+ 8796021,
+ 17516764,
+ 50161265,
+ 32183171,
+ 6903920,
+ 35898899,
+ 42596056,
+ 9027148,
+ 43357365,
+ 39681367,
+ 16459005,
+ 57773447,
+ 18518216,
+ 56703248,
+ 54297423,
+ 36119330,
+ 2152224,
+ 11466741,
+ 39044492,
+ 35835940,
+ 38173433,
+ 5397866,
+ 8787140,
+ 32115446,
+ 2279695,
+ 51994367,
+ 10099910,
+ 653468,
+ 41386814,
+ 15676750,
+ 31830613,
+ 35643713,
+ 528591,
+ 36164495,
+ 39410119,
+ 2229584,
+ 49367739,
+ 36351768,
+ 56699244,
+ 523110,
+ 2312386,
+ 52484221,
+ 32056504,
+ 20873204,
+ 6940439,
+ 1119963,
+ 8483308,
+ 18912264,
+ 38993372,
+ 45924532,
+ 2926993,
+ 47144045,
+ 52367633,
+ 20808143,
+ 54633058,
+ 13640224,
+ 55955282,
+ 48570915,
+ 14942691,
+ 21347598,
+ 3054567,
+ 839158,
+ 46345886,
+ 8257417,
+ 54280799,
+ 56716921,
+ 59030580,
+ 52224441,
+ 10124504,
+ 11319978,
+ 30155027,
+ 38981284,
+ 54866045,
+ 53871390,
+ 47033030,
+ 14115718,
+ 2927085,
+ 30240345,
+ 2833864,
+ 39167360,
+ 30171271,
+ 44085827,
+ 52738606,
+ 28408240,
+ 13556797,
+ 31376020,
+ 55850651,
+ 455285,
+ 24371875,
+ 35727654,
+ 32461213,
+ 51278536,
+ 28843848,
+ 48621335,
+ 54164590,
+ 51967867,
+ 407900,
+ 32956946,
+ 52152481,
+ 29154853,
+ 56360663,
+ 37690420,
+ 50820610,
+ 4510530,
+ 51892218,
+ 16670660,
+ 41756038,
+ 5270047,
+ 33138067,
+ 7837743,
+ 48217665,
+ 1076025,
+ 31668562,
+ 9125547,
+ 1119019,
+ 11245472,
+ 2244623,
+ 4971561,
+ 28151265,
+ 52022102,
+ 22019133,
+ 13704512,
+ 9390224,
+ 57420124,
+ 9631701,
+ 55329892,
+ 32526017,
+ 3236191,
+ 35635231,
+ 35028009,
+ 29890018,
+ 53746800,
+ 49206674,
+ 13574131,
+ 7103211,
+ 43870887,
+ 40168669,
+ 56011573,
+ 56031838,
+ 17041172,
+ 6198291,
+ 9020211,
+ 46774360,
+ 30054617,
+ 8764560,
+ 532066,
+ 58010642,
+ 55225108,
+ 23633079,
+ 15291576,
+ 41467722,
+ 53455877,
+ 53695141,
+ 51276046,
+ 10295433,
+ 56505712,
+ 3198841,
+ 42393286,
+ 46032124,
+ 8099824,
+ 48469675,
+ 2481236,
+ 1527772,
+ 32436858,
+ 5194778,
+ 29247283,
+ 21436738,
+ 51979222,
+ 16429375,
+ 4569809,
+ 3790866,
+ 10079093,
+ 45683448,
+ 1813207,
+ 11537377,
+ 11671427,
+ 35577163,
+ 47851021,
+ 3311830,
+ 7255984,
+ 6263495,
+ 41552739,
+ 57806937,
+ 46830079,
+ 57667735,
+ 4681152,
+ 6594602,
+ 3374818,
+ 50420671,
+ 38199462,
+ 30458799,
+ 1966430,
+ 9362443,
+ 6901891,
+ 50801194,
+ 47311673,
+ 58425928,
+ 56323867,
+ 46929591,
+ 52011164,
+ 8396758,
+ 37050703,
+ 16860084,
+ 34482758,
+ 11675455,
+ 11942362,
+ 41693940,
+ 17015499,
+ 28070483,
+ 9343660,
+ 41654689,
+ 50902196,
+ 55373710,
+ 14512489,
+ 1899264,
+ 6658613,
+ 51726911,
+ 15275757,
+ 14806551,
+ 10672493,
+ 12876964,
+ 18820164,
+ 10189321,
+ 55870260,
+ 58251468,
+ 41336795,
+ 48087491,
+ 55922885,
+ 52967570,
+ 33489039,
+ 47012749,
+ 37875631,
+ 8118000,
+ 16899731,
+ 8173312,
+ 34139099,
+ 11849841,
+ 1794257,
+ 9024871,
+ 37854040,
+ 646507,
+ 4472098,
+ 35246250,
+ 13683881,
+ 35887023,
+ 55739048,
+ 53115785,
+ 35952065,
+ 37183250,
+ 55972983,
+ 9218054,
+ 33355892,
+ 990281,
+ 35836600,
+ 58280265,
+ 35124211,
+ 51821262,
+ 825680,
+ 57736003,
+ 47938663,
+ 47756776,
+ 50312801,
+ 20431814,
+ 34517370,
+ 15529193,
+ 56343909,
+ 3584261,
+ 18042945,
+ 757412,
+ 13521528,
+ 48842083,
+ 53068851,
+ 13934296,
+ 40011857,
+ 51991241,
+ 32647937,
+ 39161851,
+ 53212361,
+ 17642864,
+ 3020678,
+ 36457755,
+ 941325,
+ 52887427,
+ 9074950,
+ 35462160,
+ 32587297,
+ 32226925,
+ 35500955,
+ 46445422,
+ 35128640,
+ 16192958,
+ 44566766,
+ 13604414,
+ 13584318,
+ 21387754,
+ 6817368,
+ 3534655,
+ 51480840,
+ 11836477,
+ 15036496,
+ 55990603,
+ 48697641,
+ 3797100,
+ 17544039,
+ 39865736,
+ 9347495,
+ 2675678,
+ 45395619,
+ 41333441,
+ 9070225,
+ 15169836,
+ 40580431,
+ 16126821,
+ 5946266,
+ 39042032,
+ 2794410,
+ 52298281,
+ 32823374,
+ 4442811,
+ 562253,
+ 11700877,
+ 53716190,
+ 55212754,
+ 10143082,
+ 33281924,
+ 2662783,
+ 50504250,
+ 58631968,
+ 35239780,
+ 48059326,
+ 54120074,
+ 52258677,
+ 31482804,
+ 50986649,
+ 41341589,
+ 45862436,
+ 34110446,
+ 53284135,
+ 29994722,
+ 5935035,
+ 30952008,
+ 50244925,
+ 17485311,
+ 47108485,
+ 5608214,
+ 2224387,
+ 8620410,
+ 17934018,
+ 55888095,
+ 36122602,
+ 15727766,
+ 29707067,
+ 49939420,
+ 20136547,
+ 47225377,
+ 41298228,
+ 18613917,
+ 15198441,
+ 4818378,
+ 50839838,
+ 34980189,
+ 52570714,
+ 40176836,
+ 21823790,
+ 51070460,
+ 50244487,
+ 20046147,
+ 42486461,
+ 39391547,
+ 55913678,
+ 17957309,
+ 19714886,
+ 14713522,
+ 18376509,
+ 51349090,
+ 9312256,
+ 55494651,
+ 17432677,
+ 51328794,
+ 34265878,
+ 45048858,
+ 7817819,
+ 31329217,
+ 814907,
+ 55001283,
+ 51155522,
+ 36119911,
+ 46251768,
+ 40116994,
+ 36161913,
+ 39850982,
+ 54855568,
+ 40813912,
+ 4378827,
+ 21023438,
+ 36918102,
+ 52293208,
+ 54587396,
+ 50093248,
+ 31155393,
+ 55357462,
+ 37854580,
+ 29681344,
+ 44470147,
+ 38146923,
+ 12921186,
+ 9128889,
+ 55509865,
+ 22098198,
+ 6833210,
+ 35453460,
+ 31603130,
+ 55536595,
+ 46254070,
+ 47156201,
+ 48898786,
+ 17936233,
+ 55063691,
+ 7238771,
+ 5861300,
+ 57156445,
+ 58661549,
+ 32568772,
+ 8129464,
+ 8432138,
+ 401213,
+ 41199718,
+ 633013,
+ 31693677,
+ 31096453,
+ 10520064,
+ 42899539,
+ 17777508,
+ 39499089,
+ 18974001,
+ 49576155,
+ 8324893,
+ 45179567,
+ 36534273,
+ 48243036,
+ 7544474,
+ 7804512,
+ 28028452,
+ 6517476,
+ 13712366,
+ 2196783,
+ 49507446,
+ 50533877,
+ 4357555,
+ 57408581,
+ 12802153,
+ 57909827,
+ 52043069,
+ 14692790,
+ 51254187,
+ 48589146,
+ 53541112,
+ 54498789,
+ 45326664,
+ 52641561,
+ 45449166,
+ 3660619,
+ 51153432,
+ 36418603,
+ 51829548,
+ 53195134,
+ 12982783,
+ 39359377,
+ 50207774,
+ 41712275,
+ 39207742,
+ 6767743,
+ 6458240,
+ 15131330,
+ 20011986,
+ 14709846,
+ 957504,
+ 43268140,
+ 32119538,
+ 32057219,
+ 8386367,
+ 38875072,
+ 48322918,
+ 1943717,
+ 18928671,
+ 6702246,
+ 24067865,
+ 46923752,
+ 58801784,
+ 17113634,
+ 58559583,
+ 45199082,
+ 10151721,
+ 17650053,
+ 47239972,
+ 56499279,
+ 717664,
+ 13754039,
+ 56237665,
+ 34213920,
+ 44176333,
+ 29828675,
+ 2206575,
+ 34664325,
+ 12331379,
+ 30603410,
+ 53267089,
+ 52216154,
+ 1021725,
+ 44377669,
+ 12641232,
+ 3115402,
+ 6808656,
+ 49064855,
+ 13585351,
+ 15690666,
+ 846716,
+ 11558451,
+ 50549462,
+ 33585617,
+ 49447748,
+ 19855549,
+ 23065177,
+ 13262322,
+ 33768892,
+ 6678753,
+ 13557907,
+ 56369189,
+ 53849956,
+ 11729197,
+ 3722669,
+ 38872634,
+ 17938891,
+ 30955279,
+ 45017956,
+ 46247641,
+ 55525497,
+ 58233008,
+ 1821637,
+ 5770762,
+ 55080578,
+ 47129570,
+ 2098063,
+ 54584438,
+ 56805360,
+ 41806918,
+ 2500252,
+ 1005230,
+ 295676,
+ 2500027,
+ 384724,
+ 49661678,
+ 5260674,
+ 32006579,
+ 37613594,
+ 55661477,
+ 3180770,
+ 7413468,
+ 21000562,
+ 41117300,
+ 45448465,
+ 37267194,
+ 3918721,
+ 22729318,
+ 13577102,
+ 57408419,
+ 49899076,
+ 19300192,
+ 35612159,
+ 54590425,
+ 41356188,
+ 37940044,
+ 50284994,
+ 29373446,
+ 58568958,
+ 2238667
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.4
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar1000_h8_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h8_v1.json
new file mode 100644
index 0000000..c8e9cd0
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar1000_h8_v1.json
@@ -0,0 +1,1055 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 36546015,
+ 57323275,
+ 17415457,
+ 44063815,
+ 18326222,
+ 30106275,
+ 51086098,
+ 42882829,
+ 33776125,
+ 556692,
+ 35496231,
+ 44418077,
+ 50248501,
+ 51473947,
+ 11955632,
+ 56401993,
+ 5893058,
+ 15430227,
+ 51444233,
+ 52957492,
+ 30894239,
+ 2350926,
+ 41637658,
+ 39621265,
+ 18455857,
+ 56277999,
+ 34266342,
+ 41947625,
+ 56758980,
+ 54965860,
+ 32727985,
+ 3005474,
+ 508626,
+ 11300584,
+ 2146852,
+ 54455256,
+ 4348967,
+ 22210971,
+ 41527275,
+ 14836462,
+ 49760724,
+ 56131709,
+ 51301456,
+ 54609836,
+ 54047013,
+ 17728134,
+ 4867690,
+ 2011117,
+ 9019429,
+ 20899673,
+ 18926705,
+ 14341871,
+ 45836109,
+ 9548788,
+ 1763776,
+ 21823852,
+ 8772045,
+ 55013827,
+ 35435001,
+ 23558905,
+ 10127568,
+ 35595222,
+ 10106871,
+ 29508489,
+ 38040836,
+ 10224548,
+ 57640664,
+ 31929293,
+ 3961533,
+ 40478516,
+ 15138406,
+ 12165770,
+ 53239084,
+ 54182518,
+ 6187686,
+ 54634830,
+ 58131576,
+ 23647327,
+ 54313707,
+ 907821,
+ 48573648,
+ 37230491,
+ 42353436,
+ 8003040,
+ 5309846,
+ 47032344,
+ 53825305,
+ 45769181,
+ 44998259,
+ 19109957,
+ 37933936,
+ 12133692,
+ 31891775,
+ 54077870,
+ 32441876,
+ 40598201,
+ 56308477,
+ 50431946,
+ 608668,
+ 52580003,
+ 39266289,
+ 35002775,
+ 51728641,
+ 9001822,
+ 13383313,
+ 37038092,
+ 13581464,
+ 51983673,
+ 32121000,
+ 51809973,
+ 49233406,
+ 2917287,
+ 41271534,
+ 53021396,
+ 10449358,
+ 44947197,
+ 55574496,
+ 53078012,
+ 7296283,
+ 57755914,
+ 18311199,
+ 10670184,
+ 9057896,
+ 57058998,
+ 57768636,
+ 4783024,
+ 42219428,
+ 10002861,
+ 52632802,
+ 55564670,
+ 14029269,
+ 56403361,
+ 3143320,
+ 54719858,
+ 18803172,
+ 24475700,
+ 47677604,
+ 39250337,
+ 55103756,
+ 48896237,
+ 47136936,
+ 35524944,
+ 366451,
+ 47523427,
+ 10020385,
+ 45818835,
+ 39266194,
+ 38569359,
+ 12630235,
+ 46491358,
+ 5516115,
+ 33532300,
+ 49993535,
+ 23205816,
+ 11704630,
+ 39955351,
+ 17644301,
+ 2634823,
+ 31317393,
+ 49605705,
+ 54141524,
+ 51868035,
+ 55443467,
+ 57869881,
+ 17170885,
+ 32506502,
+ 17153149,
+ 10920115,
+ 55958845,
+ 35397786,
+ 43841838,
+ 33389327,
+ 56764791,
+ 55032293,
+ 7743975,
+ 54655836,
+ 23599638,
+ 35799200,
+ 45389596,
+ 52941847,
+ 7253184,
+ 49043693,
+ 1773466,
+ 5789565,
+ 8787273,
+ 31434505,
+ 16855265,
+ 51353973,
+ 57417056,
+ 56387677,
+ 791630,
+ 58599443,
+ 39539336,
+ 19212298,
+ 56306196,
+ 51643997,
+ 47313331,
+ 28257867,
+ 46694319,
+ 50940315,
+ 16060658,
+ 38527052,
+ 53344919,
+ 30939748,
+ 28554581,
+ 21297358,
+ 16408418,
+ 52097401,
+ 37175752,
+ 4821612,
+ 18368810,
+ 601373,
+ 30096708,
+ 48317892,
+ 49315992,
+ 45043259,
+ 22112089,
+ 18558517,
+ 32685208,
+ 29604802,
+ 48687779,
+ 7815376,
+ 58974378,
+ 3478864,
+ 42887492,
+ 35918910,
+ 10920315,
+ 36567153,
+ 50109230,
+ 42045576,
+ 45122043,
+ 40724776,
+ 18847921,
+ 593757,
+ 14288104,
+ 49209010,
+ 55937417,
+ 15513003,
+ 38711515,
+ 51042560,
+ 18700047,
+ 45543373,
+ 52751335,
+ 6199880,
+ 29949075,
+ 15128250,
+ 17634505,
+ 40247355,
+ 51260956,
+ 50740979,
+ 21962370,
+ 52795682,
+ 6744762,
+ 16059846,
+ 3372514,
+ 40212855,
+ 2339949,
+ 3781557,
+ 12225324,
+ 36295375,
+ 36349752,
+ 10523086,
+ 14587982,
+ 37173385,
+ 17367092,
+ 45038456,
+ 31051406,
+ 15905289,
+ 52659991,
+ 28587534,
+ 48821757,
+ 5478748,
+ 40168701,
+ 1124871,
+ 46766459,
+ 18197635,
+ 1152257,
+ 7970635,
+ 9601155,
+ 24113517,
+ 57791758,
+ 53767180,
+ 18411802,
+ 2337286,
+ 47300066,
+ 10114759,
+ 40163241,
+ 23207354,
+ 47539572,
+ 56723652,
+ 33347439,
+ 39313977,
+ 49222483,
+ 14299125,
+ 44800714,
+ 21409361,
+ 17338033,
+ 45257201,
+ 18679155,
+ 33036281,
+ 15270636,
+ 41109456,
+ 850299,
+ 33468067,
+ 14608008,
+ 31071370,
+ 5324873,
+ 51069146,
+ 977763,
+ 3434028,
+ 35495680,
+ 39408688,
+ 51135457,
+ 19658232,
+ 6972939,
+ 38221032,
+ 51402682,
+ 44166187,
+ 15971473,
+ 49206726,
+ 56301501,
+ 54114819,
+ 9492370,
+ 50829530,
+ 32479224,
+ 17012657,
+ 2190845,
+ 57939619,
+ 52696006,
+ 51160387,
+ 38717143,
+ 34074328,
+ 5794240,
+ 51463646,
+ 1207238,
+ 44890817,
+ 51405673,
+ 35072183,
+ 20976742,
+ 38475375,
+ 22731058,
+ 48727625,
+ 712340,
+ 3743703,
+ 22521619,
+ 23447373,
+ 5972358,
+ 7424528,
+ 11492060,
+ 4511181,
+ 47661961,
+ 8949716,
+ 19738554,
+ 54655647,
+ 1858281,
+ 9104899,
+ 31240705,
+ 2085347,
+ 13967542,
+ 59050356,
+ 33163841,
+ 52217405,
+ 51633660,
+ 14950679,
+ 24179959,
+ 1804174,
+ 35999198,
+ 7936208,
+ 3733333,
+ 54419539,
+ 3976103,
+ 43519362,
+ 46112907,
+ 2198240,
+ 11215846,
+ 7508913,
+ 18829770,
+ 35437618,
+ 55106663,
+ 42989155,
+ 49631698,
+ 20722999,
+ 57084609,
+ 16642465,
+ 56032711,
+ 33599745,
+ 5868309,
+ 19830928,
+ 45382034,
+ 10215271,
+ 5753116,
+ 51999271,
+ 41725932,
+ 54170900,
+ 46047055,
+ 4312042,
+ 52604654,
+ 22831067,
+ 53077258,
+ 6769415,
+ 46721467,
+ 22750932,
+ 6736607,
+ 36051333,
+ 8486884,
+ 47767643,
+ 14447674,
+ 30164574,
+ 47332590,
+ 5382472,
+ 50148052,
+ 31498374,
+ 20494856,
+ 46566881,
+ 31961928,
+ 55484163,
+ 28637480,
+ 49382171,
+ 17549328,
+ 28211945,
+ 18457955,
+ 406783,
+ 53187079,
+ 17362941,
+ 8796021,
+ 17516764,
+ 50161265,
+ 32183171,
+ 6903920,
+ 35898899,
+ 42596056,
+ 9027148,
+ 43357365,
+ 39681367,
+ 16459005,
+ 57773447,
+ 18518216,
+ 56703248,
+ 54297423,
+ 36119330,
+ 2152224,
+ 11466741,
+ 39044492,
+ 35835940,
+ 38173433,
+ 5397866,
+ 8787140,
+ 32115446,
+ 2279695,
+ 51994367,
+ 10099910,
+ 653468,
+ 41386814,
+ 15676750,
+ 31830613,
+ 35643713,
+ 528591,
+ 36164495,
+ 39410119,
+ 2229584,
+ 49367739,
+ 36351768,
+ 56699244,
+ 523110,
+ 2312386,
+ 52484221,
+ 32056504,
+ 20873204,
+ 6940439,
+ 1119963,
+ 8483308,
+ 18912264,
+ 38993372,
+ 45924532,
+ 2926993,
+ 47144045,
+ 52367633,
+ 20808143,
+ 54633058,
+ 13640224,
+ 55955282,
+ 48570915,
+ 14942691,
+ 21347598,
+ 3054567,
+ 839158,
+ 46345886,
+ 8257417,
+ 54280799,
+ 56716921,
+ 59030580,
+ 52224441,
+ 10124504,
+ 11319978,
+ 30155027,
+ 38981284,
+ 54866045,
+ 53871390,
+ 47033030,
+ 14115718,
+ 2927085,
+ 30240345,
+ 2833864,
+ 39167360,
+ 30171271,
+ 44085827,
+ 52738606,
+ 28408240,
+ 13556797,
+ 31376020,
+ 55850651,
+ 455285,
+ 24371875,
+ 35727654,
+ 32461213,
+ 51278536,
+ 28843848,
+ 48621335,
+ 54164590,
+ 51967867,
+ 407900,
+ 32956946,
+ 52152481,
+ 29154853,
+ 56360663,
+ 37690420,
+ 50820610,
+ 4510530,
+ 51892218,
+ 16670660,
+ 41756038,
+ 5270047,
+ 33138067,
+ 7837743,
+ 48217665,
+ 1076025,
+ 31668562,
+ 9125547,
+ 1119019,
+ 11245472,
+ 2244623,
+ 4971561,
+ 28151265,
+ 52022102,
+ 22019133,
+ 13704512,
+ 9390224,
+ 57420124,
+ 9631701,
+ 55329892,
+ 32526017,
+ 3236191,
+ 35635231,
+ 35028009,
+ 29890018,
+ 53746800,
+ 49206674,
+ 13574131,
+ 7103211,
+ 43870887,
+ 40168669,
+ 56011573,
+ 56031838,
+ 17041172,
+ 6198291,
+ 9020211,
+ 46774360,
+ 30054617,
+ 8764560,
+ 532066,
+ 58010642,
+ 55225108,
+ 23633079,
+ 15291576,
+ 41467722,
+ 53455877,
+ 53695141,
+ 51276046,
+ 10295433,
+ 56505712,
+ 3198841,
+ 42393286,
+ 46032124,
+ 8099824,
+ 48469675,
+ 2481236,
+ 1527772,
+ 32436858,
+ 5194778,
+ 29247283,
+ 21436738,
+ 51979222,
+ 16429375,
+ 4569809,
+ 3790866,
+ 10079093,
+ 45683448,
+ 1813207,
+ 11537377,
+ 11671427,
+ 35577163,
+ 47851021,
+ 3311830,
+ 7255984,
+ 6263495,
+ 41552739,
+ 57806937,
+ 46830079,
+ 57667735,
+ 4681152,
+ 6594602,
+ 3374818,
+ 50420671,
+ 38199462,
+ 30458799,
+ 1966430,
+ 9362443,
+ 6901891,
+ 50801194,
+ 47311673,
+ 58425928,
+ 56323867,
+ 46929591,
+ 52011164,
+ 8396758,
+ 37050703,
+ 16860084,
+ 34482758,
+ 11675455,
+ 11942362,
+ 41693940,
+ 17015499,
+ 28070483,
+ 9343660,
+ 41654689,
+ 50902196,
+ 55373710,
+ 14512489,
+ 1899264,
+ 6658613,
+ 51726911,
+ 15275757,
+ 14806551,
+ 10672493,
+ 12876964,
+ 18820164,
+ 10189321,
+ 55870260,
+ 58251468,
+ 41336795,
+ 48087491,
+ 55922885,
+ 52967570,
+ 33489039,
+ 47012749,
+ 37875631,
+ 8118000,
+ 16899731,
+ 8173312,
+ 34139099,
+ 11849841,
+ 1794257,
+ 9024871,
+ 37854040,
+ 646507,
+ 4472098,
+ 35246250,
+ 13683881,
+ 35887023,
+ 55739048,
+ 53115785,
+ 35952065,
+ 37183250,
+ 55972983,
+ 9218054,
+ 33355892,
+ 990281,
+ 35836600,
+ 58280265,
+ 35124211,
+ 51821262,
+ 825680,
+ 57736003,
+ 47938663,
+ 47756776,
+ 50312801,
+ 20431814,
+ 34517370,
+ 15529193,
+ 56343909,
+ 3584261,
+ 18042945,
+ 757412,
+ 13521528,
+ 48842083,
+ 53068851,
+ 13934296,
+ 40011857,
+ 51991241,
+ 32647937,
+ 39161851,
+ 53212361,
+ 17642864,
+ 3020678,
+ 36457755,
+ 941325,
+ 52887427,
+ 9074950,
+ 35462160,
+ 32587297,
+ 32226925,
+ 35500955,
+ 46445422,
+ 35128640,
+ 16192958,
+ 44566766,
+ 13604414,
+ 13584318,
+ 21387754,
+ 6817368,
+ 3534655,
+ 51480840,
+ 11836477,
+ 15036496,
+ 55990603,
+ 48697641,
+ 3797100,
+ 17544039,
+ 39865736,
+ 9347495,
+ 2675678,
+ 45395619,
+ 41333441,
+ 9070225,
+ 15169836,
+ 40580431,
+ 16126821,
+ 5946266,
+ 39042032,
+ 2794410,
+ 52298281,
+ 32823374,
+ 4442811,
+ 562253,
+ 11700877,
+ 53716190,
+ 55212754,
+ 10143082,
+ 33281924,
+ 2662783,
+ 50504250,
+ 58631968,
+ 35239780,
+ 48059326,
+ 54120074,
+ 52258677,
+ 31482804,
+ 50986649,
+ 41341589,
+ 45862436,
+ 34110446,
+ 53284135,
+ 29994722,
+ 5935035,
+ 30952008,
+ 50244925,
+ 17485311,
+ 47108485,
+ 5608214,
+ 2224387,
+ 8620410,
+ 17934018,
+ 55888095,
+ 36122602,
+ 15727766,
+ 29707067,
+ 49939420,
+ 20136547,
+ 47225377,
+ 41298228,
+ 18613917,
+ 15198441,
+ 4818378,
+ 50839838,
+ 34980189,
+ 52570714,
+ 40176836,
+ 21823790,
+ 51070460,
+ 50244487,
+ 20046147,
+ 42486461,
+ 39391547,
+ 55913678,
+ 17957309,
+ 19714886,
+ 14713522,
+ 18376509,
+ 51349090,
+ 9312256,
+ 55494651,
+ 17432677,
+ 51328794,
+ 34265878,
+ 45048858,
+ 7817819,
+ 31329217,
+ 814907,
+ 55001283,
+ 51155522,
+ 36119911,
+ 46251768,
+ 40116994,
+ 36161913,
+ 39850982,
+ 54855568,
+ 40813912,
+ 4378827,
+ 21023438,
+ 36918102,
+ 52293208,
+ 54587396,
+ 50093248,
+ 31155393,
+ 55357462,
+ 37854580,
+ 29681344,
+ 44470147,
+ 38146923,
+ 12921186,
+ 9128889,
+ 55509865,
+ 22098198,
+ 6833210,
+ 35453460,
+ 31603130,
+ 55536595,
+ 46254070,
+ 47156201,
+ 48898786,
+ 17936233,
+ 55063691,
+ 7238771,
+ 5861300,
+ 57156445,
+ 58661549,
+ 32568772,
+ 8129464,
+ 8432138,
+ 401213,
+ 41199718,
+ 633013,
+ 31693677,
+ 31096453,
+ 10520064,
+ 42899539,
+ 17777508,
+ 39499089,
+ 18974001,
+ 49576155,
+ 8324893,
+ 45179567,
+ 36534273,
+ 48243036,
+ 7544474,
+ 7804512,
+ 28028452,
+ 6517476,
+ 13712366,
+ 2196783,
+ 49507446,
+ 50533877,
+ 4357555,
+ 57408581,
+ 12802153,
+ 57909827,
+ 52043069,
+ 14692790,
+ 51254187,
+ 48589146,
+ 53541112,
+ 54498789,
+ 45326664,
+ 52641561,
+ 45449166,
+ 3660619,
+ 51153432,
+ 36418603,
+ 51829548,
+ 53195134,
+ 12982783,
+ 39359377,
+ 50207774,
+ 41712275,
+ 39207742,
+ 6767743,
+ 6458240,
+ 15131330,
+ 20011986,
+ 14709846,
+ 957504,
+ 43268140,
+ 32119538,
+ 32057219,
+ 8386367,
+ 38875072,
+ 48322918,
+ 1943717,
+ 18928671,
+ 6702246,
+ 24067865,
+ 46923752,
+ 58801784,
+ 17113634,
+ 58559583,
+ 45199082,
+ 10151721,
+ 17650053,
+ 47239972,
+ 56499279,
+ 717664,
+ 13754039,
+ 56237665,
+ 34213920,
+ 44176333,
+ 29828675,
+ 2206575,
+ 34664325,
+ 12331379,
+ 30603410,
+ 53267089,
+ 52216154,
+ 1021725,
+ 44377669,
+ 12641232,
+ 3115402,
+ 6808656,
+ 49064855,
+ 13585351,
+ 15690666,
+ 846716,
+ 11558451,
+ 50549462,
+ 33585617,
+ 49447748,
+ 19855549,
+ 23065177,
+ 13262322,
+ 33768892,
+ 6678753,
+ 13557907,
+ 56369189,
+ 53849956,
+ 11729197,
+ 3722669,
+ 38872634,
+ 17938891,
+ 30955279,
+ 45017956,
+ 46247641,
+ 55525497,
+ 58233008,
+ 1821637,
+ 5770762,
+ 55080578,
+ 47129570,
+ 2098063,
+ 54584438,
+ 56805360,
+ 41806918,
+ 2500252,
+ 1005230,
+ 295676,
+ 2500027,
+ 384724,
+ 49661678,
+ 5260674,
+ 32006579,
+ 37613594,
+ 55661477,
+ 3180770,
+ 7413468,
+ 21000562,
+ 41117300,
+ 45448465,
+ 37267194,
+ 3918721,
+ 22729318,
+ 13577102,
+ 57408419,
+ 49899076,
+ 19300192,
+ 35612159,
+ 54590425,
+ 41356188,
+ 37940044,
+ 50284994,
+ 29373446,
+ 58568958,
+ 2238667
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.8
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar100_h05_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar100_h05_v1.json
new file mode 100644
index 0000000..4e3e725
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar100_h05_v1.json
@@ -0,0 +1,155 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 2093053,
+ 59067623,
+ 37560106,
+ 29131218,
+ 40948403,
+ 33608733,
+ 17198195,
+ 13556797,
+ 384724,
+ 37363157,
+ 43774931,
+ 13263338,
+ 56738298,
+ 11561629,
+ 13867018,
+ 32266903,
+ 1021784,
+ 58207385,
+ 30935704,
+ 6714035,
+ 44998259,
+ 1819125,
+ 7284870,
+ 34271206,
+ 59065154,
+ 46177235,
+ 719322,
+ 56596519,
+ 47468000,
+ 58774071,
+ 38824581,
+ 44459074,
+ 19861682,
+ 41270055,
+ 52250471,
+ 20848680,
+ 47051759,
+ 3721223,
+ 1004687,
+ 32369250,
+ 8454884,
+ 58152817,
+ 34841011,
+ 54449656,
+ 13591949,
+ 295676,
+ 24262325,
+ 56368427,
+ 49632500,
+ 33769013,
+ 54529978,
+ 2226676,
+ 23089268,
+ 2493811,
+ 3899030,
+ 49102732,
+ 44280342,
+ 55019261,
+ 31849330,
+ 11712508,
+ 12692001,
+ 17936233,
+ 5760483,
+ 53842738,
+ 13518462,
+ 22600624,
+ 2495724,
+ 57176482,
+ 3171926,
+ 49995743,
+ 19063559,
+ 17729787,
+ 35500470,
+ 10181912,
+ 55526826,
+ 29918517,
+ 3119198,
+ 5252214,
+ 6812002,
+ 48522602,
+ 30684725,
+ 47077868,
+ 39066494,
+ 12429782,
+ 846716,
+ 19114627,
+ 53344426,
+ 6678753,
+ 1952841,
+ 56350674,
+ 49558779,
+ 49473426,
+ 2215937,
+ 15717915,
+ 50668214,
+ 45322891,
+ 36941144,
+ 960031,
+ 55491109,
+ 41700346
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.05
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar100_h1_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar100_h1_v1.json
new file mode 100644
index 0000000..ea30dbb
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar100_h1_v1.json
@@ -0,0 +1,155 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 2093053,
+ 59067623,
+ 37560106,
+ 29131218,
+ 40948403,
+ 33608733,
+ 17198195,
+ 13556797,
+ 384724,
+ 37363157,
+ 43774931,
+ 13263338,
+ 56738298,
+ 11561629,
+ 13867018,
+ 32266903,
+ 1021784,
+ 58207385,
+ 30935704,
+ 6714035,
+ 44998259,
+ 1819125,
+ 7284870,
+ 34271206,
+ 59065154,
+ 46177235,
+ 719322,
+ 56596519,
+ 47468000,
+ 58774071,
+ 38824581,
+ 44459074,
+ 19861682,
+ 41270055,
+ 52250471,
+ 20848680,
+ 47051759,
+ 3721223,
+ 1004687,
+ 32369250,
+ 8454884,
+ 58152817,
+ 34841011,
+ 54449656,
+ 13591949,
+ 295676,
+ 24262325,
+ 56368427,
+ 49632500,
+ 33769013,
+ 54529978,
+ 2226676,
+ 23089268,
+ 2493811,
+ 3899030,
+ 49102732,
+ 44280342,
+ 55019261,
+ 31849330,
+ 11712508,
+ 12692001,
+ 17936233,
+ 5760483,
+ 53842738,
+ 13518462,
+ 22600624,
+ 2495724,
+ 57176482,
+ 3171926,
+ 49995743,
+ 19063559,
+ 17729787,
+ 35500470,
+ 10181912,
+ 55526826,
+ 29918517,
+ 3119198,
+ 5252214,
+ 6812002,
+ 48522602,
+ 30684725,
+ 47077868,
+ 39066494,
+ 12429782,
+ 846716,
+ 19114627,
+ 53344426,
+ 6678753,
+ 1952841,
+ 56350674,
+ 49558779,
+ 49473426,
+ 2215937,
+ 15717915,
+ 50668214,
+ 45322891,
+ 36941144,
+ 960031,
+ 55491109,
+ 41700346
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.1
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar100_h2_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar100_h2_v1.json
new file mode 100644
index 0000000..3953228
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar100_h2_v1.json
@@ -0,0 +1,155 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 2093053,
+ 59067623,
+ 37560106,
+ 29131218,
+ 40948403,
+ 33608733,
+ 17198195,
+ 13556797,
+ 384724,
+ 37363157,
+ 43774931,
+ 13263338,
+ 56738298,
+ 11561629,
+ 13867018,
+ 32266903,
+ 1021784,
+ 58207385,
+ 30935704,
+ 6714035,
+ 44998259,
+ 1819125,
+ 7284870,
+ 34271206,
+ 59065154,
+ 46177235,
+ 719322,
+ 56596519,
+ 47468000,
+ 58774071,
+ 38824581,
+ 44459074,
+ 19861682,
+ 41270055,
+ 52250471,
+ 20848680,
+ 47051759,
+ 3721223,
+ 1004687,
+ 32369250,
+ 8454884,
+ 58152817,
+ 34841011,
+ 54449656,
+ 13591949,
+ 295676,
+ 24262325,
+ 56368427,
+ 49632500,
+ 33769013,
+ 54529978,
+ 2226676,
+ 23089268,
+ 2493811,
+ 3899030,
+ 49102732,
+ 44280342,
+ 55019261,
+ 31849330,
+ 11712508,
+ 12692001,
+ 17936233,
+ 5760483,
+ 53842738,
+ 13518462,
+ 22600624,
+ 2495724,
+ 57176482,
+ 3171926,
+ 49995743,
+ 19063559,
+ 17729787,
+ 35500470,
+ 10181912,
+ 55526826,
+ 29918517,
+ 3119198,
+ 5252214,
+ 6812002,
+ 48522602,
+ 30684725,
+ 47077868,
+ 39066494,
+ 12429782,
+ 846716,
+ 19114627,
+ 53344426,
+ 6678753,
+ 1952841,
+ 56350674,
+ 49558779,
+ 49473426,
+ 2215937,
+ 15717915,
+ 50668214,
+ 45322891,
+ 36941144,
+ 960031,
+ 55491109,
+ 41700346
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.2
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar100_h4_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar100_h4_v1.json
new file mode 100644
index 0000000..c4bb8e5
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar100_h4_v1.json
@@ -0,0 +1,155 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 2093053,
+ 59067623,
+ 37560106,
+ 29131218,
+ 40948403,
+ 33608733,
+ 17198195,
+ 13556797,
+ 384724,
+ 37363157,
+ 43774931,
+ 13263338,
+ 56738298,
+ 11561629,
+ 13867018,
+ 32266903,
+ 1021784,
+ 58207385,
+ 30935704,
+ 6714035,
+ 44998259,
+ 1819125,
+ 7284870,
+ 34271206,
+ 59065154,
+ 46177235,
+ 719322,
+ 56596519,
+ 47468000,
+ 58774071,
+ 38824581,
+ 44459074,
+ 19861682,
+ 41270055,
+ 52250471,
+ 20848680,
+ 47051759,
+ 3721223,
+ 1004687,
+ 32369250,
+ 8454884,
+ 58152817,
+ 34841011,
+ 54449656,
+ 13591949,
+ 295676,
+ 24262325,
+ 56368427,
+ 49632500,
+ 33769013,
+ 54529978,
+ 2226676,
+ 23089268,
+ 2493811,
+ 3899030,
+ 49102732,
+ 44280342,
+ 55019261,
+ 31849330,
+ 11712508,
+ 12692001,
+ 17936233,
+ 5760483,
+ 53842738,
+ 13518462,
+ 22600624,
+ 2495724,
+ 57176482,
+ 3171926,
+ 49995743,
+ 19063559,
+ 17729787,
+ 35500470,
+ 10181912,
+ 55526826,
+ 29918517,
+ 3119198,
+ 5252214,
+ 6812002,
+ 48522602,
+ 30684725,
+ 47077868,
+ 39066494,
+ 12429782,
+ 846716,
+ 19114627,
+ 53344426,
+ 6678753,
+ 1952841,
+ 56350674,
+ 49558779,
+ 49473426,
+ 2215937,
+ 15717915,
+ 50668214,
+ 45322891,
+ 36941144,
+ 960031,
+ 55491109,
+ 41700346
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.4
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar100_h8_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar100_h8_v1.json
new file mode 100644
index 0000000..9ae6e57
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar100_h8_v1.json
@@ -0,0 +1,155 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 2093053,
+ 59067623,
+ 37560106,
+ 29131218,
+ 40948403,
+ 33608733,
+ 17198195,
+ 13556797,
+ 384724,
+ 37363157,
+ 43774931,
+ 13263338,
+ 56738298,
+ 11561629,
+ 13867018,
+ 32266903,
+ 1021784,
+ 58207385,
+ 30935704,
+ 6714035,
+ 44998259,
+ 1819125,
+ 7284870,
+ 34271206,
+ 59065154,
+ 46177235,
+ 719322,
+ 56596519,
+ 47468000,
+ 58774071,
+ 38824581,
+ 44459074,
+ 19861682,
+ 41270055,
+ 52250471,
+ 20848680,
+ 47051759,
+ 3721223,
+ 1004687,
+ 32369250,
+ 8454884,
+ 58152817,
+ 34841011,
+ 54449656,
+ 13591949,
+ 295676,
+ 24262325,
+ 56368427,
+ 49632500,
+ 33769013,
+ 54529978,
+ 2226676,
+ 23089268,
+ 2493811,
+ 3899030,
+ 49102732,
+ 44280342,
+ 55019261,
+ 31849330,
+ 11712508,
+ 12692001,
+ 17936233,
+ 5760483,
+ 53842738,
+ 13518462,
+ 22600624,
+ 2495724,
+ 57176482,
+ 3171926,
+ 49995743,
+ 19063559,
+ 17729787,
+ 35500470,
+ 10181912,
+ 55526826,
+ 29918517,
+ 3119198,
+ 5252214,
+ 6812002,
+ 48522602,
+ 30684725,
+ 47077868,
+ 39066494,
+ 12429782,
+ 846716,
+ 19114627,
+ 53344426,
+ 6678753,
+ 1952841,
+ 56350674,
+ 49558779,
+ 49473426,
+ 2215937,
+ 15717915,
+ 50668214,
+ 45322891,
+ 36941144,
+ 960031,
+ 55491109,
+ 41700346
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.8
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar10_h05_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar10_h05_v1.json
new file mode 100644
index 0000000..c25a82f
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar10_h05_v1.json
@@ -0,0 +1,65 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 37933936,
+ 54596619,
+ 58547516,
+ 19304899,
+ 41356246,
+ 35615179,
+ 2238667,
+ 50271502,
+ 29368930,
+ 49929193
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.05
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar10_h1_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar10_h1_v1.json
new file mode 100644
index 0000000..198164b
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar10_h1_v1.json
@@ -0,0 +1,65 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 37933936,
+ 54596619,
+ 58547516,
+ 19304899,
+ 41356246,
+ 35615179,
+ 2238667,
+ 50271502,
+ 29368930,
+ 49929193
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.1
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar10_h2_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar10_h2_v1.json
new file mode 100644
index 0000000..fbe58e7
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar10_h2_v1.json
@@ -0,0 +1,65 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 37933936,
+ 54596619,
+ 58547516,
+ 19304899,
+ 41356246,
+ 35615179,
+ 2238667,
+ 50271502,
+ 29368930,
+ 49929193
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.2
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar10_h4_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar10_h4_v1.json
new file mode 100644
index 0000000..d29b4e2
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar10_h4_v1.json
@@ -0,0 +1,65 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 37933936,
+ 54596619,
+ 58547516,
+ 19304899,
+ 41356246,
+ 35615179,
+ 2238667,
+ 50271502,
+ 29368930,
+ 49929193
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.4
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/lin_add_nvar10_h8_v1.json b/paper/pheno_sim/sim_configs/lin_add_nvar10_h8_v1.json
new file mode 100644
index 0000000..49dc107
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/lin_add_nvar10_h8_v1.json
@@ -0,0 +1,65 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "variants",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 37933936,
+ 54596619,
+ 58547516,
+ 19304899,
+ 41356246,
+ 35615179,
+ 2238667,
+ 50271502,
+ 29368930,
+ 49929193
+ ]
+ }
+ ]
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "RandomConstant",
+ "alias": "variants_betas",
+ "input_match_size": "variants",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 0.0,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Product",
+ "alias": "variant_effects",
+ "input_aliases": [
+ "variants_betas",
+ "variants"
+ ]
+ },
+ {
+ "type": "AdditiveCombine",
+ "alias": "combined_variant_effects",
+ "input_alias": "variant_effects"
+ },
+ {
+ "type": "SumReduce",
+ "alias": "no_noise_phenotype",
+ "input_alias": "combined_variant_effects"
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_noise_phenotype",
+ "heritability": 0.8
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/mult_pheno_1.json b/paper/pheno_sim/sim_configs/mult_pheno_1.json
new file mode 100644
index 0000000..2d72fda
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/mult_pheno_1.json
@@ -0,0 +1,345 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "Gene1_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 11407315,
+ 11704468,
+ 12165770,
+ 12544759,
+ 12811045,
+ 12942750,
+ 13319314,
+ 13442795,
+ 13478170,
+ 13576922,
+ 13748101
+ ]
+ },
+ {
+ "alias": "Gene2_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 55668805,
+ 55524012,
+ 55367311,
+ 54860011,
+ 54629697,
+ 54467916,
+ 54291832,
+ 54120473,
+ 53572887,
+ 53117809,
+ 52512150,
+ 52000187,
+ 51554072,
+ 51298505
+ ]
+ },
+ {
+ "alias": "Gene3_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 35943769,
+ 35695401,
+ 35294385,
+ 34694403,
+ 34187347,
+ 33762257,
+ 33550633,
+ 32392612,
+ 31096453,
+ 30909504,
+ 30280567,
+ 30100689,
+ 29384049,
+ 28537639,
+ 24424589
+ ]
+ },
+ {
+ "alias": "Gene4_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 14524126,
+ 14748133,
+ 15036898,
+ 15198606,
+ 15337785,
+ 15784377,
+ 15986530,
+ 16440845,
+ 16860084,
+ 16869466,
+ 17344200,
+ 17623339,
+ 17774986,
+ 17921015
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "AnyReduce",
+ "alias": "n_samples",
+ "input_alias": "Gene1_vars"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene1_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.1
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene1_mult_vals",
+ "input_match_size": "Gene1_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene1_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene1_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_actual_vals",
+ "input_cond_vals": "Gene1_vars",
+ "input_if_vals": "Gene1_mult_vals",
+ "input_else_vals": "Gene1_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene1_mult_var_term",
+ "input_alias": "Gene1_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_haps",
+ "input_aliases": [
+ "Gene1_mult_var_term",
+ "Gene1_background"
+ ]
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene1",
+ "input_alias": "Gene1_haps"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene2_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.1
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene2_mult_vals",
+ "input_match_size": "Gene2_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene2_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene2_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_actual_vals",
+ "input_cond_vals": "Gene2_vars",
+ "input_if_vals": "Gene2_mult_vals",
+ "input_else_vals": "Gene2_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene2_mult_var_term",
+ "input_alias": "Gene2_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_haps",
+ "input_aliases": [
+ "Gene2_mult_var_term",
+ "Gene2_background"
+ ]
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "Gene2",
+ "input_alias": "Gene2_haps"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene3_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.1
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene3_mult_vals",
+ "input_match_size": "Gene3_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene3_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene3_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene3_mult_actual_vals",
+ "input_cond_vals": "Gene3_vars",
+ "input_if_vals": "Gene3_mult_vals",
+ "input_else_vals": "Gene3_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene3_mult_var_term",
+ "input_alias": "Gene3_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene3_haps",
+ "input_aliases": [
+ "Gene3_mult_var_term",
+ "Gene3_background"
+ ]
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene3",
+ "input_alias": "Gene3_haps"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene4_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.1
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene4_mult_vals",
+ "input_match_size": "Gene4_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene4_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene4_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene4_mult_actual_vals",
+ "input_cond_vals": "Gene4_vars",
+ "input_if_vals": "Gene4_mult_vals",
+ "input_else_vals": "Gene4_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene4_mult_var_term",
+ "input_alias": "Gene4_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene4_haps",
+ "input_aliases": [
+ "Gene4_mult_var_term",
+ "Gene4_background"
+ ]
+ },
+ {
+ "type": "MinCombine",
+ "alias": "Gene4",
+ "input_alias": "Gene4_haps"
+ },
+
+ {
+ "type": "Product",
+ "alias": "G1_G2",
+ "input_aliases": [
+ "Gene1",
+ "Gene2"
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "G3_G4",
+ "input_aliases": [
+ "Gene3",
+ "Gene4"
+ ]
+ },
+
+ {
+ "type": "Sum",
+ "alias": "no_herit_phenotype",
+ "input_aliases": [
+ "G1_G2",
+ "G3_G4"
+ ]
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_herit_phenotype",
+ "heritability": 0.5
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/mult_pheno_1.png b/paper/pheno_sim/sim_configs/mult_pheno_1.png
new file mode 100644
index 0000000..87bc5dd
Binary files /dev/null and b/paper/pheno_sim/sim_configs/mult_pheno_1.png differ
diff --git a/paper/pheno_sim/sim_configs/mult_pheno_1_more_noise.json b/paper/pheno_sim/sim_configs/mult_pheno_1_more_noise.json
new file mode 100644
index 0000000..247482d
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/mult_pheno_1_more_noise.json
@@ -0,0 +1,370 @@
+{
+ "input": [
+ {
+ "file": "../data/ukb/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "Gene1_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 11407315,
+ 11704468,
+ 12165770,
+ 12544759,
+ 12811045,
+ 12942750,
+ 13319314,
+ 13442795,
+ 13478170,
+ 13576922,
+ 13748101
+ ]
+ },
+ {
+ "alias": "Gene2_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 55668805,
+ 55524012,
+ 55367311,
+ 54860011,
+ 54629697,
+ 54467916,
+ 54291832,
+ 54120473,
+ 53572887,
+ 53117809,
+ 52512150,
+ 52000187,
+ 51554072,
+ 51298505
+ ]
+ },
+ {
+ "alias": "Gene3_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 35943769,
+ 35695401,
+ 35294385,
+ 34694403,
+ 34187347,
+ 33762257,
+ 33550633,
+ 32392612,
+ 31096453,
+ 30909504,
+ 30280567,
+ 30100689,
+ 29384049,
+ 28537639,
+ 24424589
+ ]
+ },
+ {
+ "alias": "Gene4_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 14524126,
+ 14748133,
+ 15036898,
+ 15198606,
+ 15337785,
+ 15784377,
+ 15986530,
+ 16440845,
+ 16860084,
+ 16869466,
+ 17344200,
+ 17623339,
+ 17774986,
+ 17921015
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "AnyReduce",
+ "alias": "n_samples",
+ "input_alias": "Gene1_vars"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene1_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene1_mult_vals",
+ "input_match_size": "Gene1_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene1_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene1_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_actual_vals",
+ "input_cond_vals": "Gene1_vars",
+ "input_if_vals": "Gene1_mult_vals",
+ "input_else_vals": "Gene1_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene1_mult_var_term",
+ "input_alias": "Gene1_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_haps",
+ "input_aliases": [
+ "Gene1_mult_var_term",
+ "Gene1_background"
+ ]
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene1",
+ "input_alias": "Gene1_haps"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene2_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene2_mult_vals",
+ "input_match_size": "Gene2_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene2_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene2_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_actual_vals",
+ "input_cond_vals": "Gene2_vars",
+ "input_if_vals": "Gene2_mult_vals",
+ "input_else_vals": "Gene2_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene2_mult_var_term",
+ "input_alias": "Gene2_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_haps",
+ "input_aliases": [
+ "Gene2_mult_var_term",
+ "Gene2_background"
+ ]
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "Gene2",
+ "input_alias": "Gene2_haps"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene3_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene3_mult_vals",
+ "input_match_size": "Gene3_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene3_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene3_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene3_mult_actual_vals",
+ "input_cond_vals": "Gene3_vars",
+ "input_if_vals": "Gene3_mult_vals",
+ "input_else_vals": "Gene3_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene3_mult_var_term",
+ "input_alias": "Gene3_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene3_haps",
+ "input_aliases": [
+ "Gene3_mult_var_term",
+ "Gene3_background"
+ ]
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene3",
+ "input_alias": "Gene3_haps"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene4_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene4_mult_vals",
+ "input_match_size": "Gene4_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.15
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene4_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene4_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene4_mult_actual_vals",
+ "input_cond_vals": "Gene4_vars",
+ "input_if_vals": "Gene4_mult_vals",
+ "input_else_vals": "Gene4_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene4_mult_var_term",
+ "input_alias": "Gene4_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene4_haps",
+ "input_aliases": [
+ "Gene4_mult_var_term",
+ "Gene4_background"
+ ]
+ },
+ {
+ "type": "MinCombine",
+ "alias": "Gene4",
+ "input_alias": "Gene4_haps"
+ },
+
+ {
+ "type": "Heritability",
+ "alias": "Gene1_noise",
+ "input_alias": "Gene1",
+ "heritability": 0.5
+ },
+ {
+ "type": "Heritability",
+ "alias": "Gene2_noise",
+ "input_alias": "Gene2",
+ "heritability": 0.5
+ },
+ {
+ "type": "Heritability",
+ "alias": "Gene3_noise",
+ "input_alias": "Gene3",
+ "heritability": 0.5
+ },
+ {
+ "type": "Heritability",
+ "alias": "Gene4_noise",
+ "input_alias": "Gene4",
+ "heritability": 0.5
+ },
+
+ {
+ "type": "Product",
+ "alias": "G1_G2",
+ "input_aliases": [
+ "Gene1",
+ "Gene2"
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "G3_G4",
+ "input_aliases": [
+ "Gene3",
+ "Gene4"
+ ]
+ },
+
+ {
+ "type": "Sum",
+ "alias": "no_herit_phenotype",
+ "input_aliases": [
+ "G1_G2",
+ "G3_G4"
+ ]
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_herit_phenotype",
+ "heritability": 0.5
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/mult_pheno_2.json b/paper/pheno_sim/sim_configs/mult_pheno_2.json
new file mode 100644
index 0000000..b213bfb
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/mult_pheno_2.json
@@ -0,0 +1,395 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "Gene1_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 11407315,
+ 11704468,
+ 12165770,
+ 12544759,
+ 12811045,
+ 12942750,
+ 13319314,
+ 13442795,
+ 13478170,
+ 13576922,
+ 13748101
+ ]
+ },
+ {
+ "alias": "Gene2_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 55668805,
+ 55524012,
+ 55367311,
+ 54860011,
+ 54629697,
+ 54467916,
+ 54291832,
+ 54120473,
+ 53572887,
+ 53117809,
+ 52512150,
+ 52000187,
+ 51554072,
+ 51298505
+ ]
+ },
+ {
+ "alias": "Gene3_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 35943769,
+ 35695401,
+ 35294385,
+ 34694403,
+ 34187347,
+ 33762257,
+ 33550633,
+ 32392612,
+ 31096453,
+ 30909504,
+ 30280567,
+ 30100689,
+ 29384049,
+ 28537639,
+ 24424589
+ ]
+ },
+ {
+ "alias": "Gene4_vars",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 14524126,
+ 14748133,
+ 15036898,
+ 15198606,
+ 15337785,
+ 15784377,
+ 15986530,
+ 16440845,
+ 16860084,
+ 16869466,
+ 17344200,
+ 17623339,
+ 17774986,
+ 17921015
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "AnyReduce",
+ "alias": "n_samples",
+ "input_alias": "Gene1_vars"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene1_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.2
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene1_mult_vals",
+ "input_match_size": "Gene1_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene1_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene1_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene1_mult_actual_vals",
+ "input_cond_vals": "Gene1_vars",
+ "input_if_vals": "Gene1_mult_vals",
+ "input_else_vals": "Gene1_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene1_mult_var_term",
+ "input_alias": "Gene1_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene1_haps",
+ "input_aliases": [
+ "Gene1_mult_var_term",
+ "Gene1_background"
+ ]
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene1",
+ "input_alias": "Gene1_haps"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene2_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 2.0,
+ "scale": 0.2
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene2_mult_vals",
+ "input_match_size": "Gene2_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.5
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene2_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene2_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene2_mult_actual_vals",
+ "input_cond_vals": "Gene2_vars",
+ "input_if_vals": "Gene2_mult_vals",
+ "input_else_vals": "Gene2_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene2_mult_var_term",
+ "input_alias": "Gene2_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene2_haps",
+ "input_aliases": [
+ "Gene2_mult_var_term",
+ "Gene2_background"
+ ]
+ },
+ {
+ "type": "Tanh",
+ "alias": "Gene2_haps_tanh",
+ "input_alias": "Gene2_haps"
+ },
+ {
+ "type": "MaxCombine",
+ "alias": "Gene2",
+ "input_alias": "Gene2_haps_tanh"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene3_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.2
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene3_mult_vals",
+ "input_match_size": "Gene3_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.5,
+ "scale": 1.0
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene3_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene3_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene3_mult_actual_vals",
+ "input_cond_vals": "Gene3_vars",
+ "input_if_vals": "Gene3_mult_vals",
+ "input_else_vals": "Gene3_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene3_mult_var_term",
+ "input_alias": "Gene3_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene3_haps",
+ "input_aliases": [
+ "Gene3_mult_var_term",
+ "Gene3_background"
+ ]
+ },
+ {
+ "type": "Sigmoid",
+ "alias": "Gene3_haps_tanh",
+ "input_alias": "Gene3_haps"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "Gene3",
+ "input_alias": "Gene3_haps_tanh"
+ },
+
+ {
+ "type": "Distribution",
+ "alias": "Gene4_background",
+ "input_match_size": "n_samples",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.0,
+ "scale": 0.1
+ }
+ },
+ {
+ "type": "RandomConstant",
+ "alias": "Gene4_mult_vals",
+ "input_match_size": "Gene4_vars",
+ "dist_name": "normal",
+ "dist_kwargs": {
+ "loc": 1.2,
+ "scale": 0.6
+ },
+ "by_feat": true
+ },
+ {
+ "type": "Constant",
+ "alias": "Gene4_ones_mat",
+ "constant": 1.0,
+ "input_match_size": "Gene4_vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "Gene4_mult_actual_vals",
+ "input_cond_vals": "Gene4_vars",
+ "input_if_vals": "Gene4_mult_vals",
+ "input_else_vals": "Gene4_ones_mat"
+ },
+ {
+ "type": "ProductReduce",
+ "alias": "Gene4_mult_var_term",
+ "input_alias": "Gene4_mult_actual_vals"
+ },
+ {
+ "type": "Product",
+ "alias": "Gene4_haps",
+ "input_aliases": [
+ "Gene4_mult_var_term",
+ "Gene4_background"
+ ]
+ },
+ {
+ "type": "MinCombine",
+ "alias": "Gene4",
+ "input_alias": "Gene4_haps"
+ },
+
+ {
+ "type": "Product",
+ "alias": "G1_G2",
+ "input_aliases": [
+ "Gene1",
+ "Gene2"
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "G3_G4",
+ "input_aliases": [
+ "Gene3",
+ "Gene4"
+ ]
+ },
+
+ {
+ "type": "Concatenate",
+ "alias": "gene_vals",
+ "input_aliases": [
+ "Gene1",
+ "Gene2",
+ "Gene3",
+ "Gene4"
+ ]
+ },
+ {
+ "type": "Softmax",
+ "alias": "gene_softmax",
+ "input_alias": "gene_vals"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "gene_vals_mixed",
+ "input_aliases": [
+ "Gene4",
+ "Gene3",
+ "Gene2",
+ "Gene1"
+ ]
+ },
+ {
+ "type": "Product",
+ "alias": "softmax_x_gene_vals",
+ "input_aliases": [
+ "gene_vals_mixed",
+ "gene_softmax"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "softmax_x_gene_sum",
+ "input_alias": "softmax_x_gene_vals"
+ },
+
+ {
+ "type": "Sum",
+ "alias": "no_herit_phenotype",
+ "input_aliases": [
+ "G1_G2",
+ "G3_G4",
+ "softmax_x_gene_sum"
+ ]
+ },
+ {
+ "type": "Heritability",
+ "alias": "phenotype",
+ "input_alias": "no_herit_phenotype",
+ "heritability": 0.5
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/mult_pheno_2.png b/paper/pheno_sim/sim_configs/mult_pheno_2.png
new file mode 100644
index 0000000..6e9ccc9
Binary files /dev/null and b/paper/pheno_sim/sim_configs/mult_pheno_2.png differ
diff --git a/paper/pheno_sim/sim_configs/xor_pheno_1.json b/paper/pheno_sim/sim_configs/xor_pheno_1.json
new file mode 100644
index 0000000..a421687
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/xor_pheno_1.json
@@ -0,0 +1,69 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "var_1",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 24368053
+ ]
+ },
+ {
+ "alias": "var_2",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 46408356
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "Constant",
+ "alias": "XOR_true",
+ "constant": 1.0,
+ "input_match_size": "var_1"
+ },
+ {
+ "type": "Constant",
+ "alias": "XOR_false",
+ "constant": 0.0,
+ "input_match_size": "var_1"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "vars",
+ "input_aliases": [
+ "var_1",
+ "var_2"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "vars_sum",
+ "input_alias": "vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "hap_val",
+ "input_cond_vals": "vars_sum",
+ "input_if_vals": "XOR_true",
+ "input_else_vals": "XOR_false",
+ "threshold": 1.0,
+ "comparison": "eq"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "phenotype",
+ "input_alias": "hap_val"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/sim_configs/xor_pheno_1.png b/paper/pheno_sim/sim_configs/xor_pheno_1.png
new file mode 100644
index 0000000..8b37205
Binary files /dev/null and b/paper/pheno_sim/sim_configs/xor_pheno_1.png differ
diff --git a/paper/pheno_sim/sim_configs/xor_pheno_2.json b/paper/pheno_sim/sim_configs/xor_pheno_2.json
new file mode 100644
index 0000000..7bbe440
--- /dev/null
+++ b/paper/pheno_sim/sim_configs/xor_pheno_2.json
@@ -0,0 +1,69 @@
+{
+ "input": [
+ {
+ "file": "../data/geno_data/vcf/phased_chr19.vcf",
+ "file_format": "vcf",
+ "reference_genome": "GRCh37",
+ "input_nodes": [
+ {
+ "alias": "var_1",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 24368053
+ ]
+ },
+ {
+ "alias": "var_2",
+ "type": "SNP",
+ "chr": "19",
+ "pos": [
+ 24451636
+ ]
+ }
+ ],
+ "sample_id_field": "s"
+ }
+ ],
+ "simulation_steps": [
+ {
+ "type": "Constant",
+ "alias": "XOR_true",
+ "constant": 1.0,
+ "input_match_size": "var_1"
+ },
+ {
+ "type": "Constant",
+ "alias": "XOR_false",
+ "constant": 0.0,
+ "input_match_size": "var_1"
+ },
+ {
+ "type": "Concatenate",
+ "alias": "vars",
+ "input_aliases": [
+ "var_1",
+ "var_2"
+ ]
+ },
+ {
+ "type": "SumReduce",
+ "alias": "vars_sum",
+ "input_alias": "vars"
+ },
+ {
+ "type": "IfElse",
+ "alias": "hap_val",
+ "input_cond_vals": "vars_sum",
+ "input_if_vals": "XOR_true",
+ "input_else_vals": "XOR_false",
+ "threshold": 1.0,
+ "comparison": "eq"
+ },
+ {
+ "type": "MeanCombine",
+ "alias": "phenotype",
+ "input_alias": "hap_val"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/paper/pheno_sim/simulate_lin_add_pheno.sh b/paper/pheno_sim/simulate_lin_add_pheno.sh
new file mode 100755
index 0000000..79c2083
--- /dev/null
+++ b/paper/pheno_sim/simulate_lin_add_pheno.sh
@@ -0,0 +1,28 @@
+# Simulate phenotypes using CITRUS
+
+OUTPUT_DIR=citrus_output
+
+N_VARS=(10 100 1000)
+H_VALS=(05 1 2 4 8)
+VERSION_NUM=1
+
+# Loop over number of variables and heritability
+for N_VAR in "${N_VARS[@]}"; do
+ for H_VAL in "${H_VALS[@]}"; do
+ SIM_NAME=lin_add_nvar${N_VAR}_h${H_VAL}_v${VERSION_NUM}
+ SIM_CONFIG_FILE=sim_configs/${SIM_NAME}
+
+ # Run citrus simulate
+
+ JAVA_HOME=/home/rdevito/anaconda3/envs/citrus_env/
+
+ citrus simulate \
+ -c ${SIM_CONFIG_FILE} \
+ -o ${OUTPUT_DIR} \
+ -f ${SIM_NAME}.csv \
+ --output_config_filename ${SIM_NAME}_config.json
+
+ # Rewrite phenotype in plink format
+ python citrus_out_to_plink_fmt.py ${SIM_NAME}
+ done
+done
\ No newline at end of file
diff --git a/paper/workflows/GWAS/run_GWAS.sh b/paper/workflows/GWAS/run_GWAS.sh
new file mode 100755
index 0000000..1557627
--- /dev/null
+++ b/paper/workflows/GWAS/run_GWAS.sh
@@ -0,0 +1,69 @@
+# Run Plink2 GWAS on CITRUS simulated phenotype
+
+# PHENO=complex_pheno_1
+# PHENO=complex_pheno_1_noise
+# PHENO=complex_pheno_2
+# PHENO=complex_pheno_3
+# PHENO=complex_pheno_4
+# PHENO=mult_pheno_1_more_noise
+# PHENO=mult_pheno_1
+# PHENO=mult_pheno_2
+# PHENO=xor_pheno_1
+# PHENO=xor_pheno_2
+# PHENO=lin_add_nvar100_h05_v1
+# PHENO=lin_add_nvar100_h1_v1
+# PHENO=lin_add_nvar100_h2_v1
+# PHENO=lin_add_nvar100_h4_v1
+# PHENO=lin_add_nvar100_h8_v1
+# PHENO=lin_add_nvar1000_h2_v1
+# PHENO=lin_add_nvar1000_h4_v1
+# PHENO=compound_het
+# PHENO=compound_het_2
+# PHENO=gepsi_lin_add_h0625_h0625
+# PHENO=gepsi_lin_add_h125_h125
+# PHENO=gepsi_lin_add_h25_h25
+# PHENO=gepsi_lin_add_h5_h5
+# PHENO=gepsi_lin_add_hFULL_hFULL
+
+# PHENO=gepsi_lin_add_h0625
+# PHENO=gepsi_lin_add_h125
+# PHENO=gepsi_lin_add_h25
+# PHENO=gepsi_lin_add_h5
+# PHENO=gepsi_lin_add_hFULL
+# PHENO=gepsi_lin_add_n10_hFULL
+PHENO=gepsi_lin_add_n2_h001
+
+# PHENO=gepsi_lin_add_h0625_gcta
+# PHENO=gepsi_lin_add_h125_gcta
+# PHENO=gepsi_lin_add_h25_gcta
+# PHENO=gepsi_lin_add_h5_gcta
+# PHENO=gepsi_lin_add_hFULL_gcta
+
+# PHENO_DIR=pheno_sim/citrus_phenos
+PHENO_DIR=output/gepsi_phenos
+# PHENO_DIR=output/gcta_phenos
+
+echo ${PHENO}
+echo ${PHENO_DIR}
+
+SPLITS_DIR=data/splits
+TRAIN_SPLIT_FNAME=train_samples.txt
+GENO_DIR=data/geno_data/pgen
+PGEN_FNAME=imputed_chr19
+PC_FNAME=data/geno_data/PCs/pcs.tsv
+
+DOCKER_URL=gcr.io/ucsd-medicine-cast/nonlin_prs_gwas_plink2:latest
+
+# Start docker env
+module load singularitypro
+
+singularity exec --containall \
+ --bind /expanse/projects/gymreklab/rdevito:/mnt \
+ docker://${DOCKER_URL} \
+ bash -c "cd /mnt/citrus/CITRUS/paper && \
+ plink2 --glm 'hide-covar' \
+ --pfile ${GENO_DIR}/${PGEN_FNAME} \
+ --keep ${SPLITS_DIR}/${TRAIN_SPLIT_FNAME} \
+ --pheno ${PHENO_DIR}/${PHENO}.pheno \
+ --covar ${PC_FNAME} \
+ --out output/GWAS/${PHENO}"
\ No newline at end of file
diff --git a/paper/workflows/aml_basil_vars/fit_automl_prs.py b/paper/workflows/aml_basil_vars/fit_automl_prs.py
new file mode 100644
index 0000000..9ef1245
--- /dev/null
+++ b/paper/workflows/aml_basil_vars/fit_automl_prs.py
@@ -0,0 +1,472 @@
+"""Fit AutoML PRS model.
+
+Underlying model is either a (possibly regularized) linear regression
+or a LightGBM model. Specifics of the model are defined in the model
+configuration JSON file.
+
+Requires:
+
+ - A parquet file containing the genotype data.
+ - A JSON file containing the variant subsets for different p-value
+ and window size combinations.
+ - A tab-separated file containing the phenotype data.
+ - A tab-separated file containing the covariate data.
+ - One ID per line text files containing the IDs of the samples to use
+ for the training, validation, and test sets.
+ - A model configuration JSON file.
+
+Training configuration JSON file requires the keys:
+
+ - model_type (str): If specifying one p-value and window size threshold,
+ one of 'lgbm', 'elastic_net', or 'npart_elastic_net'. If searching
+ over multiple thresholds, one of 'lgbm_multi_thresh'. TODO: linear versions
+ - metric (str): Valid metric with FLAML see https://microsoft.github.io/FLAML/docs/Use-Cases/Task-Oriented-AutoML#optimization-metric
+ Valid options include 'r2', 'mae', 'mse', 'rmse', 'mape'.
+ - task (str): One of 'regression', 'classification'.
+ - time_budget (int): Time budget in seconds for the model fitting.
+ - early_stopping (bool): Whether to use early stopping. If not provided,
+ defaults to False.
+
+And these keys are required if not using a 'multi_thresh' model:
+
+ - p_val (str): p-value threshold for variant inclusion. Must correspond
+ to a key in the variant subsets JSON file.
+ - window (str): Window size for variant inclusion. Must correspond to a
+ key under the p_val key in the variant subsets JSON file.
+
+Outputs:
+
+ - The training configuration JSON file ('training_config.json').
+ - Best model configuration as a JSON file ('best_model_config.json').
+ - Predictions for the validation and test sets as CSV files named
+ 'val_preds.csv' and 'test_preds.csv'.
+ - A JSON file 'runtime.json' with the runtime of the model fitting in
+ seconds under the the key 'runtime_seconds'.
+ - The log file from FLAML AutoML.fit() ('fit.log').
+
+Args:
+
+ * -t, --training-config: Path to the training configuration JSON file.
+ * -g, --geno-parquet: Path to the parquet file containing the genotype
+ data.
+ * -s, --var-subsets: Path to the JSON file containing the variant
+ subsets for different p-value and window size combinations.
+ * -p, --pheno: Path to the tab-separated file containing the phenotype
+ data.
+ * -c, --covars: Path to the tab-separated file containing the covariate
+ data.
+ * --train-ids: Path to the text file containing the IDs of the
+ samples to use for the training set.
+ * --val-ids: Path to the text file containing the IDs of the
+ samples to use for the validation set.
+ * --test-ids: Path to the text file containing the IDs of the
+ samples to use for the test set.
+ * -o, --out-dir: Directory in which to save the output files.
+ Default: '.'.
+ * -i, --id-col: Name of the column in the genotype data that contains
+ the sample IDs. Default: 'IID'.
+
+
+python fit_automl_prs.py -g ../dev_data/geno.parquet -v ../dev_data/var_subsets.json -p ../dev_data/sim_pheno.tsv -c ../dev_data/covars.tsv --train-ids ../dev_data/train_ids.txt --val-ids ../dev_data/val_ids.txt --test-ids ../dev_data/test_ids.txt -t ../dev_data/basic_config.json -o ../dev_data/output
+"""
+
+import argparse
+import json
+import pickle
+import os
+import time
+from pprint import pprint
+
+import numpy as np
+import pandas as pd
+import polars as pl
+import matplotlib.pyplot as plt
+from flaml import AutoML
+from flaml.automl.data import get_output_from_log
+from flaml import tune
+
+from automl_prs import PRSTask
+
+
+def parse_args():
+ """Parse command line arguments."""
+ parser = argparse.ArgumentParser(
+ description='Fit AutoML PRS model.'
+ )
+ parser.add_argument(
+ '-t', '--training-config',
+ required=True,
+ help='Path to the training configuration JSON file.'
+ )
+ parser.add_argument(
+ '-g', '--geno-parquet',
+ required=True,
+ help='Path to the parquet file containing the genotype data.'
+ )
+ parser.add_argument(
+ '-v', '--var-subsets',
+ required=True,
+ help='Path to the JSON file containing the variant subsets for '
+ 'different p-value and window size combinations.'
+ )
+ parser.add_argument(
+ '-p', '--pheno',
+ required=True,
+ help='Path to the tab-separated file containing the phenotype data.'
+ )
+ parser.add_argument(
+ '-c', '--covars',
+ required=True,
+ help='Path to the tab-separated file containing the covariate data.'
+ )
+ parser.add_argument(
+ '--train-ids',
+ required=True,
+ help='Path to the text file containing the IDs of the samples to '
+ 'use for the training set.'
+ )
+ parser.add_argument(
+ '--val-ids',
+ required=True,
+ help='Path to the text file containing the IDs of the samples to '
+ 'use for the validation set.'
+ )
+ parser.add_argument(
+ '--test-ids',
+ required=True,
+ help='Path to the text file containing the IDs of the samples to '
+ 'use for the test set.'
+ )
+ parser.add_argument(
+ '-o', '--out-dir',
+ default='.',
+ help='Directory in which to save the output files.'
+ )
+ parser.add_argument(
+ '-i', '--id-col',
+ default='IID',
+ help='Name of the column in the genotype data that contains the '
+ 'sample IDs.'
+ )
+ return parser.parse_args()
+
+
+def main():
+ args = parse_args()
+ print('Args:', flush=True)
+ pprint(vars(args))
+
+ # Load model configuration
+ print('Loading training configuration...', flush=True)
+ with open(args.training_config, 'r') as f:
+ training_config = json.load(f)
+
+ if 'early_stopping' not in training_config:
+ training_config['early_stopping'] = False
+
+ multi_thresh = training_config['model_type'].endswith('multi_thresh')
+
+ # Save training config to out_dir
+ with open(os.path.join(args.out_dir, 'training_config.json'), 'w') as f:
+ json.dump(training_config, f, indent=4)
+
+ # Load sample ID sets as lists
+ print('Loading sample ID sets...', flush=True)
+ with open(args.train_ids, 'r') as f:
+ train_ids = f.read().splitlines()
+ with open(args.val_ids, 'r') as f:
+ val_ids = f.read().splitlines()
+ with open(args.test_ids, 'r') as f:
+ test_ids = f.read().splitlines()
+
+ # Load variant subsets and create hyperparameter space
+ print('Loading variant subsets...', flush=True)
+ with open(args.var_subsets, 'r') as f:
+ var_subsets = json.load(f)
+
+ if multi_thresh:
+ # Flatten var_subsets by combining p-value and window size keys
+ new_var_subsets = dict()
+ for p_val in var_subsets:
+ for window in var_subsets[p_val]:
+ new_var_subsets[
+ f"p-val:{p_val}, window:{window}"
+ ] = var_subsets[p_val][window]
+ var_subsets = new_var_subsets
+
+ cutoff_keys = list(var_subsets.keys())
+ # cutoff_counts = [len(var_subsets[k]) for k in cutoff_keys]
+
+ cutoff_hp_space = {
+ 'filter_threshold': {
+ 'domain': tune.choice(cutoff_keys),
+ # 'low_cost_init_value': cutoff_keys[np.argmin(cutoff_counts)],
+ # 'cat_hp_cost': np.log(cutoff_counts).tolist(),
+ }
+ }
+ else:
+ included_vars = var_subsets[training_config['p_val']][training_config['window']]
+ print(f'\tIncluded variants: {len(included_vars)}', flush=True)
+
+ # Load phenotype and covariate data
+ print('Loading phenotype data...', flush=True)
+ pheno_df = pl.read_csv(
+ args.pheno,
+ separator='\t',
+ )
+
+ pheno_df_cols = [c for c in pheno_df.columns if c != args.id_col]
+ assert len(pheno_df_cols) == 1, 'Phenotype file must have exactly one phenotype column.'
+ pheno_name = pheno_df_cols[0]
+
+ print('Loading covariate data...', flush=True)
+ covars_df = pl.read_csv(
+ args.covars,
+ separator='\t',
+ )
+ covar_names = [col for col in covars_df.columns if col != args.id_col]
+
+ # Load genotype data for samples in the training and validation sets
+ print('Scanning genotype data...', flush=True)
+ geno_lazy = pl.scan_parquet(args.geno_parquet)
+
+ print('Loading training genotype data...', flush=True)
+ if multi_thresh:
+ train_geno_df = geno_lazy.filter(
+ pl.col(args.id_col).is_in(train_ids)
+ ).collect(streaming=True)
+ else:
+ train_geno_df = geno_lazy.filter(
+ pl.col(args.id_col).is_in(train_ids)
+ ).select(
+ [args.id_col] + included_vars
+ ).collect(streaming=True)
+
+ print(train_geno_df)
+
+ print('Loading validation genotype data...', flush=True)
+ if multi_thresh:
+ val_geno_df = geno_lazy.filter(
+ pl.col(args.id_col).is_in(val_ids)
+ ).collect(streaming=True)
+ else:
+ val_geno_df = geno_lazy.filter(
+ pl.col(args.id_col).is_in(val_ids)
+ ).select(
+ [args.id_col] + included_vars
+ ).collect(streaming=True)
+
+ train_df = train_geno_df.join(
+ pheno_df,
+ args.id_col
+ ).join(
+ covars_df,
+ args.id_col
+ )
+ train_ids = train_df[args.id_col].to_numpy()
+ train_labels = train_df[pheno_name].to_numpy()
+
+ train_df = train_df.drop(args.id_col, pheno_name)
+
+ val_df = val_geno_df.join(
+ pheno_df,
+ args.id_col
+ ).join(
+ covars_df,
+ args.id_col
+ )
+ val_ids = val_df[args.id_col].to_numpy()
+ val_labels = val_df[pheno_name].to_numpy()
+
+ val_df = val_df.drop(args.id_col, pheno_name)
+
+ # Fit AutoML PRS model
+
+ # Create AutoML object and set default parameters
+ automl = AutoML(
+ auto_augment=False,
+ hpo_method='bs', # BlendSearch
+ log_type='all',
+ log_training_metric=True,
+ skip_transform=True,
+ retrain_full=False,
+ sample=False,
+ early_stop=True,
+ starting_points='static',
+ verbose=3,
+ ensemble=False,
+ )
+
+ # Fit model
+ start_time = time.time()
+
+ if multi_thresh:
+ automl.fit(
+ X_train=train_df,
+ y_train=train_labels,
+ X_val=val_df,
+ y_val=val_labels,
+ task=PRSTask(training_config['task']),
+ estimator_list=[training_config['model_type']],
+ custom_hp={
+ training_config['model_type']: cutoff_hp_space
+ },
+ fit_kwargs_by_estimator={
+ training_config['model_type']: {
+ 'var_sets_map': var_subsets,
+ 'covar_cols': covar_names,
+ 'print_params': True,
+ }
+ },
+ time_budget=training_config['time_budget'],
+ early_stop=training_config['early_stopping'],
+ metric=training_config['metric'],
+ log_file_name=os.path.join(args.out_dir, 'fit.log')
+ )
+ else:
+ automl.fit(
+ X_train=train_df,
+ y_train=train_labels,
+ X_val=val_df,
+ y_val=val_labels,
+ task=PRSTask(training_config['task']),
+ estimator_list=[training_config['model_type']],
+ fit_kwargs_by_estimator={
+ training_config['model_type']: {
+ 'print_params': True,
+ }
+ },
+ time_budget=training_config['time_budget'],
+ early_stop=training_config['early_stopping'],
+ metric=training_config['metric'],
+ log_file_name=os.path.join(args.out_dir, 'fit.log')
+ )
+
+ end_time = time.time()
+ runtime_seconds = end_time - start_time
+ print(
+ f'\nModel fitting runtime: {runtime_seconds / 3600:.2f} hours',
+ flush=True
+ )
+
+ # Save runtime to JSON
+ with open(os.path.join(args.out_dir, 'runtime.json'), 'w') as f:
+ json.dump({'runtime_seconds': runtime_seconds}, f)
+
+ # Print best model
+ print(f'\nBest model: {automl.best_estimator}', flush=True)
+ pprint(automl.best_config)
+
+ # Save best model config as JSON
+ with open(os.path.join(args.out_dir, 'best_model_config.json'), 'w') as f:
+ json.dump({
+ 'best_estimator': automl.best_estimator,
+ 'best_config': automl.best_config,
+ },
+ f,
+ indent=4
+ )
+
+ # Save best model
+ with open(os.path.join(args.out_dir, 'best_model.pkl'), 'wb') as f:
+ pickle.dump(automl.model, f, protocol=4)
+
+ # Plot learning curve
+ (
+ time_history, best_valid_loss_history, valid_loss_history,
+ config_history, metric_history
+ ) = get_output_from_log(
+ os.path.join(args.out_dir, 'fit.log'),
+ time_budget=training_config['time_budget'],
+ )
+
+ if training_config['metric'] in {'r2'}:
+ best_valid_loss_history = 1 - np.array(best_valid_loss_history)
+ valid_loss_history = 1 - np.array(valid_loss_history)
+
+ # Plot best curve and all results curve on same plot
+ plt.step(
+ time_history,
+ best_valid_loss_history,
+ where='post',
+ label='Best Model'
+ )
+ plt.plot(
+ time_history,
+ valid_loss_history,
+ '--',
+ label='All Models'
+ )
+ plt.ylim(
+ bottom=0,
+ top=max(max(best_valid_loss_history), max(valid_loss_history)) * 1.05
+ )
+ plt.legend()
+ plt.title('Learning Curve')
+ plt.xlabel('Wall Clock Time (s)')
+ plt.ylabel(training_config['metric'].title())
+ plt.savefig(
+ os.path.join(args.out_dir, 'learning_curve.png'),
+ dpi=200
+ )
+ plt.close()
+
+ # Load test data and evaluate best model
+ del train_df, train_labels
+
+ print('Loading test genotype data...', flush=True)
+ if multi_thresh:
+ test_geno_df = geno_lazy.filter(
+ pl.col(args.id_col).is_in(test_ids)
+ ).collect(streaming=True)
+ else:
+ test_geno_df = geno_lazy.filter(
+ pl.col(args.id_col).is_in(test_ids)
+ ).select(
+ [args.id_col] + included_vars
+ ).collect(streaming=True)
+
+ # Join genotype data with phenotype and covariate data, then pop labels
+ # and sample IDs
+ test_df = test_geno_df.join(
+ pheno_df,
+ args.id_col
+ ).join(
+ covars_df,
+ args.id_col
+ )
+ test_ids = test_df[args.id_col].to_numpy()
+ # test_labels = test_df[pheno_name].to_numpy()
+
+ test_df = test_df.drop(args.id_col, pheno_name)
+
+ # Make predictions for validation and test sets
+ print(
+ '\nPredicting for validation and test sets with best model',
+ flush=True
+ )
+ val_preds = automl.predict(val_df)
+ test_preds = automl.predict(test_df)
+
+ # Save predictions as CSV files with sample IDs
+ val_preds_df = pd.DataFrame({
+ args.id_col: val_ids,
+ 'pred': val_preds,
+ })
+ val_preds_df.to_csv(
+ os.path.join(args.out_dir, 'val_preds.csv'),
+ index=False
+ )
+
+ test_preds_df = pd.DataFrame({
+ args.id_col: test_ids,
+ 'pred': test_preds,
+ })
+ test_preds_df.to_csv(
+ os.path.join(args.out_dir, 'test_preds.csv'),
+ index=False
+ )
+
+
+if __name__ == '__main__':
+ main()
diff --git a/paper/workflows/aml_basil_vars/lgbm_v0h1_basil.json b/paper/workflows/aml_basil_vars/lgbm_v0h1_basil.json
new file mode 100644
index 0000000..6c833e3
--- /dev/null
+++ b/paper/workflows/aml_basil_vars/lgbm_v0h1_basil.json
@@ -0,0 +1,9 @@
+{
+ "model_type": "lgbm",
+ "metric": "r2",
+ "task": "regression",
+ "time_budget": 900,
+ "early_stopping": true,
+ "p_val": "basil",
+ "window": "included"
+}
\ No newline at end of file
diff --git a/paper/workflows/aml_basil_vars/run_aml_basil_vars.sh b/paper/workflows/aml_basil_vars/run_aml_basil_vars.sh
new file mode 100755
index 0000000..2ab34d6
--- /dev/null
+++ b/paper/workflows/aml_basil_vars/run_aml_basil_vars.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+
+# Run PRSice2 PRS on CITRUS simulated phenotype
+
+# PHENO=mult_pheno_1
+# PHENO=mult_pheno_2
+# PHENO=xor_pheno_1
+# PHENO=xor_pheno_2
+# PHENO=compound_het
+# PHENO=compound_het_2
+# PHENO=gepsi_lin_add_h0625_h0625
+# PHENO=gepsi_lin_add_h125_h125
+# PHENO=gepsi_lin_add_h25_h25
+# PHENO=gepsi_lin_add_h5_h5
+# PHENO=gepsi_lin_add_hFULL_hFULL
+
+# PHENO=gepsi_lin_add_h0625
+# PHENO=gepsi_lin_add_h125
+# PHENO=gepsi_lin_add_h25
+# PHENO=gepsi_lin_add_h5
+# PHENO=gepsi_lin_add_hFULL
+
+# PHENO=gepsi_lin_add_h0625_gcta
+# PHENO=gepsi_lin_add_h125_gcta
+# PHENO=gepsi_lin_add_h25_gcta
+# PHENO=gepsi_lin_add_h5_gcta
+PHENO=gepsi_lin_add_hFULL_gcta
+
+# PHENO_DIR=pheno_sim/citrus_phenos
+# PHENO_DIR=output/gepsi_phenos
+PHENO_DIR=output/gcta_phenos
+
+echo ${PHENO}
+echo ${PHENO_DIR}
+
+TEMP_DIR=/tmp
+OUT_DIR=output/aml_basil_vars/${PHENO}
+FILTER_OUT_DIR=output/aml_filter_vars_basil/${PHENO}
+
+SPLITS_DIR=data/splits
+TRAIN_SPLIT_FNAME=train_samples.txt
+VAL_SPLIT_FNAME=val_samples.txt
+TEST_SPLIT_FNAME=test_samples.txt
+GENO_DIR=data/geno_data/pgen
+PGEN_FNAME=imputed_chr19_1ID
+PC_DIR=data/geno_data/PCs
+
+BASIL_INCL_FILE=output/basil/${PHENO}/included_features.csv
+
+DOCKER_URL=gcr.io/ucsd-medicine-cast/nonlin_prs_prs_aml:latest
+
+# Start docker env
+module load singularitypro
+
+singularity exec --containall \
+ --bind /expanse/projects/gymreklab/rdevito:/mnt \
+ docker://${DOCKER_URL} \
+ bash -c "cd /mnt/citrus/CITRUS/paper && \
+ mkdir -p ${OUT_DIR} && \
+ awk 'NR==1 {print \"IID\tphenotype\"; next} {print \$1\"_\"\$2\"\t\"\$3}' \
+ ${PHENO_DIR}/${PHENO}.pheno > ${OUT_DIR}/${PHENO}_1ID.pheno \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${TRAIN_SPLIT_FNAME} > ${TEMP_DIR}/${TRAIN_SPLIT_FNAME} \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${VAL_SPLIT_FNAME} > ${TEMP_DIR}/${VAL_SPLIT_FNAME} \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${TEST_SPLIT_FNAME} > ${TEMP_DIR}/${TEST_SPLIT_FNAME} \
+ && \
+ python3 workflows/aml_basil_vars/fit_automl_prs.py \
+ --training-config /mnt/citrus/CITRUS/paper/workflows/aml_basil_vars/lgbm_v0h1_basil.json \
+ --geno-parquet ${FILTER_OUT_DIR}/filtered_vars.parquet \
+ --var-subsets ${FILTER_OUT_DIR}/filtered_vars.json \
+ --pheno ${OUT_DIR}/${PHENO}_1ID.pheno \
+ --covars ${PC_DIR}/pcs_1ID.tsv \
+ --train-ids ${TEMP_DIR}/${TRAIN_SPLIT_FNAME} \
+ --val-ids ${TEMP_DIR}/${VAL_SPLIT_FNAME} \
+ --test-ids ${TEMP_DIR}/${TEST_SPLIT_FNAME} \
+ -o ${OUT_DIR} "
\ No newline at end of file
diff --git a/paper/workflows/aml_filter_vars/filter_vars_by_basil.py b/paper/workflows/aml_filter_vars/filter_vars_by_basil.py
new file mode 100644
index 0000000..00730f5
--- /dev/null
+++ b/paper/workflows/aml_filter_vars/filter_vars_by_basil.py
@@ -0,0 +1,119 @@
+"""Filter variants for inclusion as PRS model using just SNPs used by BASIL.
+
+Saves variant IDs to a text file, which can be used as input to plink
+--extract to filter the genotype data to just these variants.
+
+Has three outputs:
+
+1. Text file with variant IDs one-per-line are clump lead SNPs. This can be
+used as input to plink --extract to filter the genotype data to just these
+variants. Will be named 'filtered_vars_all.txt'.
+
+2. A JSON file in the format of those that store which variants are included
+for each p-value and window size combination. Will be named
+'filtered_vars_raw.json'. First level key is 'clump', second level key is
+'lead', and values are lists of variant IDs.
+
+3. A meta data JSON file, named 'fitered_vars_meta.json'. The meta data
+section includes info on:
+ - the number of variants that pass each threshold
+ - the parameters of the filtering process.
+
+Args:
+
+* -b, --basil-included-file: Path to the CSV (or one ID per line text file)
+ containing the variant IDs that were included in the BASIL model.
+* -o, --out-dir: Directory in which to save the output files.
+ Default: '.'.
+
+Example usage:
+
+```bash
+python filter_vars_by_pval.py \
+ -b /path/to/basil_included_file.csv \
+ -o /path/to/output_dir
+```
+"""
+
+import argparse
+import os
+import json
+from itertools import product
+from collections import defaultdict
+
+import pandas as pd
+from tqdm import tqdm
+
+
+def parse_args():
+ parser = argparse.ArgumentParser(
+ description=__doc__,
+ formatter_class=argparse.RawDescriptionHelpFormatter
+ )
+ parser.add_argument(
+ '-b', '--basil-included-file',
+ required=True,
+ help='Path to the CSV (or one ID per line text file) containing the '
+ 'variant IDs that were included in the BASIL model.'
+ )
+ parser.add_argument(
+ '-o', '--out-dir',
+ default='.',
+ help='Directory in which to save the output files. Default: \'.\'.'
+ )
+
+ return parser.parse_args()
+
+
+if __name__ == '__main__':
+
+ # Parse command line arguments
+ args = parse_args()
+
+ # Load BASIL included variants
+ incl_id_series = pd.read_csv(
+ args.basil_included_file,
+ header=None,
+ ).iloc[:, 0]
+
+ # Drop IDs that do not contain an underscore
+ incl_id_series = incl_id_series[incl_id_series.str.contains(r'_')]
+
+ # Drop everything after the last underscore
+ incl_id_series = incl_id_series.apply(lambda x: '_'.join(x.split('_')[:-1]))
+
+ # Get
+ incl_variants = incl_id_series.to_list()
+
+ # Create output JSON dicts
+ var_ids_sets = {
+ "basil": {
+ "included": incl_variants
+ }
+ }
+
+ meta_dict = {
+ "filtering": {
+ "basil": True,
+ },
+ }
+
+ # Save all variant IDs that pass any filter
+ all_sig_variants_file = os.path.join(args.out_dir, 'filtered_vars_all.txt')
+ with open(all_sig_variants_file, 'w') as f:
+ f.write('\n'.join(incl_variants))
+
+ # Add counts to meta data section
+ meta_dict["filtering"]["n_var_total"] = len(incl_variants) # type: ignore
+ meta_dict["filtering"]["n_var_threshold"] = { # type: ignore
+ "basil": {"included": len(incl_variants)}
+ }
+
+ # Save JSON output
+ var_ids_sets_file = os.path.join(args.out_dir, 'filtered_vars_raw.json')
+ with open(var_ids_sets_file, 'w') as f:
+ json.dump(var_ids_sets, f, indent=4)
+
+ meta_dict_file = os.path.join(args.out_dir, 'filtered_vars_meta.json')
+ with open(meta_dict_file, 'w') as f:
+ json.dump(meta_dict, f, indent=4)
diff --git a/paper/workflows/aml_filter_vars/filter_vars_by_pval.py b/paper/workflows/aml_filter_vars/filter_vars_by_pval.py
new file mode 100644
index 0000000..bf7de60
--- /dev/null
+++ b/paper/workflows/aml_filter_vars/filter_vars_by_pval.py
@@ -0,0 +1,239 @@
+"""Filter variants for inclusion as PRS model input by Bonferonni corrected
+p-value & window size.
+
+Will only include thresholds with a number of variants less than or equal
+to --max-variants.
+
+Saves superset of all variant IDs that pass any filter to a text file, which
+can be used as input to plink --extract to filter the genotype data to just
+these variants.
+
+Has three outputs:
+
+1. Text file with variant IDs one-per-line that pass all the the p-value
+and window size filters (the superset of all pairs of p-value and window
+size combinations). This can be used as input to plink --extract to filter
+the genotype data to just these variants. Will be named 'filtered_vars_all.txt'.
+
+2. A JSON file that stores which variants are included for each p-value and
+window size combination. Will be named 'filtered_vars_raw.json'. First level
+keys are p-value thresholds, second level keys are window sizes, and values are
+lists of variant IDs.
+
+3. A meta data JSON file, named 'fitered_vars_meta.json'. The meta data
+section includes info on:
+ - the number of variants that pass each threshold
+ - the parameters of the filtering process.
+
+Args:
+
+* -s, --sum-stats-file: Path to whitespace delimited summary statistics
+ file that includes the var_id_col, p_val_col, chrom_col, and pos_col
+ columns.
+* -m, --max-variants: Maximum number of variants to include in the PRS model.
+ Default: 80,000.
+* -p, --pval-thresh: P-value threshold(s) to use for filtering.
+* -w, --window-bp: Window size(s) in base pairs around each variant below the
+ p-value threshold. Default: 0.
+* -o, --out-dir: Directory in which to save the output files.
+ Default: '.'.
+* --var-id-col: Name of the column in the summary statistics file that
+ contains the variant IDs. Default: 'ID'.
+* --p-val-col: Name of the column in the summary statistics file that contains
+ the p-values. Default: 'P'.
+* --chrom-col: Name of the column in the summary statistics file that contains
+ the chromosome numbers. Default: '#CHROM'.
+* --pos-col: Name of the column in the summary statistics file that contains
+ the base pair positions. Default: 'POS'.
+
+Example usage:
+
+```bash
+python filter_vars_by_pval.py \
+ -s /path/to/sum_stats.tsv \
+ -p 5e-8 1e-5 0.05 \
+ -w 0 10000 100000 \
+ -o /path/to/output_dir \
+ --var-id-col ID \
+ --p-val-col P \
+ --chrom-col '#CHROM' \
+ --pos-col POS
+```
+"""
+
+import argparse
+import os
+import json
+from itertools import product
+from collections import defaultdict
+
+import pandas as pd
+from tqdm import tqdm
+
+
+def parse_args():
+ parser = argparse.ArgumentParser(
+ description=__doc__,
+ formatter_class=argparse.RawDescriptionHelpFormatter
+ )
+ parser.add_argument(
+ '-s', '--sum-stats-file',
+ required=True,
+ help='Path to summary statistics file that includes the var_id_col, '
+ 'p_val_col, chrom_col, and pos_col columns.'
+ )
+ parser.add_argument(
+ '-m', '--max-variants',
+ type=int,
+ default=80_000,
+ help='Maximum number of variants to include in the PRS model.'
+ )
+ parser.add_argument(
+ '-p', '--pval-thresh',
+ nargs='+',
+ required=True,
+ help='P-value threshold(s) to use for filtering.'
+ )
+ parser.add_argument(
+ '-w', '--window-bp',
+ nargs='+',
+ type=int,
+ default=[0],
+ help='Window size(s) in base pairs around each variant below the '
+ 'p-value threshold. Default: 0.'
+ )
+ parser.add_argument(
+ '-o', '--out-dir',
+ default='.',
+ help='Directory in which to save the filtered variant files. Default: '
+ '\'\'.'
+ )
+ parser.add_argument(
+ '--var-id-col',
+ default='ID',
+ help='Name of the column in the summary statistics file that contains '
+ 'the variant IDs. Default: \'ID\'.'
+ )
+ parser.add_argument(
+ '--p-val-col',
+ default='P',
+ help='Name of the column in the summary statistics file that contains '
+ 'the p-values. Default: \'P\'.'
+ )
+ parser.add_argument(
+ '--chrom-col',
+ default='#CHROM',
+ help='Name of the column in the summary statistics file that contains '
+ 'the chromosome numbers. Default: \'#CHROM\'.'
+ )
+ parser.add_argument(
+ '--pos-col',
+ default='POS',
+ help='Name of the column in the summary statistics file that contains '
+ 'the base pair positions. Default: \'POS\'.'
+ )
+
+ return parser.parse_args()
+
+
+if __name__ == '__main__':
+
+ # Parse command line arguments
+ args = parse_args()
+
+ # Load summary statistics
+ ss_df = pd.read_csv(args.sum_stats_file, sep='\t')
+
+ # Bonferonni correct p-values
+ ss_df[args.p_val_col] = ss_df[args.p_val_col] * len(ss_df)
+
+ # Save all variant IDs that pass any filter
+ all_sig_variants = set()
+
+ # Create output JSON dicts
+ var_ids_sets = defaultdict(dict) # First level keys are p-value
+ # thresholds, second level keys are
+ # window sizes, and values are lists of
+ # variant IDs
+
+ meta_dict = {
+ "filtering": {
+ "p_val_col": args.p_val_col,
+ "chrom_col": args.chrom_col,
+ "pos_col": args.pos_col,
+ "pval_thresh": args.pval_thresh,
+ "window_bp": args.window_bp,
+ "max_variants": args.max_variants,
+ },
+ }
+
+ # Loop through each p-value threshold and window size and filter variants
+ for p_val_thresh_str, window_bp in tqdm(
+ product(args.pval_thresh, args.window_bp),
+ desc='Filtering variants',
+ total=len(args.pval_thresh) * len(args.window_bp)
+ ):
+ print(f"Filtering variants for p-value threshold: {p_val_thresh_str} window: {window_bp}")
+
+ # Filter by p-value
+ pval_thresh = float(p_val_thresh_str)
+
+ sig_variants = ss_df[ss_df[args.p_val_col] < pval_thresh]
+
+ # Check if number of significant variants is less than max_variants
+ if len(sig_variants) > args.max_variants:
+ print(f"\tMax number of variants exceeded: {len(sig_variants)} > {args.max_variants}")
+ continue
+
+ if window_bp > 0:
+ variant_ids = set(sig_variants[args.var_id_col])
+
+ # Loop through each significant variant and extract nearby variants
+ for _, variant in sig_variants.iterrows():
+ nearby_variants = ss_df[
+ (ss_df[args.chrom_col] == variant[args.chrom_col]) &
+ (ss_df[args.pos_col] >= variant[args.pos_col] - window_bp) &
+ (ss_df[args.pos_col] <= variant[args.pos_col] + window_bp)
+ ]
+
+ variant_ids.update(nearby_variants[args.var_id_col])
+
+ sig_variants = ss_df[ss_df[args.var_id_col].isin(variant_ids)]
+
+ if len(sig_variants) > args.max_variants:
+ print(f"\tMax number of variants exceeded: {len(sig_variants)} > {args.max_variants}")
+ continue
+
+ # Add selected variants to output JSON dict
+ var_ids_sets[p_val_thresh_str][window_bp] = sig_variants[
+ args.var_id_col
+ ].to_list()
+
+ all_sig_variants.update(sig_variants[args.var_id_col])
+
+ print(f"Added {len(sig_variants)} variants for p-val: {p_val_thresh_str} window: {window_bp}")
+ print(f"\tTotal included variants: {len(all_sig_variants)}")
+
+ # Save all variant IDs that pass any filter
+ all_sig_variants_file = os.path.join(args.out_dir, 'filtered_vars_all.txt')
+ with open(all_sig_variants_file, 'w') as f:
+ f.write('\n'.join(all_sig_variants))
+
+ # Add counts to meta data section
+ meta_dict["filtering"]["n_var_total"] = len(all_sig_variants)
+ meta_dict["filtering"]["n_var_threshold"] = defaultdict(dict)
+
+ for p_val_thresh_str in var_ids_sets.keys():
+ for window_bp in var_ids_sets[p_val_thresh_str].keys():
+ meta_dict["filtering"]["n_var_threshold"][p_val_thresh_str][window_bp] = len(
+ var_ids_sets[p_val_thresh_str][window_bp]
+ )
+
+ # Save JSON output
+ var_ids_sets_file = os.path.join(args.out_dir, 'filtered_vars_raw.json')
+ with open(var_ids_sets_file, 'w') as f:
+ json.dump(var_ids_sets, f, indent=4)
+
+ meta_dict_file = os.path.join(args.out_dir, 'filtered_vars_meta.json')
+ with open(meta_dict_file, 'w') as f:
+ json.dump(meta_dict, f, indent=4)
diff --git a/paper/workflows/aml_filter_vars/raw_to_input_parquet.py b/paper/workflows/aml_filter_vars/raw_to_input_parquet.py
new file mode 100644
index 0000000..61b70fe
--- /dev/null
+++ b/paper/workflows/aml_filter_vars/raw_to_input_parquet.py
@@ -0,0 +1,166 @@
+"""Create parquet file which will be used as input to auto-ML models.
+
+Each p-value and window size combination will use a subset of the features
+from the genotype data. This script saves a JSON file 'filtered_vars.json'
+that contains the variant sets for each p-value and window size combination
+with names that will match the parquet files.
+
+IID is used as the sample ID column.
+
+Args:
+
+* -f, --filtered-vars-raw: Path to the 'filtered_vars_raw.json' file output by
+ 'filter_vars_by_pval.py'. This file contains the variant sets for each
+ p-value and window size combination with names that are based on the
+ original PGEN file. The .raw file output by plink2 modifies the variant
+ names to include the allele the dosage is for, which this script corrects
+ for in the output JSON file.
+* -r, --raw-geno: Path to the raw genotype data TSV file. This will be used
+ to map column names and then create the parquet file.
+* -o, --out-dir: Directory in which to save the parquet files. Default: '.'.
+* --out-parquet-fname: Name of output parquet file. Default:
+ 'filtered_vars.parquet'.
+* --out-json-fname: Name of output JSON file. Contains updated mapping
+ of which variants are part of which sets (to match changes by plink2
+ export). Default: 'filtered_vars.json'.
+"""
+
+import argparse
+import os
+import json
+from collections import defaultdict
+
+import pandas as pd
+import numpy as np
+import polars as pl
+from tqdm.autonotebook import tqdm
+
+
+def parse_args():
+ """Parse command line arguments."""
+ parser = argparse.ArgumentParser(
+ description='Create parquet file which will be used as input to '
+ 'auto-ML models.'
+ )
+ parser.add_argument(
+ '-f', '--filtered-vars-raw',
+ required=True,
+ help='Path to the \'filtered_vars_raw.json\' file output by '
+ '\'filter_vars_by_pval.py\'. This file contains the variant sets '
+ 'for each p-value and window size combination with names that are '
+ 'based on the original PGEN file. The .raw file output by plink2 '
+ 'modifies the variant names to include the allele the dosage is '
+ 'for, which this script corrects for in the output JSON file.'
+ )
+ parser.add_argument(
+ '-r', '--raw-geno',
+ required=True,
+ help='Path to the raw genotype data TSV file. This will be used to '
+ 'map column names and then create the parquet file.'
+ )
+ parser.add_argument(
+ '-o', '--out-dir',
+ default='.',
+ help='Directory in which to save the parquet files. Default: \'.\'.'
+ )
+ parser.add_argument(
+ '--out-parquet-fname',
+ default='filtered_vars.parquet',
+ help='Name of output parquet file. Default: \'filtered_vars.parquet\'.'
+ )
+ parser.add_argument(
+ '--out-json-fname',
+ default='filtered_vars.json',
+ help='Name of output JSON file. Contains updated mapping of which '
+ 'variants are part of which sets (to match changes by plink2 '
+ 'export). Default: \'filtered_vars.json\'.'
+ )
+ return parser.parse_args()
+
+
+def get_var_name_mapping(col_name):
+ """Given a variant column name from the plink2 raw export file, returns
+ the original variant name and the raw variant name as a tuple.
+
+ Gets the original variant name by removing the '_{allele_dosage_is_for}'
+ part of the column name.
+ """
+ return (
+ '_'.join(col_name.split('_')[:-1]),
+ col_name
+ )
+
+
+if __name__ == '__main__':
+
+ args = parse_args()
+
+ # Load variant sets
+ with open(os.path.join(args.filtered_vars_raw), 'r') as f:
+ raw_var_sets = json.load(f)
+
+ # print(raw_var_sets.keys())
+
+ # Load raw genotype data header with pandas
+ print('Loading raw genotype header...')
+ geno_header = pd.read_csv(
+ args.raw_geno,
+ sep='\t',
+ nrows=0,
+ )
+
+ # Map variant column names
+ print('Mapping variant column names...')
+ nongeno_cols = set(['FID', 'IID', 'PAT', 'MAT', 'SEX', 'PHENOTYPE'])
+ geno_col_mapping = dict(
+ [get_var_name_mapping(c) for c in geno_header.columns if c not in nongeno_cols]
+ )
+ geno_col_set = set(geno_col_mapping.keys())
+
+ # Create updated variant sets
+ print('Updating variant sets...')
+ updated_var_sets = defaultdict(dict)
+ for p_val in raw_var_sets.keys():
+ for window in raw_var_sets[p_val].keys():
+ vars = geno_col_set.intersection(raw_var_sets[p_val][window])
+ updated_var_sets[p_val][window] = [
+ geno_col_mapping[var] for var in vars
+ ]
+
+ # Save updated variant sets
+ print('Saving updated variant sets...')
+ with open(os.path.join(args.out_dir, args.out_json_fname), 'w') as f:
+ json.dump(updated_var_sets, f)
+
+ # Scan and sink with polars
+ raw_dtypes = {'IID': pl.String}
+ for col in geno_col_mapping.values():
+ raw_dtypes[col] = pl.Float32 # type: ignore
+
+ lazy_df = pl.scan_csv(
+ args.raw_geno,
+ separator='\t',
+ low_memory=False,
+ dtypes=raw_dtypes,
+ null_values=['__NA__', 'NA', '-9']
+ ).select(
+ *list(raw_dtypes.keys())
+ )
+
+ print(lazy_df.describe())
+
+ # Check that there are no missing values
+ print('Checking for missing values...')
+ null_counts = lazy_df.null_count().collect(streaming=True)
+ n_missing = null_counts.sum_horizontal().item()
+ if n_missing > 0:
+ print(
+ f'Found {n_missing} missing values in the genotype data.'
+ )
+
+ # Sink to parquet
+ print('Saving parquet file...')
+ lazy_df.sink_parquet(
+ os.path.join(args.out_dir, args.out_parquet_fname),
+ compression="snappy"
+ )
diff --git a/paper/workflows/aml_filter_vars/run_filter_vars.sh b/paper/workflows/aml_filter_vars/run_filter_vars.sh
new file mode 100755
index 0000000..6aaf747
--- /dev/null
+++ b/paper/workflows/aml_filter_vars/run_filter_vars.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+
+# Run PRSice2 PRS on CITRUS simulated phenotype
+
+# PHENO=mult_pheno_1
+# PHENO=mult_pheno_2
+# PHENO=xor_pheno_1
+# PHENO=xor_pheno_2
+# PHENO=compound_het
+# PHENO=compound_het_2
+# PHENO=gepsi_lin_add_h0625_h0625
+# PHENO=gepsi_lin_add_h125_h125
+# PHENO=gepsi_lin_add_h25_h25
+# PHENO=gepsi_lin_add_h5_h5
+# PHENO=gepsi_lin_add_hFULL_hFULL
+
+# PHENO=gepsi_lin_add_h0625
+# PHENO=gepsi_lin_add_h125
+# PHENO=gepsi_lin_add_h25
+# PHENO=gepsi_lin_add_h5
+# PHENO=gepsi_lin_add_hFULL
+
+# PHENO=gepsi_lin_add_h0625_gcta
+# PHENO=gepsi_lin_add_h125_gcta
+# PHENO=gepsi_lin_add_h25_gcta
+# PHENO=gepsi_lin_add_h5_gcta
+PHENO=gepsi_lin_add_hFULL_gcta
+
+echo ${PHENO}
+
+MAX_N_VARS=10000
+
+TEMP_DIR=/tmp
+OUT_DIR=output/aml_filter_vars/${PHENO}
+GWAS_OUT_DIR=output/GWAS
+
+GWAS_SS=output/GWAS/${PHENO}.phenotype.glm.linear
+SPLITS_DIR=data/splits
+VAL_SPLIT_FNAME=val_samples.txt
+TEST_SPLIT_FNAME=test_samples.txt
+GENO_DIR=data/geno_data/pgen
+PGEN_FNAME=imputed_chr19_1ID
+
+DOCKER_URL=gcr.io/ucsd-medicine-cast/nonlin_prs_prs_aml_filter_vars:latest
+
+# Start docker env
+module load singularitypro
+
+singularity exec --containall \
+ --bind /expanse/projects/gymreklab/rdevito:/mnt \
+ docker://${DOCKER_URL} \
+ bash -c "cd /mnt/citrus/CITRUS/paper && \
+ echo 'Filtering variants by p-value and window size' && \
+ python3 /home/AutoML_PRS/data_preprocessing/filter_vars_by_pval.py \
+ --sum-stats-file ${GWAS_SS} \
+ -p 1e-5 1e-8 1e-16 1e-24 1e-32 1e-40 1e-64 1e-128 1e-256 \
+ --window-bp 0 5000 20000 50000 100000 \
+ -m ${MAX_N_VARS} \
+ -o ${TEMP_DIR} \
+ && \
+ echo 'Filter and convert to Python readable format' && \
+ mkdir -p ${OUT_DIR} && \
+ plink2 \
+ --pfile ${GENO_DIR}/${PGEN_FNAME} \
+ --extract ${TEMP_DIR}/filtered_vars_all.txt \
+ --export A \
+ --out ${OUT_DIR}/filtered_doseage_table \
+ && \
+ python3 workflows/aml_filter_vars/raw_to_input_parquet.py \
+ -f ${TEMP_DIR}/filtered_vars_raw.json \
+ -r ${OUT_DIR}/filtered_doseage_table.raw \
+ -o ${OUT_DIR} "
+
+# -p 1e-5 1e-8 1e-14 1e-20 1e-26 \
+# --window-bp 0 5000 10000 25000 100000 \
\ No newline at end of file
diff --git a/paper/workflows/aml_filter_vars_basil/run_filter_vars_basil.sh b/paper/workflows/aml_filter_vars_basil/run_filter_vars_basil.sh
new file mode 100755
index 0000000..2cd6b2b
--- /dev/null
+++ b/paper/workflows/aml_filter_vars_basil/run_filter_vars_basil.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+# Run PRSice2 PRS on CITRUS simulated phenotype
+
+# PHENO=mult_pheno_1
+# PHENO=mult_pheno_2
+# PHENO=xor_pheno_1
+# PHENO=xor_pheno_2
+# PHENO=compound_het
+# PHENO=compound_het_2
+# PHENO=gepsi_lin_add_h0625_h0625
+# PHENO=gepsi_lin_add_h125_h125
+# PHENO=gepsi_lin_add_h25_h25
+# PHENO=gepsi_lin_add_h5_h5
+# PHENO=gepsi_lin_add_hFULL_hFULL
+
+# PHENO=gepsi_lin_add_h0625
+# PHENO=gepsi_lin_add_h125
+# PHENO=gepsi_lin_add_h25
+# PHENO=gepsi_lin_add_h5
+# PHENO=gepsi_lin_add_hFULL
+
+# PHENO=gepsi_lin_add_h0625_gcta
+# PHENO=gepsi_lin_add_h125_gcta
+# PHENO=gepsi_lin_add_h25_gcta
+# PHENO=gepsi_lin_add_h5_gcta
+PHENO=gepsi_lin_add_hFULL_gcta
+
+echo ${PHENO}
+
+TEMP_DIR=/tmp
+OUT_DIR=output/aml_filter_vars_basil/${PHENO}
+GWAS_OUT_DIR=output/GWAS
+
+SPLITS_DIR=data/splits
+VAL_SPLIT_FNAME=val_samples.txt
+TEST_SPLIT_FNAME=test_samples.txt
+GENO_DIR=data/geno_data/pgen
+PGEN_FNAME=imputed_chr19_1ID
+
+BASIL_INCL_FILE=output/basil/${PHENO}/included_features.csv
+
+DOCKER_URL=gcr.io/ucsd-medicine-cast/nonlin_prs_prs_aml_filter_vars:latest
+
+# Start docker env
+module load singularitypro
+
+# singularity shell --containall \
+# --bind /expanse/projects/gymreklab/rdevito:/mnt \
+# docker://${DOCKER_URL}
+
+singularity exec --containall \
+ --bind /expanse/projects/gymreklab/rdevito:/mnt \
+ docker://${DOCKER_URL} \
+ bash -c "cd /mnt/citrus/CITRUS/paper && \
+ echo 'Filtering variants to BASIL included variants' && \
+ mkdir -p ${OUT_DIR} && \
+ python3 workflows/aml_filter_vars/filter_vars_by_basil.py \
+ --basil-included-file ${BASIL_INCL_FILE} \
+ -o ${OUT_DIR} \
+ && \
+ echo 'Filter and convert to Python readable format' && \
+ plink2 \
+ --pfile ${GENO_DIR}/${PGEN_FNAME} \
+ --extract ${OUT_DIR}/filtered_vars_all.txt \
+ --export A \
+ --out ${OUT_DIR}/filtered_doseage_table \
+ && \
+ python3 workflows/aml_filter_vars/raw_to_input_parquet.py \
+ -f ${OUT_DIR}/filtered_vars_raw.json \
+ -r ${OUT_DIR}/filtered_doseage_table.raw \
+ -o ${OUT_DIR} "
diff --git a/paper/workflows/aml_filter_vars_prsice/run_filter_vars_prsice.sh b/paper/workflows/aml_filter_vars_prsice/run_filter_vars_prsice.sh
new file mode 100755
index 0000000..53470fc
--- /dev/null
+++ b/paper/workflows/aml_filter_vars_prsice/run_filter_vars_prsice.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+# Run PRSice2 PRS on CITRUS simulated phenotype
+
+# PHENO=mult_pheno_1
+# PHENO=mult_pheno_2
+# PHENO=xor_pheno_1
+# PHENO=xor_pheno_2
+# PHENO=compound_het
+# PHENO=compound_het_2
+# PHENO=gepsi_lin_add_h0625_h0625
+# PHENO=gepsi_lin_add_h125_h125
+# PHENO=gepsi_lin_add_h25_h25
+# PHENO=gepsi_lin_add_h5_h5
+# PHENO=gepsi_lin_add_hFULL_hFULL
+
+# PHENO=gepsi_lin_add_h0625
+# PHENO=gepsi_lin_add_h125
+# PHENO=gepsi_lin_add_h25
+# PHENO=gepsi_lin_add_h5
+# PHENO=gepsi_lin_add_hFULL
+
+# PHENO=gepsi_lin_add_h0625_gcta
+# PHENO=gepsi_lin_add_h125_gcta
+# PHENO=gepsi_lin_add_h25_gcta
+# PHENO=gepsi_lin_add_h5_gcta
+PHENO=gepsi_lin_add_hFULL_gcta
+
+echo ${PHENO}
+
+TEMP_DIR=/tmp
+OUT_DIR=output/aml_filter_vars_prsice/${PHENO}
+
+PRSICE_OUT_DIR=output/prsice/${PHENO}
+PRSICE_CLUMPS=${PRSICE_OUT_DIR}/prs_prsice2_clump_${PHENO}.clumps
+PRSICE_PVAL=${PRSICE_OUT_DIR}/prsice2_${PHENO}_best_p_thresh.txt
+
+SPLITS_DIR=data/splits
+VAL_SPLIT_FNAME=val_samples.txt
+TEST_SPLIT_FNAME=test_samples.txt
+GENO_DIR=data/geno_data/pgen
+PGEN_FNAME=imputed_chr19_1ID
+
+BASIL_INCL_FILE=output/basil/${PHENO}/included_features.csv
+
+DOCKER_URL=gcr.io/ucsd-medicine-cast/nonlin_prs_prs_aml_filter_vars:latest
+
+# Start docker env
+module load singularitypro
+
+singularity exec --containall \
+ --bind /expanse/projects/gymreklab/rdevito:/mnt \
+ docker://${DOCKER_URL} \
+ bash -c "cd /mnt/citrus/CITRUS/paper && \
+ echo 'Filtering variants to PRSice included variants' && \
+ mkdir -p ${OUT_DIR} && \
+ python3 /home/AutoML_PRS/data_preprocessing/filter_vars_by_clump.py \
+ --clumps-file ${PRSICE_CLUMPS} \
+ --pval-thresh-file ${PRSICE_PVAL} \
+ -o ${OUT_DIR} \
+ && \
+ echo 'Filter and convert to Python readable format' && \
+ plink2 \
+ --pfile ${GENO_DIR}/${PGEN_FNAME} \
+ --extract ${OUT_DIR}/filtered_vars_all.txt \
+ --export A \
+ --out ${OUT_DIR}/filtered_doseage_table \
+ && \
+ python3 workflows/aml_filter_vars/raw_to_input_parquet.py \
+ -f ${OUT_DIR}/filtered_vars_raw.json \
+ -r ${OUT_DIR}/filtered_doseage_table.raw \
+ -o ${OUT_DIR} "
diff --git a/paper/workflows/aml_prsice_vars/lgbm_v0h1_prsice.json b/paper/workflows/aml_prsice_vars/lgbm_v0h1_prsice.json
new file mode 100644
index 0000000..c381e04
--- /dev/null
+++ b/paper/workflows/aml_prsice_vars/lgbm_v0h1_prsice.json
@@ -0,0 +1,9 @@
+{
+ "model_type": "lgbm",
+ "metric": "r2",
+ "task": "regression",
+ "time_budget": 900,
+ "early_stopping": true,
+ "p_val": "clump",
+ "window": "lead"
+}
\ No newline at end of file
diff --git a/paper/workflows/aml_prsice_vars/run_aml_prsice_vars.sh b/paper/workflows/aml_prsice_vars/run_aml_prsice_vars.sh
new file mode 100755
index 0000000..11cc14a
--- /dev/null
+++ b/paper/workflows/aml_prsice_vars/run_aml_prsice_vars.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+
+# Run PRSice2 PRS on CITRUS simulated phenotype
+
+# PHENO=mult_pheno_1
+# PHENO=mult_pheno_2
+# PHENO=xor_pheno_1
+# PHENO=xor_pheno_2
+# PHENO=compound_het
+# PHENO=compound_het_2
+# PHENO=gepsi_lin_add_h0625_h0625
+# PHENO=gepsi_lin_add_h125_h125
+# PHENO=gepsi_lin_add_h25_h25
+# PHENO=gepsi_lin_add_h5_h5
+# PHENO=gepsi_lin_add_hFULL_hFULL
+
+# PHENO=gepsi_lin_add_h0625
+# PHENO=gepsi_lin_add_h125
+# PHENO=gepsi_lin_add_h25
+# PHENO=gepsi_lin_add_h5
+# PHENO=gepsi_lin_add_hFULL
+
+# PHENO=gepsi_lin_add_h0625_gcta
+# PHENO=gepsi_lin_add_h125_gcta
+# PHENO=gepsi_lin_add_h25_gcta
+# PHENO=gepsi_lin_add_h5_gcta
+PHENO=gepsi_lin_add_hFULL_gcta
+
+# PHENO_DIR=pheno_sim/citrus_phenos
+# PHENO_DIR=output/gepsi_phenos
+PHENO_DIR=output/gcta_phenos
+
+echo ${PHENO}
+echo ${PHENO_DIR}
+
+TEMP_DIR=/tmp
+OUT_DIR=output/aml_prsice_vars/${PHENO}
+FILTER_OUT_DIR=output/aml_filter_vars_prsice/${PHENO}
+
+SPLITS_DIR=data/splits
+TRAIN_SPLIT_FNAME=train_samples.txt
+VAL_SPLIT_FNAME=val_samples.txt
+TEST_SPLIT_FNAME=test_samples.txt
+GENO_DIR=data/geno_data/pgen
+PGEN_FNAME=imputed_chr19_1ID
+PC_DIR=data/geno_data/PCs
+
+DOCKER_URL=gcr.io/ucsd-medicine-cast/nonlin_prs_prs_aml:latest
+
+# Start docker env
+module load singularitypro
+
+singularity exec --containall \
+ --bind /expanse/projects/gymreklab/rdevito:/mnt \
+ docker://${DOCKER_URL} \
+ bash -c "cd /mnt/citrus/CITRUS/paper && \
+ mkdir -p ${OUT_DIR} && \
+ awk 'NR==1 {print \"IID\tphenotype\"; next} {print \$1\"_\"\$2\"\t\"\$3}' \
+ ${PHENO_DIR}/${PHENO}.pheno > ${OUT_DIR}/${PHENO}_1ID.pheno \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${TRAIN_SPLIT_FNAME} > ${TEMP_DIR}/${TRAIN_SPLIT_FNAME} \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${VAL_SPLIT_FNAME} > ${TEMP_DIR}/${VAL_SPLIT_FNAME} \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${TEST_SPLIT_FNAME} > ${TEMP_DIR}/${TEST_SPLIT_FNAME} \
+ && \
+ python3 workflows/aml_basil_vars/fit_automl_prs.py \
+ --training-config /mnt/citrus/CITRUS/paper/workflows/aml_prsice_vars/lgbm_v0h1_prsice.json \
+ --geno-parquet ${FILTER_OUT_DIR}/filtered_vars.parquet \
+ --var-subsets ${FILTER_OUT_DIR}/filtered_vars.json \
+ --pheno ${OUT_DIR}/${PHENO}_1ID.pheno \
+ --covars ${PC_DIR}/pcs_1ID.tsv \
+ --train-ids ${TEMP_DIR}/${TRAIN_SPLIT_FNAME} \
+ --val-ids ${TEMP_DIR}/${VAL_SPLIT_FNAME} \
+ --test-ids ${TEMP_DIR}/${TEST_SPLIT_FNAME} \
+ -o ${OUT_DIR} "
\ No newline at end of file
diff --git a/paper/workflows/aml_thresh_vars/en_v0_15min.json b/paper/workflows/aml_thresh_vars/en_v0_15min.json
new file mode 100644
index 0000000..037bd55
--- /dev/null
+++ b/paper/workflows/aml_thresh_vars/en_v0_15min.json
@@ -0,0 +1,7 @@
+{
+ "model_type": "elastic_net_multi_thresh",
+ "metric": "r2",
+ "task": "regression",
+ "time_budget": 900,
+ "early_stopping": true
+}
\ No newline at end of file
diff --git a/paper/workflows/aml_thresh_vars/lgbm_v0h1.json b/paper/workflows/aml_thresh_vars/lgbm_v0h1.json
new file mode 100644
index 0000000..34767a5
--- /dev/null
+++ b/paper/workflows/aml_thresh_vars/lgbm_v0h1.json
@@ -0,0 +1,7 @@
+{
+ "model_type": "lgbm_multi_thresh",
+ "metric": "r2",
+ "task": "regression",
+ "time_budget": 900,
+ "early_stopping": true
+}
\ No newline at end of file
diff --git a/paper/workflows/aml_thresh_vars/run_elastic_net.sh b/paper/workflows/aml_thresh_vars/run_elastic_net.sh
new file mode 100755
index 0000000..be204c1
--- /dev/null
+++ b/paper/workflows/aml_thresh_vars/run_elastic_net.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+# Run LGBM training with p-val window thresholds
+
+# PHENO=complex_pheno_1
+# PHENO=complex_pheno_1_noise
+# PHENO=complex_pheno_2
+# PHENO=complex_pheno_3
+# PHENO=complex_pheno_4
+# PHENO=mult_pheno_1_more_noise
+PHENO=mult_pheno_1
+# PHENO=mult_pheno_2
+# PHENO=xor_pheno_1
+# PHENO=xor_pheno_1
+# PHENO=lin_add_nvar1000_h2_v1
+# PHENO=lin_add_nvar1000_h4_v1
+# PHENO=compound_het_1
+# PHENO=compound_het_2
+
+echo ${PHENO}
+
+TEMP_DIR=/tmp
+PHENO_DIR=pheno_sim/citrus_phenos
+OUT_DIR=output/aml_thresh_vars_elastic_net/${PHENO}
+FILTER_OUT_DIR=output/aml_filter_vars/${PHENO}
+
+SPLITS_DIR=data/splits
+TRAIN_SPLIT_FNAME=train_samples.txt
+VAL_SPLIT_FNAME=val_samples.txt
+TEST_SPLIT_FNAME=test_samples.txt
+GENO_DIR=data/geno_data/pgen
+PGEN_FNAME=imputed_chr19_1ID
+
+DOCKER_URL=gcr.io/ucsd-medicine-cast/nonlin_prs_prs_aml:latest
+
+# Start docker env
+module load singularitypro
+
+singularity exec --containall \
+ --bind /expanse/projects/gymreklab/rdevito:/mnt \
+ docker://${DOCKER_URL} \
+ bash -c "cd /mnt/citrus/CITRUS/paper && \
+ mkdir -p ${OUT_DIR} && \
+ awk 'NR==1 {print \"IID\tphenotype\"; next} {print \$1\"_\"\$2\"\t\"\$3}' \
+ ${PHENO_DIR}/${PHENO}.pheno > ${OUT_DIR}/${PHENO}_1ID.pheno \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${TRAIN_SPLIT_FNAME} > ${TEMP_DIR}/${TRAIN_SPLIT_FNAME} \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${VAL_SPLIT_FNAME} > ${TEMP_DIR}/${VAL_SPLIT_FNAME} \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${TEST_SPLIT_FNAME} > ${TEMP_DIR}/${TEST_SPLIT_FNAME} \
+ && \
+ python3 workflows/aml_basil_vars/fit_automl_prs.py \
+ --training-config /mnt/citrus/CITRUS/paper/workflows/aml_thresh_vars/en_v0_15min.json \
+ --geno-parquet ${FILTER_OUT_DIR}/filtered_vars.parquet \
+ --var-subsets ${FILTER_OUT_DIR}/filtered_vars.json \
+ --pheno ${OUT_DIR}/${PHENO}_1ID.pheno \
+ --train-ids ${TEMP_DIR}/${TRAIN_SPLIT_FNAME} \
+ --val-ids ${TEMP_DIR}/${VAL_SPLIT_FNAME} \
+ --test-ids ${TEMP_DIR}/${TEST_SPLIT_FNAME} \
+ -o ${OUT_DIR} "
\ No newline at end of file
diff --git a/paper/workflows/aml_thresh_vars/run_lgbm.sh b/paper/workflows/aml_thresh_vars/run_lgbm.sh
new file mode 100755
index 0000000..970668b
--- /dev/null
+++ b/paper/workflows/aml_thresh_vars/run_lgbm.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+
+# Run LGBM training with p-val window thresholds
+
+# PHENO=mult_pheno_1
+# PHENO=mult_pheno_2
+# PHENO=xor_pheno_1
+# PHENO=xor_pheno_2
+# PHENO=compound_het
+# PHENO=compound_het_2
+# PHENO=gepsi_lin_add_h0625_h0625
+# PHENO=gepsi_lin_add_h125_h125
+# PHENO=gepsi_lin_add_h25_h25
+# PHENO=gepsi_lin_add_h5_h5
+# PHENO=gepsi_lin_add_hFULL_hFULL
+
+# PHENO=gepsi_lin_add_h0625
+# PHENO=gepsi_lin_add_h125
+# PHENO=gepsi_lin_add_h25
+# PHENO=gepsi_lin_add_h5
+# PHENO=gepsi_lin_add_hFULL
+
+PHENO=gepsi_lin_add_h0625_gcta
+# PHENO=gepsi_lin_add_h125_gcta
+# PHENO=gepsi_lin_add_h25_gcta
+# PHENO=gepsi_lin_add_h5_gcta
+# PHENO=gepsi_lin_add_hFULL_gcta
+
+# PHENO_DIR=pheno_sim/citrus_phenos
+# PHENO_DIR=output/gepsi_phenos
+PHENO_DIR=output/gcta_phenos
+
+echo ${PHENO}
+echo ${PHENO_DIR}
+
+TEMP_DIR=/tmp
+OUT_DIR=output/aml_thresh_vars/${PHENO}
+FILTER_OUT_DIR=output/aml_filter_vars/${PHENO}
+
+SPLITS_DIR=data/splits
+TRAIN_SPLIT_FNAME=train_samples.txt
+VAL_SPLIT_FNAME=val_samples.txt
+TEST_SPLIT_FNAME=test_samples.txt
+GENO_DIR=data/geno_data/pgen
+PGEN_FNAME=imputed_chr19_1ID
+PC_DIR=data/geno_data/PCs
+
+DOCKER_URL=gcr.io/ucsd-medicine-cast/nonlin_prs_prs_aml:latest
+
+# Start docker env
+module load singularitypro
+
+singularity exec --containall \
+ --bind /expanse/projects/gymreklab/rdevito:/mnt \
+ docker://${DOCKER_URL} \
+ bash -c "cd /mnt/citrus/CITRUS/paper && \
+ mkdir -p ${OUT_DIR} && \
+ awk 'NR==1 {print \"IID\tphenotype\"; next} {print \$1\"_\"\$2\"\t\"\$3}' \
+ ${PHENO_DIR}/${PHENO}.pheno > ${OUT_DIR}/${PHENO}_1ID.pheno \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${TRAIN_SPLIT_FNAME} > ${TEMP_DIR}/${TRAIN_SPLIT_FNAME} \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${VAL_SPLIT_FNAME} > ${TEMP_DIR}/${VAL_SPLIT_FNAME} \
+ && \
+ awk '{print \$1\"_\"\$2}' \
+ ${SPLITS_DIR}/${TEST_SPLIT_FNAME} > ${TEMP_DIR}/${TEST_SPLIT_FNAME} \
+ && \
+ python3 workflows/aml_basil_vars/fit_automl_prs.py \
+ --training-config /mnt/citrus/CITRUS/paper/workflows/aml_thresh_vars/lgbm_v0h1.json \
+ --geno-parquet ${FILTER_OUT_DIR}/filtered_vars.parquet \
+ --var-subsets ${FILTER_OUT_DIR}/filtered_vars.json \
+ --pheno ${OUT_DIR}/${PHENO}_1ID.pheno \
+ --covars ${PC_DIR}/pcs_1ID.tsv \
+ --train-ids ${TEMP_DIR}/${TRAIN_SPLIT_FNAME} \
+ --val-ids ${TEMP_DIR}/${VAL_SPLIT_FNAME} \
+ --test-ids ${TEMP_DIR}/${TEST_SPLIT_FNAME} \
+ -o ${OUT_DIR} "
\ No newline at end of file
diff --git a/paper/workflows/basil/run_basil.sh b/paper/workflows/basil/run_basil.sh
new file mode 100755
index 0000000..dd7c3d8
--- /dev/null
+++ b/paper/workflows/basil/run_basil.sh
@@ -0,0 +1,85 @@
+# Run BASIL PRS on CITRUS simulated phenotype
+
+# PHENO=mult_pheno_1
+# PHENO=mult_pheno_2
+# PHENO=xor_pheno_1
+# PHENO=xor_pheno_2
+# PHENO=compound_het
+# PHENO=compound_het_2
+# PHENO=gepsi_lin_add_h0625_h0625
+# PHENO=gepsi_lin_add_h125_h125
+# PHENO=gepsi_lin_add_h25_h25
+# PHENO=gepsi_lin_add_h5_h5
+# PHENO=gepsi_lin_add_hFULL_hFULL
+
+# PHENO=gepsi_lin_add_h0625
+# PHENO=gepsi_lin_add_h125
+# PHENO=gepsi_lin_add_h25
+# PHENO=gepsi_lin_add_h5
+# PHENO=gepsi_lin_add_hFULL
+
+PHENO=gepsi_lin_add_h0625_gcta
+# PHENO=gepsi_lin_add_h125_gcta
+# PHENO=gepsi_lin_add_h25_gcta
+# PHENO=gepsi_lin_add_h5_gcta
+# PHENO=gepsi_lin_add_hFULL_gcta
+
+# PHENO_DIR=pheno_sim/citrus_phenos
+# PHENO_DIR=output/gepsi_phenos
+PHENO_DIR=output/gcta_phenos
+
+echo ${PHENO}
+echo ${PHENO_DIR}
+
+R_SCRIPT=workflows/basil/run_basil_expanse.R
+R_SCRIPT_COVAR=workflows/basil/run_basil_expanse_covars.R
+TEMP_DIR=/tmp
+OUT_DIR=output/basil/${PHENO}
+GWAS_OUT_DIR=output/GWAS
+
+SPLITS_DIR=data/splits
+TRAIN_SPLIT_FNAME=train_samples.txt
+VAL_SPLIT_FNAME=val_samples.txt
+TEST_SPLIT_FNAME=test_samples.txt
+GENO_DIR=data/geno_data/pgen
+PGEN_FNAME=imputed_chr19_1ID
+PC_DIR=data/geno_data/PCs
+
+DOCKER_URL=gcr.io/ucsd-medicine-cast/nonlin_prs_prs_basil:latest
+N_THREADS=$(lscpu | grep "^CPU(s):" | awk '{print $2}')
+
+# Start docker env
+module load singularitypro
+
+# With PC covars
+singularity exec --containall \
+ --bind /expanse/projects/gymreklab/rdevito:/mnt \
+ docker://${DOCKER_URL} \
+ bash -c "cd /mnt/citrus/CITRUS/paper && \
+ Rscript ${R_SCRIPT_COVAR} \
+ --pheno_file ${PHENO_DIR}/${PHENO}.pheno \
+ --pheno_name phenotype \
+ --covar_file ${PC_DIR}/pcs.tsv \
+ --pheno_desc ${PHENO} \
+ --geno_file ${GENO_DIR}/${PGEN_FNAME} \
+ --train_samples ${SPLITS_DIR}/${TRAIN_SPLIT_FNAME} \
+ --val_samples ${SPLITS_DIR}/${VAL_SPLIT_FNAME} \
+ --test_samples ${SPLITS_DIR}/${TEST_SPLIT_FNAME} \
+ --alpha 1.0 \
+ --n_iter 20 "
+
+# w/o covars
+# singularity exec --containall \
+# --bind /expanse/projects/gymreklab/rdevito:/mnt \
+# docker://${DOCKER_URL} \
+# bash -c "cd /mnt/citrus/CITRUS/paper && \
+# Rscript ${R_SCRIPT} \
+# --pheno_file ${PHENO_DIR}/${PHENO}.pheno \
+# --pheno_name phenotype \
+# --pheno_desc ${PHENO} \
+# --geno_file ${GENO_DIR}/${PGEN_FNAME} \
+# --train_samples ${SPLITS_DIR}/${TRAIN_SPLIT_FNAME} \
+# --val_samples ${SPLITS_DIR}/${VAL_SPLIT_FNAME} \
+# --test_samples ${SPLITS_DIR}/${TEST_SPLIT_FNAME} \
+# --alpha 1.0 \
+# --n_iter 20 "
diff --git a/paper/workflows/basil/run_basil_expanse.R b/paper/workflows/basil/run_basil_expanse.R
new file mode 100644
index 0000000..9cd0ee7
--- /dev/null
+++ b/paper/workflows/basil/run_basil_expanse.R
@@ -0,0 +1,247 @@
+# Scrit to fit BASIL PRS model and then make prediction on test
+# validation set samples on SDSC Expanse.
+#
+# Predictions are saved as test_preds.csv and val_preds.csv with columns
+# 'IID' and 'pred'.
+#
+# Args:
+# --pheno_file: Path to phenotype file.
+# --pheno_name: Name of phenotype column in phenotype file.
+# --geno_file: Path to genotype PGEN file.
+# --train_samples: Path to file with list of samples to use for training.
+# --val_samples: Path to file with list of samples to use for validation.
+# Predictions for these samples will be saved in val_preds.csv.
+# --test_samples: Path to file with list of samples. Predictions for these
+# samples will be saved in test_preds.csv.
+# --alpha: Alpha value for BASIL model. 1 is LASSO, 0 is ridge, and
+# anything in between is elastic net.
+# --n_iter: Number of iterations for BASIL model. Default is 50.
+
+
+options(error=traceback)
+
+library(argparse)
+
+# Parse arguments function
+parse_args <- function() {
+ # create parser object
+ parser <- ArgumentParser()
+
+ # add arguments
+ parser$add_argument(
+ "--pheno_file",
+ help="Path to phenotype file"
+ )
+ parser$add_argument(
+ "--pheno_name",
+ help="Name of phenotype column in phenotype file"
+ )
+ parser$add_argument(
+ "--pheno_desc",
+ help="Name of phenotype for saving"
+ )
+ parser$add_argument(
+ "--geno_file",
+ help="Path to genotype PGEN file"
+ )
+ parser$add_argument(
+ "--train_samples",
+ help="Path to file with list of samples to use for training"
+ )
+ parser$add_argument(
+ "--val_samples",
+ help="Path to file with list of samples to use for validation"
+ )
+ parser$add_argument(
+ "--test_samples",
+ help="Path to file with list of samples to use for testing"
+ )
+ parser$add_argument(
+ "--alpha",
+ type="double",
+ help="Alpha value for BASIL model. 1 is LASSO, 0 is ridge, and anything in between is elastic net"
+ )
+ parser$add_argument(
+ "--n_iter",
+ type="integer",
+ help="Number of iterations for BASIL model. Default is 50"
+ )
+
+ # parse arguments
+ args <- parser$parse_args()
+ return(args)
+}
+
+
+### Main script ###
+
+# Load libraries
+library(snpnet)
+library(parallel)
+library(jsonlite)
+
+# Get number of cores
+num.cores <- detectCores(logical = FALSE)
+print(paste("Number of cores:", num.cores))
+
+# Parse arguments
+args <- parse_args()
+
+# Create fit config
+fit.config <- list(
+ nCores = num.cores,
+ niter = args$n_iter, # max number of iterations (default 50)
+ use.glmnetPlus = TRUE, # recommended for faster computation
+ early.stopping = TRUE, # whether to stop based on validation performance (default TRUE)
+ plink2.path = "plink2", # path to plink2 program
+ zstdcat.path = "zstdcat", # path to zstdcat program
+ results.dir = ".",
+ KKT.verbose = TRUE,
+ verbose = TRUE
+)
+
+## Create combined covariate and phenotype file ##
+
+# Load phenotype and covariate files
+pheno.data <- read.table(
+ args$pheno_file,
+ header = TRUE,
+ sep = ""
+)
+
+# Inner join and get covariate names
+covariates <- setdiff(names(pheno.data), c("FID", "IID", args$pheno_name))
+
+## Add column indicating train/val/test split and format IDs ##
+
+# Read in sample IDs
+train.ids <- read.table(
+ args$train_samples,
+ header = FALSE,
+ sep = "",
+ col.names = c("FID", "IID")
+)
+val.ids <- read.table(
+ args$val_samples,
+ header = FALSE,
+ sep = "",
+ col.names = c("FID", "IID")
+)
+test.ids <- read.table(
+ args$test_samples,
+ header = FALSE,
+ sep = "",
+ col.names = c("FID", "IID")
+)
+
+# Add column indicating train/val/test split
+pheno.data$split <- "none"
+pheno.data$split[pheno.data$IID %in% train.ids$IID] <- "train"
+pheno.data$split[pheno.data$IID %in% val.ids$IID] <- "val"
+pheno.data$split[pheno.data$IID %in% test.ids$IID] <- "test"
+
+# Rename FID to #FID
+# names(pheno.data)[names(pheno.data) == 'FID'] <- '#FID'
+
+print(table(pheno.data$split))
+head(pheno.data)
+
+## Save covariate and phenotype files ##
+covar_path = file.path(
+ "/mnt/citrus/CITRUS/paper/output/basil",
+ args$pheno_desc,
+ "nongeno_data.tsv"
+)
+write.table(
+ pheno.data,
+ file = covar_path,
+ sep = "\t",
+ row.names = FALSE
+)
+
+## Fit BASIL model ##
+print("Fitting BASIL model...")
+
+start_time <- Sys.time()
+
+fit_snpnet <- snpnet(
+ genotype.pfile = args$geno_file,
+ phenotype.file = covar_path,
+ phenotype = args$pheno_name,
+ # covariates = covariates,
+ configs = fit.config,
+ family = "gaussian",
+ split.col = "split",
+ alpha=args$alpha,
+)
+
+# Print runtime
+end_time <- Sys.time()
+execution_time <- difftime(end_time, start_time, units = "secs")
+print(execution_time)
+
+# Create output dir
+dir.create(
+ file.path(
+ "/mnt/citrus/CITRUS/paper/output/basil",
+ args$pheno_desc
+ ),
+ showWarnings = FALSE
+)
+
+# Save features included in model
+write.csv(
+ fit_snpnet$features.to.keep,
+ file = file.path(
+ "/mnt/citrus/CITRUS/paper/output/basil",
+ args$pheno_desc,
+ "included_features.csv"
+ ),
+ row.names = FALSE
+)
+
+# Make predictions
+snpnet_preds = predict_snpnet(
+ fit = fit_snpnet,
+ new_genotype_file=args$geno_file,
+ new_phenotype_file = covar_path,
+ phenotype = args$pheno_name,
+ split_col = "split",
+ split_name = list("val", "test"),
+ family = "gaussian"
+)
+
+min_lambda_col <- names(which.max(snpnet_preds$metric$val))
+min_lambda_col
+
+# Extract predictions and row names for val set
+val_predictions <- snpnet_preds$prediction$val[, min_lambda_col]
+val_IIDs <- names(val_predictions)
+
+# Save predictions for val set
+val_preds <- data.frame(IID = val_IIDs, pred = val_predictions)
+write.csv(
+ val_preds,
+ file = file.path(
+ "/mnt/citrus/CITRUS/paper/output/basil",
+ args$pheno_desc,
+ "val_preds.csv"
+ ),
+ row.names = FALSE
+)
+
+# Extract predictions and row names for test set
+test_predictions <- snpnet_preds$prediction$test[, min_lambda_col]
+test_IIDs <- names(test_predictions)
+
+# Save predictions for test set
+test_preds <- data.frame(IID = test_IIDs, pred = test_predictions)
+write.csv(
+ test_preds,
+ file = file.path(
+ "/mnt/citrus/CITRUS/paper/output/basil",
+ args$pheno_desc,
+ "test_preds.csv"
+ ),
+ row.names = FALSE
+)
diff --git a/paper/workflows/basil/run_basil_expanse_covars.R b/paper/workflows/basil/run_basil_expanse_covars.R
new file mode 100644
index 0000000..f66c9cd
--- /dev/null
+++ b/paper/workflows/basil/run_basil_expanse_covars.R
@@ -0,0 +1,270 @@
+# Scrit to fit BASIL PRS model and then make prediction on test
+# validation set samples on SDSC Expanse.
+#
+# Predictions are saved as test_preds.csv and val_preds.csv with columns
+# 'IID' and 'pred'.
+#
+# Args:
+# --pheno_file: Path to phenotype file.
+# --pheno_name: Name of phenotype column in phenotype file.
+# --covar_file: Path to covariate file.
+# --geno_file: Path to genotype PGEN file.
+# --train_samples: Path to file with list of samples to use for training.
+# --val_samples: Path to file with list of samples to use for validation.
+# Predictions for these samples will be saved in val_preds.csv.
+# --test_samples: Path to file with list of samples. Predictions for these
+# samples will be saved in test_preds.csv.
+# --alpha: Alpha value for BASIL model. 1 is LASSO, 0 is ridge, and
+# anything in between is elastic net.
+# --n_iter: Number of iterations for BASIL model. Default is 50.
+
+
+options(error=traceback)
+
+library(argparse)
+
+# Parse arguments function
+parse_args <- function() {
+ # create parser object
+ parser <- ArgumentParser()
+
+ # add arguments
+ parser$add_argument(
+ "--pheno_file",
+ help="Path to phenotype file"
+ )
+ parser$add_argument(
+ "--pheno_name",
+ help="Name of phenotype column in phenotype file"
+ )
+ parser$add_argument(
+ "--pheno_desc",
+ help="Name of phenotype for saving"
+ )
+ parser$add_argument(
+ "--covar_file",
+ help="Path to covariate file"
+ )
+ parser$add_argument(
+ "--geno_file",
+ help="Path to genotype PGEN file"
+ )
+ parser$add_argument(
+ "--train_samples",
+ help="Path to file with list of samples to use for training"
+ )
+ parser$add_argument(
+ "--val_samples",
+ help="Path to file with list of samples to use for validation"
+ )
+ parser$add_argument(
+ "--test_samples",
+ help="Path to file with list of samples to use for testing"
+ )
+ parser$add_argument(
+ "--alpha",
+ type="double",
+ help="Alpha value for BASIL model. 1 is LASSO, 0 is ridge, and anything in between is elastic net"
+ )
+ parser$add_argument(
+ "--n_iter",
+ type="integer",
+ help="Number of iterations for BASIL model. Default is 50"
+ )
+
+ # parse arguments
+ args <- parser$parse_args()
+ return(args)
+}
+
+
+### Main script ###
+
+# Load libraries
+library(snpnet)
+library(parallel)
+library(jsonlite)
+
+# Get number of cores
+num.cores <- detectCores(logical = FALSE)
+print(paste("Number of cores:", num.cores))
+
+# Parse arguments
+args <- parse_args()
+
+# Create fit config
+fit.config <- list(
+ nCores = num.cores,
+ niter = args$n_iter, # max number of iterations (default 50)
+ use.glmnetPlus = TRUE, # recommended for faster computation
+ early.stopping = TRUE, # whether to stop based on validation performance (default TRUE)
+ plink2.path = "plink2", # path to plink2 program
+ zstdcat.path = "zstdcat", # path to zstdcat program
+ results.dir = ".",
+ KKT.verbose = TRUE,
+ verbose = TRUE
+)
+
+## Create combined covariate and phenotype file ##
+
+# Load phenotype and covariate files
+pheno.data <- read.table(
+ args$pheno_file,
+ header = TRUE,
+ sep = ""
+)
+covar.data <- read.table(
+ args$covar_file,
+ header = TRUE,
+ sep = ""
+)
+
+# Inner join and get covariate names
+nongeno.data <- merge(
+ pheno.data,
+ covar.data,
+ by.x = c("FID", "IID"),
+ by.y = c("FID", "IID")
+)
+covariates <- setdiff(names(nongeno.data), c("FID", "IID", args$pheno_name))
+
+## Add column indicating train/val/test split and format IDs ##
+
+# Read in sample IDs
+train.ids <- read.table(
+ args$train_samples,
+ header = FALSE,
+ sep = "",
+ col.names = c("FID", "IID")
+)
+val.ids <- read.table(
+ args$val_samples,
+ header = FALSE,
+ sep = "",
+ col.names = c("FID", "IID")
+)
+test.ids <- read.table(
+ args$test_samples,
+ header = FALSE,
+ sep = "",
+ col.names = c("FID", "IID")
+)
+
+# Add column indicating train/val/test split
+nongeno.data$split <- "none"
+nongeno.data$split[nongeno.data$IID %in% train.ids$IID] <- "train"
+nongeno.data$split[nongeno.data$IID %in% val.ids$IID] <- "val"
+nongeno.data$split[nongeno.data$IID %in% test.ids$IID] <- "test"
+
+# Rename FID to #FID
+# names(nongeno.data)[names(nongeno.data) == 'FID'] <- '#FID'
+
+print(table(nongeno.data$split))
+head(nongeno.data)
+print(covariates)
+
+## Save covariate and phenotype files ##
+covar_path = file.path(
+ # "/mnt/citrus/CITRUS/paper/output/basil",
+ # args$pheno_desc,
+ # "nongeno_data.tsv"
+ "/tmp/nongeno_data.tsv"
+)
+write.table(
+ nongeno.data,
+ file = covar_path,
+ sep = "\t",
+ row.names = FALSE
+)
+
+## Fit BASIL model ##
+print("Fitting BASIL model...")
+
+start_time <- Sys.time()
+
+fit_snpnet <- snpnet(
+ genotype.pfile = args$geno_file,
+ phenotype.file = covar_path,
+ phenotype = args$pheno_name,
+ covariates = covariates,
+ configs = fit.config,
+ family = "gaussian",
+ split.col = "split",
+ alpha=args$alpha,
+)
+
+# Print runtime
+end_time <- Sys.time()
+execution_time <- difftime(end_time, start_time, units = "secs")
+print(execution_time)
+
+# Create output dir
+dir.create(
+ file.path(
+ "/mnt/citrus/CITRUS/paper/output/basil",
+ args$pheno_desc
+ ),
+ showWarnings = FALSE
+)
+
+# Save features included in model
+write.csv(
+ fit_snpnet$features.to.keep,
+ file = file.path(
+ "/mnt/citrus/CITRUS/paper/output/basil",
+ args$pheno_desc,
+ "included_features.csv"
+ ),
+ row.names = FALSE
+)
+
+print("\n\n\n\nCOMPLETE TRAINING")
+
+# Make predictions
+snpnet_preds = predict_snpnet(
+ fit = fit_snpnet,
+ new_genotype_file=args$geno_file,
+ new_phenotype_file = covar_path,
+ covariate_names = covariates,
+ phenotype = args$pheno_name,
+ split_col = "split",
+ split_name = list("val", "test"),
+ family = "gaussian"
+)
+
+print("\n\n\n\nCOMPLETE PREDS")
+
+min_lambda_col <- names(which.max(snpnet_preds$metric$val))
+print(min_lambda_col)
+
+# Extract predictions and row names for val set
+val_predictions <- snpnet_preds$prediction$val[, min_lambda_col]
+val_IIDs <- names(val_predictions)
+
+# Save predictions for val set
+val_preds <- data.frame(IID = val_IIDs, pred = val_predictions)
+write.csv(
+ val_preds,
+ file = file.path(
+ "/mnt/citrus/CITRUS/paper/output/basil",
+ args$pheno_desc,
+ "val_preds.csv"
+ ),
+ row.names = FALSE
+)
+
+# Extract predictions and row names for test set
+test_predictions <- snpnet_preds$prediction$test[, min_lambda_col]
+test_IIDs <- names(test_predictions)
+
+# Save predictions for test set
+test_preds <- data.frame(IID = test_IIDs, pred = test_predictions)
+write.csv(
+ test_preds,
+ file = file.path(
+ "/mnt/citrus/CITRUS/paper/output/basil",
+ args$pheno_desc,
+ "test_preds.csv"
+ ),
+ row.names = FALSE
+)
diff --git a/paper/workflows/gcta_pheno_sim/__MACOSX/._gcta-1.94.1-linux-kernel-3-x86_64 b/paper/workflows/gcta_pheno_sim/__MACOSX/._gcta-1.94.1-linux-kernel-3-x86_64
new file mode 100755
index 0000000..8da9c4a
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/__MACOSX/._gcta-1.94.1-linux-kernel-3-x86_64 differ
diff --git a/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._.DS_Store b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._.DS_Store
new file mode 100644
index 0000000..a5b28df
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._.DS_Store differ
diff --git a/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._MIT_License.txt b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._MIT_License.txt
new file mode 100644
index 0000000..00d4e08
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._MIT_License.txt differ
diff --git a/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._README.txt b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._README.txt
new file mode 100644
index 0000000..6b586a7
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._README.txt differ
diff --git a/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._gcta64 b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._gcta64
new file mode 100755
index 0000000..00d4e08
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._gcta64 differ
diff --git a/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.bed b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.bed
new file mode 100644
index 0000000..00d4e08
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.bed differ
diff --git a/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.bim b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.bim
new file mode 100644
index 0000000..00d4e08
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.bim differ
diff --git a/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.fam b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.fam
new file mode 100644
index 0000000..00d4e08
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.fam differ
diff --git a/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.phen b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.phen
new file mode 100644
index 0000000..00d4e08
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/__MACOSX/gcta-1.94.1-linux-kernel-3-x86_64/._test.phen differ
diff --git a/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/.DS_Store b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/.DS_Store
new file mode 100644
index 0000000..e594ef9
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/.DS_Store differ
diff --git a/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/MIT_License.txt b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/MIT_License.txt
new file mode 100644
index 0000000..f7b9c8f
--- /dev/null
+++ b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/MIT_License.txt
@@ -0,0 +1,7 @@
+Copyright (C) 2010-2017 Jian Yang
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/README.txt b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/README.txt
new file mode 100644
index 0000000..082b403
--- /dev/null
+++ b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/README.txt
@@ -0,0 +1,36 @@
+PROGRAM: GCTA
+
+DESCRIPTION: Genome-wide Complex Trait Analysis
+
+AUTHOR: Jian Yang, Hong Lee, Mike Goddard, Zhili Zheng, Jian Zeng, Zhihong Zhu,
+Andrew Bakshi, Robert Marie and Peter Visscher
+
+CONTACT: jian.yang@uq.edu.au
+
+2010-2017
+
+The binary are released under MIT License. As the license of the dependency packages,
+you shall turn to the licenses for the usage other than academic.
+
+DOCUMENTATION: http://cnsgenomics.com/software/gcta/
+
+INSTALLATION: When you have downloaded a zip or gzipped archive with an
+executable binary, no installation is necessary. NOTE: If there is a
+bin folder, you should put all files in that folder all together, copy
+gcta64 out only will not work.
+
+USAGE: Type "gcta64" or "./gcta64" from the command line followed by the
+options of choice (see documentation) NOTE: you probably need to run
+"chmod a+x gcta" to get the correct permission to execute the program.
+
+EXAMPLE DATA: Four example files test.bed, test.bim, test.fam and test.phen
+are included in the distribution; for example, once GCTA is installed try running:
+
+ gcta64 --bfile test --make-grm --out test
+
+ gcta64 --reml --grm test --pheno test.phen --out test
+
+ etc...
+
+In Mac or Windows version, the example files locates in the parent folder of gcta64.
+
diff --git a/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/gcta64 b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/gcta64
new file mode 100755
index 0000000..46d7e43
Binary files /dev/null and b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/gcta64 differ
diff --git a/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/test.bed b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/test.bed
new file mode 100644
index 0000000..28401a3
--- /dev/null
+++ b/paper/workflows/gcta_pheno_sim/gcta-1.94.1-linux-kernel-3-x86_64/test.bed
@@ -0,0 +1,2628 @@
+l¯ï›óîW¥Û®¾Þ—ÛîÞoÛö}µ÷»Vº×þíÿþ·ûý»ëêßóÚnï'þÜöžmæ]·½ª÷»¯¸ð»çoíí×oßÞÛ[Õûÿÿê·ûþúë¯ÿý?çöûß›o®úÖ¿îÖ½…ï¿újÞ÷ûÿ»½»ÿþ»û®éÿÛ{»_ÿ®¿þnþÿûþ¿®¾ž‹ÿÿÿ»w|ÿ»»ú¾·¾ÿWû¯[«¾ï»zçžþ?>ZÿþyÿzéO߸¿¾þïû¿«ÿÝÿî/kïÿ—þå}·ÿû[ÿÕýÊ·îÚwÿìÿïÿÝ꽩ýþ~:ÿßÿûnÿ÷ûžÛí¯ÞùïÙú_µ/îý÷ÝYMvüÝé»ÿþ®>ïÞýÛÚÞÚûº¯Ÿšï×ýº®®«ïªþî¯ÿûÿÿø¿î¿ó»û¿ü»ÿÿÿïÿ꬯ÿ®îºÎ¿ü¿ÿúþëâÿ¿ëï¿ÿ¯øÿÿ«î¾ïOÿÛîû©ÿæ÷Þã¿õ—zy®÷ß~ÿ¬¾ûþûÚÍï?ýµßjÿ®ÿ÷ÿûßmþûßwê{ûî궻޺ªžù¾ë]Ýûÿ¬»ï¿ïç™UEþþz«ûÿþïÿÿ«Îûþ¯ÿî|þ¿þ®ÿªgzÿÿÿîî¯ëµ·¿øŸ¿ûßoîë÷ïÿÛ®ßïï[ýëÿŸëúß÷¿ýû»ïúÿ®û®ýµ¿ û¿þëÿëûî¯>»îï?þÿîþèë»®ûîß>ÿñòî¿ïÿëž»ÿ¯ýîß»ÿÝeÿg›uõoýïú¿g½{Uÿþóþ•×åÝ×ìö›ï_ýk[¶>m_ö™ý‡—^÷Wönßûë·ßå¿[÷±ÞåÛÿ{½uý]et}wþ_î_×ÿ»þ–W÷þûç³ýö^µöïž÷ù^û×gûmúïVUUϽÆûS÷³ÿÿ¾ÿïþ²ï¯úóëâïèÿúïêÿúÊÿ«ÿÿ¿ê«ÿ?²îïú»úûÿûÿ¿ë?þ¾ïÏ»úû¯»þë«»ÿë¯ëÏÿ¯þûÿëÿ«þ¿¾Ïÿÿﮪÿ»ßþþëêŽÿþÿøÿÿûëëþÿ¾³ïì¿ïžþ»îû¯ºþïû¯þ¯ÏÎû®®®¾ïÿ¯ÿüÿ¾ÿûû«ÿîÿ³þª¿º
+ëî¯ÿ¾ûû¯ëû¯þòûþîŠûú¿þ¾þ/øþüïÎþ»½«òÿþ¾ÿû®üÿºî¾û®ª¯þþîâûÿÿ¸ÿÿËÿ¾¾þúûëþîϺ®»¿¿/ïïÿëªìëûÿÿâ謹ûÿï¿ïÿ«îû¾îÏ«¿»¾«ïÿûêî/ïﺯþþ¾ª¸º¿Ã«ÿªÿ:¾¿«®þïÿÿÿþ¿Ë¿¿®ºþ*»ëÊâï»ïë+ë?«»Žÿïÿÿÿûâø(¾ÿëþîþ²û¿ªúÿ?î¿þÛóïW¥ßþÝ—ÛîÜoŸæmµ¶ïVªÔ>íÿÿ÷¿¯ãîÞz’ný§ÿÜ´ßmöQ¦ý¨ç¯îxú»çKíí×oÛß[•ª¾ÿë7#8ûëï«ý맶ûÛÛkïºÖ¼ì£¥î¯úbÚ¶þû¯½¿ûî²ë;ùêÛzº[ÿî«>Jüþâþ¿¼þ‹ÿ¾ÿ‹vl»¹š¿¿§ïïW«+_/ºïÿbæî?¯¾ZúÿyÏzá꬯Üê;>òÏëŸÚþ™øø£O®º×þÅy¶ÿóX¿ÕÊçêÒ_wêäÏï¿Ýºíiù?\:ï›ÿûn¿÷ûš—éïÞùëÝì^µ‹ê½·Ù]ifîÝý»þà¬ÿÚ½›ÒÚÚûšŸšï–©2Žª¿®®ï¿ûºÿü»î¾³³»ºþ;¿ëóþ³¬ÿúʪ²Ž¾îÿ¿®þŠà¿îï®û«øþ¿ªøºï{®“öûŸ©ÿæ7Þê>å×zoi¯öŸzû®.û¾¿Ü¯¯ù%›»¾ÿ÷îí»Ûyþ¿ŸgîÊŽªö»ß¾ŠÚí¼¯Y³¿Ëûï«ÿ§kUuâþz³ûûÿ®ûÞ«Âû¾ªÿÜ~þ¿â®ï gn«þîêïÏ¢%§º»›»þšO®ëÆë~úߎÞëï[ý«þÞêëÓ÷¿lý»¿;ò»ü붽µ¿¢?¯ú‹ëèêî.ûÈï/ïÿÿzÎúúêú®ß>>ñ»è¾«¿ïÞó®¯éΟ«óÝeÿGŸuµznn½ÿüw=zUøêûü•Ôå™—–öš|ï^½k_ö;m[ö™íæ”_'W¶nßú+æÚå»[çñßåßÿzéu½Yefmw®_¯_VöºúWæ>ú·³½ö^µ§þ›¶é[¿—gþ}¾ÿTUU˹æûSvrÿþþÿ«î²üºû¯Êë¸ÿíïÊûúêû¨ÿ»ÿî£ë®òþ+ºêº»¯«¿º>þ>îËïòû¿ººêË»ïâòûÏûûû«ë¿Âþ¾úëïÿîî‹î+ŸþÿÁ꯻ÿÏ쿺úîïþo¿³¿ê¿»Ÿ®º¢û/îûúóïþ®¾:ª.+®ÿë¯ï(û»¬¯ï¯»îÿú?â¾û*¯ï»ë»û‹ëïîúàÿìì¿îþ¾:»¼ŽÏþ»™+ê«þþ¾»+®ìÿ²î¿û¯ê«Î¾þ²¿ûÏú¿»Ë®¾¿º¢»ëþìï»>»»®+¯ïêûøÿ«¯«¯£þ²¿»û¿Žû®¯ª*ú>»ÿ»û;¿¯úëîî+?뻋ú¾¾¨º»®ë»Ê®ÿ®ûÿÏÿÿÿ¿Îÿ».óî«þ««2¿ê»ï¿Ï/뿪*Î.ïûûûŠâ««<¿ïþªîâË»¨ªÿ?ê¯ÿÛÿÿíWíßÿÿß×ßÿߟ÷}õ÷ÿWÿÿ×ÿýÿÿ÷îýÿÿÿßþßÿ÷ÿß÷ß}÷Y·ýÿ÷¿ÿ¿½ÿÿ÷ýù×{ßÞß_Õÿÿÿÿ·ÿÿÿÿÿÿýÿ÷·ûÛßoÿû×ÿÿÿ—íõÿÿûß÷ÿÿûýÿÿÿÿÿÿýÿïÿ^ÿÿÿÿÿÿïûÿÿÿß¿ÿÿÿÿw~ÿÿÿïî·þÿWûÿ_ÿÿÿÿ÷ßÿÿÿÿ_ÿþ}ÿ~ýÿÿÿßÿÿÿïÿÿÿÿÿÝÿÿûÿÿ×þõ÷ÿÿ_ÿÕýÿ÷ÿÿwÿþÿÿýÿÝÿýýýÿÿÿßÿÿÿ÷þßßýÿßýÿÝï_õÿþ½·Ý]}wÿÝýÿÿÿÿÿÿßýÛßßßÿ¿ïßÞÿ×ýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿþÿÿïÿÿþÿÿÿÿÿÿÿï¯ÿÿÿþÿÿÿÿÿÿÿÿûÿÿÿÿ¾ÿÿßÿÿßýÿ÷÷ßÿÿõ×{}ïößÿÿÿûÿÿÚùÿÿýõßÿÿÿ÷ÿýÿß}ÿïßwÿþ¿ÿ÷ÿÛÿÿßý¿ÿ]Ýïÿþúÿÿÿ÷nÝUuÿÿ¿ïÿÿÿÿÿÿûë»ÿÿÿÿ¿ÿÿÿÿÿÿwÿÿÿþ¿ÿÿõ÷ÿþßÿÿÿÿÿ÷ÿÿßÿßÿÿ_ýÿÿßÿÿŸ·ÿýÿÿÿÿÿÿûÿý¹õÿÿÿÿÿÿÿÿûÿÿ¿þÿÿÿÿÿÿÿÿÿÿïþÿßÿÿýøÿÿûÿÿßïÿÿ½ÿÿÿÿÝuÿwßuõýÿÿÿw½UÿþÿÿÕ×õÝ×þ·Ûÿ_ýo_÷¾}_÷Ýý·Ö_÷Wÿ{ßÿë÷ßõÿ[÷ýßõßÿýwý]ywywÿ_ÿ_×ÿÿÿ××÷ÿÿ÷ûý÷_õ÷ÿßÿý_¿×wÿ}ÿÿWUÕÿý÷ÿ[÷ÿÿÿÿÿÿþÿÿÿÿûÏþÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿûÿÿÿÿÿ¿ÿÿÿÿÿÿïÿûÿëïÿÿÿÿþÿÿÿÿû¿û¿ûÿÿÿÿÿÿÿÿÿÿÿßïÿÿûÿÿÿÿÿÿÿïïïÿ¿ÿÿÿÿÿÿßÿ¿ÿÿÿÿÿûÿÿÿþÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿïÿÿÿÿÿÿïûûÿÿ¿ÿÿïÿïÿÿÿÿþÿý»ÿÿÿÿÿÿÿïþÿ¿ÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿûÿÿÿÿÿÿïÿÿÿ¿¯ÿÿïÿþÿÿûÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÏþÿþÿÿïÿïÿ¾þÿûÿÿÿÿÿÿÿÿï¾ÿÿ¿ÿÿþÿÿ¿ÿÿÿÿÿÿÿÿÿïûÿÿÿÿÿÿÿ¿ÿÿ¿ÿÿÿÿûÿÿûþ¿ÿÿÿÿþÿÿÿïÿÿûÿÿÿ¯ÿÛÿÿíWíßÿÿß×ßÿßß÷}õ÷ÿWÿÿ×ÿýÿÿ÷îýÿÿÿßþßÿ÷ÿß÷ß}÷]·ýÿ÷¯ÿ¿ýýÿ÷ýù×{ßÞß_Õÿÿÿÿ·ÿÿÿÿÿÿýÿ÷·ûÛßoÿû×ÿÿÿ—ýõÿÿûß÷ÿÿûýÿÿÿÿÿÿýÿïÿ^ÿÿÿÿÿÿïûÿÿÿß¿ÿÿÿÿw~ÿÿþïî·þÿWûÿ_ÿÿÿÿ÷ßÿÿÿÿ^ÿþ}ÿ~ýÿÿÿßÿÿÿïÿÿÿÿÿÝÿÿûÿÿ×þõ÷ÿÿ_ÿÕýÿ÷ÿÿwÿþÿÿýÿÝÿýýýÿÿÿßÿÿÿ÷þßßýÿßýÿÝï_õÿþý÷Ý]}wÿÝýÿÿÿÿÿÿßýÛßßßÿ¿ïßÞÿ×ýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿþÿÿïÿÿþÿÿÿÿÿÿÿï¿ÿÿÿþÿÿÿÿÿÿÿÿûÿÿÿÿ¾ÿÿßÿÿßýÿ÷÷ßÿÿõ×{}ï÷ßÿÿÿÿÿÿÚùÿÿýõßÿÿÿ÷ÿýÿß}ÿïßwÿþ¿ÿ÷ÿÛÿÿßý¿ÿ]Ýïÿþöÿÿÿ÷nÝUuÿÿ¿ïÿÿÿÿÿÿûï»ÿÿÿÿ¿ÿÿÿÿÿÿwÿÿÿþ¿ÿÿõ÷ÿþßÿÿÿÿÿ÷ÿ~ÿßÿßÿÿ_ýûÿßÿÿŸ·ÿýÿÿÿÿÿ÷ÿý¹õÿÿÿÿÿÿÿÿûÿÿ¿þÿ¿ÿÿÿÿÿÿÿÿïþÿßÿÿýøÿÿûÿÿßïÿÿ½ÿïÿÿÝuÿwßuõýÿÿÿw½UÿþÿÿÕ×õÝ×þ¶Ûÿ_ýo_÷¾}_÷Ýý·Ö_÷Wÿ{ßÿû÷ßõÿ[÷ýßõßÿýwý]ywywÿ_ÿ_×ÿÿÿ××÷ÿÿ÷ûý÷_õ÷ÿßÿý_¿×wÿ}ÿÿWUÕÿý÷ÿ[÷ÿÿÿÿÿÿþÿÿÿÿûÏþÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿïÿÿþÿÿÿÿÿûÿÿÿÿÿ¿ÿÿÿÿÿÿïÿûÿÛïÿÿûÿÞÿÿÿÿû¿û¿ûÿÿÿÿÿÿÿÿÿÿÿßïÿÿûÿÿÿÿÿÿÿïïïÿ¿ÿÿÿÿÿÿßÿ¿ÿÿÿÿÿûÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿïÿÿÿÿÿÿïûûÿÿ¿ÿÿïÿïÿÿÿÿþÿý»ÿÿÿÿÿÿÿïþÿ¿ÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿûÿÿÿÿÿÿïÿÿÿ¿¿ÿÿïÿÿÿÿûÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÏþÿþÿÿïÿïÿþþÿûÿÿÿÿÿÿÿÿï¾ÿÿ¿ÿÿþÿÿ¿ÿÿÿÿÿÿÿÿÿïûÿÿÿÿÿÿ¿¿ÿÿ¿ÿÿÿÿûÿÿûÿ¿ÿÿÿÿþÿÿÿÿÿÿûÿÿÿÿ?»ÿþàþ‡¿ìÿùÿïÿïûï¿þû¿ÿîü»þÿÿûïÿ¿?û¯îûÿúþ¾úÿÿºÿÏî®ÿîûÿþ»~«»¿ÿÿÿ»ï»ÿîÿÿ¿ëÿÿûÿºëþÿïÿþﺻ»?ί;¯¿û¯»¿îÿþÿ¯þï¿ó¿ÿþÿûÿüþû»ûþ›¾îïþîÿ¾ÿÿÿúï»ÿîÿþ¯¿ï¿»¾¿ýï»ÿ¾¯ÿÿþïûþºÿóïúïÿ¿ïÿúþÿüÿÞø»¿ÿÿ®ÿ¿ÿîÿÞï¿ÿþÿ««¿¯ÿþÊþ»ÿó¾®ÿîêÿ¯ß߯ÿꮿ¯ÿ¿ÿ¾þÿû¿¿ïëÿÿ¯¯þúÿÿþ¿ïÿ¿ÿïÿ¯ïþÿ¿û¼ÿþÿþïÿïëûîÿúÿÿüûû»žïóú»;ÿþÿ¾î¿ê»ÿþ¾ûúÿÿÿû®óÿï»þ¯þ»ÿþë¯þÿÿÿ¯òÿ¾îÿ¿ÿþîâÿïÿïûúúúïîÿþº¾û¾ûçÿþîûÿûÿûÿþÿë¿þÿÿÿêÿ¿ûÿîºÿïîïÿÿ»ïûÿÿÿþ¯¿ÿþÿïïÿþÿîî«?ÿÿ¿ÿ»þÿ?¿ÿÿשׂ»¿ÿþÿ¯ïûï¾üÿïÿþ¿ïóû¾¯ÿÿ¿¾Þ¿þÿî¯ÿû»ÿþûÿþîëïÿë¿¿¿þþ›ÿïïþÿºîÿïûû¿ûþÿ»î»ýÿë¿ï¿«ÿéû»þëïÿ»»ûÿïÿ¾ûÿÿóû³®þËîþÿÿê¾î¿îþÿÿ¿ûæûªÿëÿ¿ûóþ¯¿¾ÿ»ÿÿÿÿþóÿÿûÿþÿÿÿþ»Ž»úÿ>ûÿøÿ¿îþžþû¯ïþÿ¿ë»/¿»ëÿÿ¿üÿÿû÷ûûþ»ïûúº»ÿÿ¾¿ÿÿïûýÿî÷ûÿÿ¯ïï¯{çÿòÿÿÿ²þ»¢¿¿ÿüïÿþ¿úÿÿ¿ûûûï¾ûoûÿï»û¾ïúûÿûïû¯kÿº¯þªÿÿýÿþÿåëÿîþª¿ïþÿ?þëÿîûûûû¾þë/:ê?¯ÿÿÿòÿÿ»ëÿÿ¿ûÿëïïÏþ¯û¿úÿþÿÿ¿Ïÿ¿/ÿÿþþÿÿú¯þþû¯îþüÿëîþÿï¿û¿ÿïÿ¿úÿ¿¯ÿû»¿¾¾ïÿÿ¯«¿ÿ¯¯ÿþ¿ú¿þüïþïïÿ»»þÿû¿ÿþÿÿîÿÿïÿÿûþþÿªûªÿÿ¿þ¿¿ßºþ¼Îÿÿÿß¿ûÿ»þ¿»þü>ãºûÿûÏ®¾¬Ï¿ÿ¿ÿÿº¿¿«¾óﯳïúïÿßÿ»î»ÿ?ÿïï¿ÿþûûÿ¿¯ïïïûÿþ¯úÿÿïºÿÿþïûÿûú¿ÿÃïÿî+ïëÿëÿÿ¿ïºûÿÿûÿïþÿî»î¯¯ÿ¯ÿÿÿ¿ÿÿÿïû¿þ¿¯ïëû»ÿÿþ¯ÿ¾î¿¾>¾¿ïûþîúïï»ÿÿûþÿïþ¿ÿóú¿ïê¾ï®¢ï¿®¿û¿‹¾¾°Ììë¾Î«þ¾î/ÿ«ü‹âº¿ÿ¾¿ê¿êû˾ÿ몫¾¿î<»ï»Žûîó«ÿê¨þúì¿îìÿ/º#º¿þ#îüª<¯ë?«³>ó>¿ãªû»¿ÿþî¾ë®Ïºì«ªþ£¾ú®ËÏþúºûÿþ¯¯îïî¾ûè¾»ºû⯸¯³¾ûû»«úþã¯ë¾ú²êª«ë¾â/»¾ÿþþï¯úûºþúó2¾«Ž?Žÿ¿Î²ü‹ú¨þãÿî;þã3úïòÿûºªþúûêþ®þÿºûþŽúë¼ïϺÿúûþ¯ª£ãë««ûþ:¯êúÿë»úþëëêüû¾þªòȿëË/û?ºê¿«¯î¯+û®ª«ú³ûÿþÿó¸úÿꪫ¯¾ª¿ª°ºÿûÿ»;º¯«ÿî°¾<‚³?þ ¿¿¯ë»ªû»²ªÿ»êâûÿ¯¿»ðÿêëêÏÏúüÿû¯ûþë8û¾ûîÿîï/þºú®«(ºúïï«ëªÿ£¿¼®¼¾þϺ¬ã¯¯û¿î«¿»ªúë»Ëòªÿ«þûë«Ž?ë¾î«£¯êúê®úÿûŠÿ*ûêûŽºóâë.óêº{³¿¿ÿŠï¯¯ûï,ª¿º¿¢¾Î¿ú»ƒšëîþã¿ÿ¿øþ¼ûûëòî¯ì⻫«ª¯«ï?¿þ®ÿ?ËÊû®ê:컪®ïïü¾»ÿ¾ÿþ‹ÿ»¿«?Š»êøÎø.»ÿþ*ºªû®®¯¯®»ÿî*¯ã¾ï¯îïþúŠâÏûª¯þþú<ÿúªûø²?«ª®Ïú?»ªêªûþòê:¿ªÿ»«+®«ëÿ󯫺úïþë²ú¾ïúïîùî³.û>®ú+¼ëþºïŽ>þú ¯ÿ¯®þìã¯úêîîþ;ëø¿¼*ûºÿøêóúìÿê:¯þ»ëì¾ÿøªÿëËÿêÿêûê³3,»þï»ë몢îûú>ûŽ¿ÿë®û.îξûÿû>ó쯲û¿¢Îúê¿¿£:ϸ뿪¢ìþ*ëîþûïú*èƒÿîó:¼êîûëêë»/²¾¯«ï«º®¾»‚è/Ëþÿëú+2âÿ»*¾º;ÿª¾ë¿ó¢ª3î»»¾Ž¾º®ï«ëû¬¾ï®ÿ®ûê»þ¾ë¾ºë«úªü¿³¯»ÿþ¿2ÿÿÿú¯ê»;Ëïÿÿ¯¾¬»ûóÿ¿ãº»ê¯ïª«»ú¼»¨ïÿ®²,èø¿¯ëªì<¿®¯î3¯ª?ãî/î:¯ïûª¾âëûþï+»¯¨¿ºë¿þúèïïºì¢¿øºúüþ.ú/¯âÿ¯¨ïË#ºêΫ8‹ë»¾ïû«ëÏûûûúº¾ÿã:ªþ»ïºêï ï¾ãªëúü*ûþ뾾¿¿«úÿÿ«þ«ÿþêÿ¿üÿÿûÿïÿ¯ûÿ¾êᆱÿÿ»ÿÿïÿ¿úî»û¯ïêÿïþýëëïûÿÿîîÿ®¾ÿ¾¿ÿÿ»?ÿÿïûÿë¿þÿÿ¯ïûþû¿ÿî«»þïû«ûÿ¿¯¿¾û¿ÿ«¯û¼ëºþÿëþÏ¿òïÿûïûÿÿûï¸îÿžþ¿îÿþïþ¿¯ÿþ*ûïï¿¿¯®ÿÿ¾þï¯ïºú»»ÿ¿¯þûïþûºîûÿë¯ÿûï¿þì¿þúªï¿úÿÿ¯ïþïþëºÿ?;ºÏÿëÿþÊÿÿþÿÿ¾ÿ¯¯ú¾ÿï¯ïîÿ¿¿û»¿¾¾¾î»ºËÿ¾ï»«ú¿þþÿ¿ï¿ÿÿûûêÿêÿ¿ûºÿïûþÿÿÿëïþÿºûÿÿÿû»¾ëïþ²¿ÿöÿ®ï¿ûûÿúÿëîûÿÿÿüûÿÿ»ÿ»î;ïîþ¾þÿþﯿþ¿úûÿÿ³þþÿï»ûïøî®Ãêÿÿ¾¿û®ÿë»ÿÿûûïÿþÿþÿëÿûÿ¿¿ºÿþûÿîûúîïûïÿïûûÿÿ¾¿ÿÿþÿüÿÿ.þïûÿûÿ¿ïú»ï¿ÿ¯ÿ¿Ã¬øû»ºû¯ïïëï?þÿëþþÿÿûëÿ¯‹ûÿ¾ÿþÿþïÿÿ‹Ïÿÿþÿü¾ïþÿï¿þ¿ïÿ›ÿ¾«þïþúÿîûïÿûþ¿ªîïþëÿûïÿ»ÿîÿÿû:ëÿ?ÿûÿïÿºú¾þ³ÿêþ»ÿóûÿ®«ºÿÿêÿÿÿ?úʲÿÿÿÿ¿ïûøþ»ÿÿ»¾ÿóïëïëþÿÿûþû¬ûúÿþ¯ÿ»ÿ¯ÿ¿¬þû¿Ïîÿÿêÿ¿ÿÿâîï¯ÿ¿ÿ«ÿûþÿ²úÿÿû»ÿû>¿ÿÿþ»ïëÎû¾ûû?ÿÿÿ«ëÿïûû¿ÿ³î«ëÿ¿ÿþ¯ïú¿î¿þ»êûïï¿ûïÿÿ®óû¿ïïúþëÿþû¯»ï»>¾ëþÿúÿÿ¿ïÏÿÿþª«ÿúÿ;þïïëûÿ¿ú¼þ뫺ÿ?ïûþ®ûþû;òÿÿ¿ûûïþïïî¾ÿûÿþ¿ÿþû+ïÿ¿>ÿþþüÿÿòïþþú¾êïûÿ¯ÿ¿óÿ»ûïþ﾿úÿþ¯ÿ»û¯þ¾¾ÿïïî>ïï¿ûþ¿î?ÿîïûïïÿ¿û¿ûïÿÿ¾ûÿüÿÏïÿÿÿÿ>;Ë;¸ÿû¿þ>¿þâþüÿÿ¯ïîï¿þ®ûÿþÿ*þ¿û¯»ïÿþ¯ïÿúÿ¿û;¿ÿªþëî¿ÿî»ïû¬ûïûûï<¿ëÿïÿûûû»¿ÿ¯ÿîÿÿÿÿ¾ÿ¿ÿ»ïûþûÿÿêû¿ÿƒïúêÿîïþïÿÿûï»ûÿïïÿûþþ¸¿ï»¿þ¿ÿïÿ¿þûÿï¾þ¿¼¯¯ûûûÿÿû¯þ¾ÿ⺮ÿ¾¿ï¿ï«ï¿ºþûëþ¿¯ÿ¯ÿûúºÏ¯þ¯þ£ûº¸¾»¯»ºï²þìﻎªû¿îÿê¨ü¯úºêï¿¿ï¿îüûþúÿÿ켪ÿ;îûêë«úâ#ÿûï￾þ»¾»®¿¿ü/ïþ¯¿?û¾û²¿ø.«£ª»þ/è¯þ«ëï»ï¯ªþó¾ú®»ïüú»ûîþ¿¯úîº?êîüë²»úþºëû>ûú»Ïú¾ë>ÿ¾:²ê«ÿê®êÿÿ¯ÿþ¾¯ëûú¾ÿúë¾¾ªŽ¿ú¾ë3ÿ»ú¿þóÏï?îû;øÿë»»¸êî¾ê®ÿ£¬ï¸úüÏëë¼ïÿ²Ê¿êìïú£úû³ªÿú£¯ûþïÿ‹þÿ¬»úþ«ïëþ¿«ïªóè¿ë®Ï;«¾ºê»‹¿îë›ðªª»þ»¯ûÿúþû¾»ïúüªë¯ìë;ê¨ûÿëû¿+ºÊëìú¾?£»>ê¢ÿò®î¿ªûÿ¾Šû¿êîïû¯¿òüÿêêã®ïúîÿþ¾â¿û2»¾»Ž«ÿ«ÿ?ú¾ú«;.ºþï»»ûºû»;¾¯þ¯ÿϺ.û¯¿û®úÿ¿ëˆâ»û뺺û«þ;»ëŽÿï+®ëï®êªþ®ûþúªÿúþÿ«ú¾>ãû>ºª¸¿º¿þïŠþ;ïúï<««²«ÈºË»ûº#ïïïºë«òúþ¿úûúþïºï»£/»¿ëï;¢ï¬ë¿ïʳ¾ú>Ìú«Îïïþ?«ÿîî®Êïÿ¿êÿ®þúèÎø»þ«ªª¾úºª¿¯îû¿¿«ïïîÿ¯þ¿þþŽê¯»«¾ÿªë°¯óîø¼ú8«¿¯ïê¿»ë*ºóî¼*¿¯îÿªû*«¿ëúº¯/2ð®úûþû¾ï¾Ëÿÿÿ²¾ò¯ïþ«¾Îþúþê.¾¾²î¿¾ú>®«¾þÿîîû³óú¿¼ªÿ¿Ïûóêëþ쿸ºïúÿ£îºþê(þëë®ëÿîÿ껲¼ó¬îºû˺ªþûò:ºÎ³û¿¯º*®Ïˆÿ¿ë¯óêÿêûŽÏ»ïºê»Ï£:ïëë¿ëòìì+ëëþûïꯋï/ê‹þ®óº¯Ëþ¬Ìþûî®ÿ¯¾«««ú¯¿*ªì.ê¿ÿºê;2¢;ÿ.¿î>ÿª¾ê?ºªè;¾žî¿º/Ï«ëï,ÿﮯªþëÿ¼þ˾þûúû¯Î¿³/>þÿ¾;¿ûÿ³þþ»ëËÿãþûî»+ûü¾«º»ê¯îþ«»ú¨»¨ûÿ¨úì¿þ?Ϋ¾ï¾¾Î¯î:¿Ê»ÊŽïÏ»ë¢þ몾âËþþ¿*ë»ø»8ã¿üîëï«:þ»ºø»ºüþ+î/ê:¯ªïÊ2®êï‹,ë㻿ïû«ã¯ûóûëºþ?òúêû/»þ¿ú¾£¿Îûºèøüª«ÿþþ¾¾îªïûûïúÿë«þ«ÿþïÿ¯ÿþïÿÿÿïÿÿûÿþëïÿëÿÿûÿÿïÿ¿þ¾ÿûïÿëÿïìþïë¿ÿÿÿïÿÿ®¾ÿÿÿÿÿ»?ÿÿÿûÿë¿þÿÿïÿÿþÿ¿ÿﯿþÿûëûÿ¿ï¿¯þûÿÿ«ïû¼ûºÿÿûÿÏ¿úïÿûïûÿÿûïüþÿîÿÿîÿþïþ¿¯ÿÿªûïÿ¿¿¿®ÿ¿¾þïïÿúþ»»ûÿïþûïþûúþûÿëïÿûÿ¿þì¿þÿ®ïÿúÿþïÿÿïÿïÿÿ?;ºïÿÿÿþïÿÿþÿÿÿÿ¿¿ûÿÿÿïïþÿ¿ÿÿ»¿¿º¾þûúûÿ¾Ï¿«ûÿþþÿÿïÿÿÿÿûþÿêÿ¿û»ÿïÿþÿ¿ÿïïþÿºûÿÿÿÿ»¿ëÿþóÿÿúÿîï¿ÿÿÿûÿûîÿÿÿÿüû÷ÿ¿ÿûî¿ïîþÿþÿþÿÿ¿þÿûûÿÿ³þÿÿÿ¿ûïþþ¬ëûÿÿ¾¿ÿÿÿë»ÿÿûûþÿþÿþÿûÿûÿ¿¿¿ÿþÿÿÿûúÿþïûþÿÿÿûÿÿ¿¿ÿÿÿÿþÿþ.þÿûÿûÿ¿ïú»ï¿ÿïÿ¿ó¾ûûû¾û¿¿ïï¿>ÿÿë¾þÿïÿûÿï«ûÿþÿþÿþÿÿÿÏÎÿÿþÿü¾ÿþÿÿ¿þ¿ïÿ»ÿ¿ëþïþúÿïÿïÿÿÿ¿¿þïÿïÿÿÿÿ»ÿïÿÿû:ïÿ?ÿûÿÿÿþúþÿ³ÿÏ«þûÿóÿÿ¿»¿ÿÿæÿÿÿ?þïºþÿÿÿ¿ïÿúî«¿ÿ¿ÿÿ¿ÿÿûÿïïëÿÿÿûþÿ®ûþÿþïÿ»ÿ¯ÿÿ®þûÿÿÿÿÿûÿ¿ÿÿþîÿ¯ÿ¿ÿ¯ÿÿþÿòÿÿÿûûÿû¾¿ÿÿþ¿ïûÎû¿¿÷¿ÿÿÿ¯ÿÿïûû¿ï¿îëëÿ¿ÿÿ¯ïþÿÿÿþ»îÿÿïÿüÿþÿ¾ÿûÿïÿúþïÿþÿÿ»ïû¾¾ïþÿûÿÿÿÿÿÿÿþ«ëÿûÿ»ÿÿïûÿÿ¿úÿþû»¾þÿÿÿþ¾ÿþû¿êÿÿ¿ûÿïþïÿïþÿû¿ÿ¿ÿþû+ÿÿÿþÿþÿþÿÿóÿÿþû¾úïÿÿ¿ÿ¿óÿûûïþÿþ¿þÿÿ¯ÿ»ûïÿ¾þÿﯾþïï¿ûþ¿ï?ÿïÿ»ûÿÿûÿ¿ûïÿÿ¾ÿÿüÿÏïÿÿÿÿ?¿ë»úÿû¿ÿ¾ÿþêÿÿÿÿ¯ÿÿï¿þîû¯ÿþÿêþ¿ÿ¯ÿïÿþïÿÿþÿ¿û?ÿÿ®ÿïþÿÿîûïûÿûïûÿï¾ÿûÿïÿÿÿûûÿÿ¯ÿÿÿÿÿÿ¿ÿ¿ÿÿïûþûÿÿêÿ¿ÿÿûêÿþïþÿÿÿûÿûÿÿïïÿëþÿº¿ïû¿ÿÿÿÿÿ¯þÿÿïþþ¿¾ÿ¯ûÿûÿÿûÿþ¿ÿêºïÿÿ¿ï¿ïûÿ¿ÿþûïÿÿ¿ÿ¿ÿÿûúÏ¿«þ«ÿþëÿ¯¿üïÿûÿïÿ¿ûÿþªï¾«ÿÿûÿÿïÿ¿ú¾ûûïïêÿïìþïë¯ÿÿÿïþÿ®¾ÿ¿¿ÿÿ»?ÿÿÿûÿë¿þÿÿïÿûþÿ¿ÿï«»þÿû«ûÿ¿ï¿/ºû¿û«ïú¼ûºþÿëþÏ¿òïÿûïûÿÿûïüîÿîÿÿêÿþïÞ¿¯ÿþ*ûïÿ¿¿¿®ÿ¿¾îïïïúú»»û¿ïþû¯þûºþûÿë¯ÿûï¿þì¿þþªïÿöÿþïïþïÿïúÿ?;ºïÿûÿþïÿÿþÿÿ¾ÿ¯¯úÿÿÿ¯ëþÿ¿¿ÿ»?¿º¾îûºëÿ®Ï»«û¿þþÿÿï¿ÿÿÿûþÿêÿ¿û»ÿïûþÿ¿ÿïïþÿºûÿÿÿÿ[¾ëïþ³ÿÿúÿîï¿ÿÿÿúÿëîÿÿÿÿüûÿÿ»ÿûî¿ïîþþþÿþïï¿þ¿úûÿÿ³þÿÿï»ûïüî¬ãêÿÿ¾¿ÿÿÿë»ÿÿúûþÿþÿþÿûÿûÿ¿¿¾ÿþÿÿþûú¯îëûîûïÿûÿÿ¿¿ÿÿþÿþ¿þ.þïûÿûÿ¿ïú»ï¿ÿïÿ¿ã¾úûû¾û¯¯ïë¿>ÿÿë¾þÿïÿúÿ/‹ûÿþÿþÿþÿÿÿ‹Îÿÿþÿü¾ÿþÿû¿þ¿ïÿ»ï¿ëþïþúÿîÿïÿÿþ¿¯îïþëÿûÿÿ»ÿïÿÿû:ïÿ?ÿûÿïÿúú¾ÿ³ÿϪþ»ÿóûÿ®«¿ÿÿêÿÿÿ?þêºþÿÿþ¿ïÿúþ»ÿÿ»¿ÿûïëïëÿûÿûþ»®ûþÿþ¯ÿ»ÿ¯ÿ¿¬þû¿ïïÿÿªï¿ÿÿêîï¯ÿ¿ÿ«ÿÿþÿòúÿÿûûÿ뾿ÿÿþ»ïëÎû¾?û¿ÿÿÿ¯ÿ¿ïóû¿ï;îëëÿ¿ÿþ¯¯úÿï¿þ»êÿïïÿÿÿþÿ¾ûû¾ïïúþëÿþû¯»ï»>¾ëþÿúÿÿ¿ÿïÿÿþ«ëÿúÿ;þïïûÿÿ?ú¿þû»ºþþïûþ®{þû»êÿÿ¿ûÿïþïÿïþÿû¿ÿ¿ÿþû+ï￾ÿþÿüÿÿóÿÿþú¾ºïûï¿ÿ¿óÿûûïþÿ¾¿þÿÿ¯ÿ»ûïÿ¾¾ÿﯾ¾ïï¿ûþ¯ï?ÿïÿ»ûïÿúë¿ûïÿÿ¾ÿÿüÿÏï¿ÿÿÿ?»ë;øÿû¿ÿ¾ÿþê¿þÿÿ¯ÿÿë¿þ®ûÿþÿêþ¿û¯»Ïûþ¯ïÿúÿ¿û;ÿÿ®ÿ«þÿÿîûïû¼ûîûûï<¿ëÿïÿûûûûÿÿ¯ûþûÿ¿ÿ¿ÿ¿ÿûïûþûÿÿêÿ¿ÿÿúêÿþïþÿÿÿûï;ÿÿïïÿëþþº¿ïû¿þ¿ÿïÿ¯þÿÿï¾þ¿¾¯¯ûÿûÿÿûÿþ¾ÿâºïÿÿ¿ï¿ïëï¿ûüûëþÿ¿ÿ¯ÿÿûúÏ¿+þ/ÿþûÿ¯¯þ®ÿÿþïÿ¿ûÿþêë¿«ÿÿ»ÿë¯ÿ¿ü¼þ»ïÿë?ïèþïë¿ÿÿÿïÿÿ/¾ÿïïÿï«?þþÿûûë«þÿÿï»ÿþÿ¾ÿ﮺ÿÿúëëÿ¿ï¯¯¾û¿û«ë:üúºûÿûîÏ¿òïÿû¯ûÿÿúïüþÿêÿÿûÿüïþ¾¯þ¿ªûïÿ¾»¿®ë»®úïïïêþ»»óÿ¾þûïþûúþûûëïÿúï¿þì»þþ®ïÿºþîëÿþïþïÿÿ?+ºïÿÿÿþïÿþþÿÿúÿÿ¿»þÿÿ¯ïþÿþÿÿº¯¿ê¾îûºû¿¾î¿«ûþþîïÿïÿÿÿÿúêÿêþ¿û»ÿïþîÿ¿ÿïÏþÿº»ÿ¿ÿ¿»ÿëÿ¾òÿÿúÿîÿÿú¿ûî¿®þÿüëëÿ»¿ûî¿îîþÿþÿþ¿ï¿þÿâû¿¿³þÿÿï¾þïüî,ëûÿÿ¼¿ÿÿÿ»»ÿÿûëþïþÿþûûÿûÿ?¿¿ÿëÿûÿûúÿþïûþÿ¿ÿûÿþ¿¿þÿîÿþÿî.ïÿûÿú¿¿ïêûï¿ÿïÿ¿ó¾ûûû¾ûÿ¯ïï¿.ÿÿë¾ûûïÿûÿ¯«ëÿþÿþïþÿÿûËÎÿÿêûü¾ÿþ¿ï¿þ¿ïÿ»ÿ¿êîïþºÿïÿïÿÿÿ¿¿þïêïÿÿîÿ»ûïïÿû*ï»?þÿ¿ÿ¿úøþï³ëÏ«þûÿóÿþ¾»¿¯¿êïÿÿ¿þëºÿûÿÿ¿¯ÿúî«¿ÿ»¿ÿ»ÿûÿÿïïëûþÿûþÿ®ûþÏúîû»ÿ¯ÿÿ®þû¿ÿÿÿÿ«ÿ¿ÿÿþîÿ¯û¿ÿ¯ûÿþÿòÿÿÿûûÿû¸¿ïûþ¿ëû®û¿¾ûÿÿûÿ¯ÿ¿¯ûë¿ï?îë«ÿ¿þú¯Ïÿÿ¿ÿþºîïÿîÿ¿ÿþÿ¾ÿû¿ïÿúþïÿþÿÿ»ïó¿>¯úÿûÿÿÿÿÿþÿþ««ÿú¯+þïïúþï¿úÿþû»¬þÿÿÿú¿ú¾û»ê¿ÿ¿ûû¯þïÿïþÿû>ÿ¿ïþû+ïÿ¿¾þþÿüþûóûÿþú¾ò«ÿû¿«¿òÿûûìþ¯ú¾îÿû¯ÿ»ûëÿ¾þïﯾ?ëî»óú¿ï?ÿïÿ»ú¯ûûû¿ûïÿÿ¾ïÿüÿîïÿÿÿ»?¿ë«úﳿÿ¾ÿþêÿÿûþ¯ÿþïºþ®ûïû¾ÿêþ¿û®ûìÿîïïÿîï¿û>ûï®ÿëþÿËîû¯ûÿûïûÿï¾ÿóÿïïÿëûûûÿ/ÿÿ»ÿÿÿ¿ÿ¾ÿÿîëþë¿¿èÿ¿ÿÿûêÿþïþþÿÿÿïûþûï¯ÿëþû:¿îúïÿþÿÿÿ¯ìûþïþî?¾?®ëûûÿÿûþþ»ÿʺïÿÿ¾ïîïûï¾ÿ¾»ë¿ÿ¾ÿ¿ÿûûûÏ¿»ÿº¿ÿÿÿïïÿ¾ÿÿÿëÿÿÿÿÿþëÿÿþÿ¿ÿ»¿ÿ¿¿þÿ¿ÿÿ¿ïÿþýÿÿþÿÿÿïÿÿþïÿëï¿ëïÿÿÿûÿûïüÿÿÿ¿ÿûÿÿÿþÿÿÿ¿ÿïÿÿÿï¯ÿûÿÿÿÿ;ÿÿÿëÿÿÿïÿûÿ¿ÿÿÿÿÿîÿÿÿÿßÿÿÿÿÿÿÿÿÿÿ¿ëÿÿÿÿ»ï¿ï¿¿þÿÿÿëÿ»¾ÿÿþþÿÿÿûÿÿÿïÿÿÿÿÿÿÿþûþÿÿëÿÿÿÿÿÿþÿþÿÿÿÿûÿÿÿÿÿþïÿîÿÿÿ¿ÿÿÿïÿÿÿÿÿöÿÿÿÿþÿþÿÿïûÿÿÿ¿ï¿ÿÿþþÿÿÿïÿÿÿÿÿïÿþÿ¿ÿÿ?ï¿ÿï¯ÿÿï»ÿêÿÿ¿ÿ¾ÿŸÿ¿¾þÿÿþÿÿ¯ÿ¿þÿÿûÿÿÿÿ¯ÿÿûûÿ¿¿ÿþÿÿÿÿ¿þûÿÿÿÿÿÿÿÿ¿þÿþûÿÿî¾ÿÿüþÿÿÿÿ¾ïþÿþÿïïÿûïÿÿÿûüÿûÿÿï¿ÿÿÿÿÿÿÿÿÿÿÿ»ÿïÿþÿûÿïþûÿÿïÿÿÿÿÿþûûÿþ¿ÿÿÿ¿ÿÿÿÿÿþÿîÿÿÿûÿÿ¿ïÿÿîÿÿëÿûûïÿßÿïÿúÿþþÿÿÿ¿ÿÏÿÿïþûþÿþÿ¿ïÿó¿ÿÿÛ¾¿¿îþþÿ¯ÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿþÿÿÿÿïÿûëÿ»ÿûÿþïÿÿÿÿÿóûÿ¿îÿÿÿÿÿþÿÿÿÿÿÿïÿ¿ÿÿÿÿ¿ÿÿ®ÿÿÿïÿ¿û¿ÿÿÿÿûÿÿÿÿûÿúÿÿÿû¯ïÿïþÿÿÿÿ¯ÿÿþúó¿þÿÿÿ¿ÿ¿ÿÿÿÿÿÿ»ÿÿÿ¿ÿ¿ïûÿÿÿëóÿÿû»ïûÿÿíÿ®ÿÿûÿÿÿûûþÿþïÿ{ÿÿïïûÿÿ¿þúÿÿÿÿ»ÿÿ¿ÿïÿþÿ¿ÿÿÿûÿûÿûÿûÿÿïÿÿÿ¿ÿûþþÿûÿûÿÿÿÿ¿¾ÿÿÿ¿ÿÿ¯?ÿïÿþþïþÿÿþÿ¿¾þÿÿÿÿÿÿû¿ú¯ÿÿ¿ûÿ¿ÿïÿÿÿûûÿÿÿÿÿÿ®ÿÿÿÿîÿÿÿÿûûÿÿÿ¿¿ûïÿÿÿë»ëÿÿ¿þþ¿û¿þÿÿÿÿßï»ÿ¾ÿÿÿû¿þÿûÿÿþÿÿÿÿÿÿÿúÿÿûû¿ÿÿÿÿÿÿÿÿÿûîÿÿÿ¿ÿÿûûëÿÿ¿ÿïÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿþ»ÿþÿ¿ÿÿûÿÿþÿÿÿïïÿûÿÿÿÿÿûïÿëïÿ¯ÿÿÿÿÿïÿ¿ÿÿÿÿïÿûÿþîÿ¯þÿïÿÿÿÿÿþÿûÿÿûÿ¿þÿÿ¿ÿÏÿÿþÿÿîÿþÿÿþÿûÿÿÿÿïïÿÿÿ¾ÿÿÿÿþÿûÿ¿ïëüûÿï¿ÿ¿ïëÿïÿïÿûþ¿ÿï¿þÿÿþÿÿïûÿ¿ÿ¿¾ûÿëÿÿÿÿÿëÿÿÿ¿ÿ>?øï¿ÿêÿ¿ÿû®ÿ;¿¿»ü»¿¿+î«ûþ»þÿïÿþîúû®ÿû¯ë½ûû¾ÿúïÿëÿÿ¿ë¯ÿÿ¿ïÿò¾ÿ¿¿º®ÿëëÿûÿû¯ïûº,ÿ¿Ïê;ÿú¾Îÿÿû¾ÿ¿£û¾þø»ï/ÿîÇÿ£úþÿëÿºïþï³ûüÿûþë«¿ï¿ìÿê¿ÿÿÿÿþ;¿¯ÿﺃ³ÿïÿ³êë¾òü¿ÿ²¿ÿÿîúó¯¿ÿÿ¯ÿï‹¿¿»þ«ºîüî»úÿ¿ïïþúˆþÿ«üÿúï¿þÿûêû¯ïï»úßïºï÷ÿj¼úþúÿËþß¿»«¯þûûÿÿëûÿÿºÿü¿î®þ®ÿÿÿ¾ÿïþ«¾ÿïûïÿﺿëïû¿ÿÿûðûï¿ÿë»ëë¯Ï»ë»¿ï˾›ÿÿ¯ÿúøÿú±¯ûÿûx¼ûû®¯»ÿ¾¾úÿ¿ò¾‹¿{û.ïîû¿¯ïþ¯¿þïûúëþ°¿ºÿîþÿêï«¿üþêîþþºÿïïþþïïûìïû¾þû뻼¿Ïºî®»ÿ¿û¯ï;ûÿî¿ÿÿºÿ¿þûþÿûòûüúþÿ¿ë¿ï‹â»¿ï¯ú¾ÿÿÿÿ¾»Ïÿ»þÿÿ¿ïÿþêê«ÿÿÿëÿ¯ÿ¿ë¾¼¿ÿú;ïûó®¿þþïïþû¾o¿¯êÿºú¿¿ûîû¾ïª¿ºï»ÿ¾¿úãÿ¯úþüþ*¯¿ïÿ¿ÿúÿ¿ÿ;x¿ÎŽêŠÿ¿?ûêÿûÿ»ÿëþºÿ¾¾þþû¿ýþï¯îúÿ¿¯{?ÿÿîºûûùÿÿîÿ¯?¯ëÿ»þ¯ÿÿêÿú*þ¯ï¾¬ï?ÿÏÿîîûÿÿûÿ¿+¯þ¾êîûú¼ëë¯þïÿïúûÿ¯ÿÿwûï¿ûú¾¿ÿÿÿû¯?»ëïû»òþÿ*»øïúú;?ïïïïúþ¯+ÿÏ.®ÿþ¿¾ëÿ¾ÿþ¼ïÿþûþ«ïÿïÿÿ³³ïÏ¿ÿ¾óòÿ¯«êÿîÿ»û®úþ¾¿ÿËü.ÿÿþþ¾þïÿ¿ïî¿/¯ÿº»ïï?þþúûþûû¿ÿïÿê®þ¾û뿫ꪾïëúþþþ¯ëÿø³ÿ»®ÿ¾úÿÿÿÿþ¿ûþ£óÿ®ûîÿÏûþïï¿ÿûîþ«ûú¾¿þ>ú¶¿ÿãïû>»ªûÿﻯ¿ÿûû¿¾úŠ»¼ÿìóâÿ®ê¿û¯ÿëïÿû¾ûóû¯«þ«ë¿ÿºÿ»ë/º¿¿ÿïÿ¿ÿúú«ë¿úïÿþË«û+ïïÿê;»»îÿ¿ûÿÿûú³îïó¿ëïï¯ûþüúïúÿºû¯þïÿÿ¾ÿþûûþÿÏþêûþþþÿê¯þâÿÿÿþÿþþÿî¼êîúÿûóÿþïÿ¾ûÿîïûÿËÿ>þï¾»ïÿÎïúÿÿ¿¯¿¯û»ú»ÿ¿ûÿ¿¿þ¿ïÿ¯ÿûÿ¯ûÿþÿúþ¿ÿ¿ÿÿ¿¿þþÿÿï¿ïþÿþ»îûÿîûÿ¯ÿþüÿêûþþú¾»þ¿ÿÿÿó¿ïïúúÿûÿÿìîÿîïïÿ«þÿ®ÿÿÿÿ>þÿÿÿÿ¿¿ï¾ÿ¯¾‹ÿ«ï¿ûÿþÿÿÿ¿ûÿÿ»ïò¾¿ÿû»ïûÿÿÿþÿÿÿÿÿ¿ÿþÿ¿Ïþÿîþûþûÿûÿü¿þûîºïó¼»ÿÿÿ¿ÿÿûÿ?ïÿû￯?¼ÿþÿÿÿ¿ÿºÏÿ«»ÿû>ÿÿ?ÿÿïòûïÿþÿ®ÿ³û»ûÿ¿¾¿¯û»ïÿÿ¿ÿ¿¿ë¿ó¿ÿþúÿ¿úÿÿº¾ÿÿÿãÿ¿ÿ¿¿ïþûÿûëêÿ«þï¿û?ÿÿÿþÿÿïÿþþûî¿ÿïÿ¿îÿúÿ®¿ÿÿïþóûÿï?³ïóïþë¿îëÿï¯þÿû»îúÿ»ÿº¿¿ÿ¯ûûÿÿ¯î¿¿þûû¾»þëÿûëÿþ<¿ïÿ¾¿û¿ïÿîïÿÿÿþÿóïîïÿþ¯ÿþÿþûúÿÿþÿÿ¾þÿþÿÿû¿ûïÿï¿¿ÿ¾ÿûÿ¿ÿÿîþÿú¿ÿ»ÿÿ«¯þÿþ¿ÿ¿ûþ¿¿ûÿÿ¿ÿû¯ÿÿÏÿÿïïþÿÿïÿïÿ¯ÿ¯ÿïîÿÿ¿ÿ¿îûÿëÿÿ¿¯ûþºÿ¾þîÿ¿þÿ¾ÿÿþºï¿ûÿìþÿÿÿÿºÿ¾ûþûÿÿÿîüûïÿïêÿÿ>¿ÿ¾¿þÿÿþÿ¾ëÿÿ¯¿ÿþÿïÿïëÿþ¿ººþ¿ÿÏûÿÿÿ¿ÿïêûÿÿ»ÿÿþÿ¿ÿþ¿¿ÿÿÿ»¯ÿ«¾ïÿþÿÿ¯¾ëÿÿ¾ÿïï¿ë»ï¿ûÿÿþ;ûîÿîÿ¿û¿¾Îÿ»ÿ¿ÿûÿúûëÿï¿¿ÿÿûûëÿÿÿ¿ÿüû»¾ûëÿþ¯3ïî¿ÿ¾ÿ¿¿ÿÿþïëëûûïïÿ¿îϾÿ»¿¿¯Îÿ¿ÿÿÿï¿¿+ûÿÿÿÿëÿ¾ÿü¿üëËúûÏûûï»ÿ»¿ÿþïÿÿÿþþÿûÿûÿÿÿÿÿÿþÿû¿ÿÿÿÿþÿÿïþþþ¾¼ÿ®ÿ¿ûÿÿïÿïï?þ¿ûÿÿþûÿóïþÿÿûÿÿÿïï¯ëîûÿ¿¿ûïóÿÿë¿ÿÿÿ³ÿûï¿ÿîÿÿûûêÿï¿ÿ¾ÿÿ¾ÿïëÿÿ»ÿÿ¿ÿúûþúîþÿûþúÿïï¿ÿÿÿúϯïÿÿÿïúûÿ¯ëÿÿûû¿ÿþ?û»ÿ¿þÿÿ¿ÿïÿÿ«ÿ«ïÿÿÿëê»þÿ¼ÿÿëïÿþÿîóÿ¿þ¯¿ûÿþ¿¿û¾úÿûþûÿÿþûÿïÿï¯ÿ¿¿ÿÿï»ÿûÿÿû¿¾ÿÿÿûÿ¯ìÿþïîïÿÿúïþÿþ¿þê«ÿ»ÿÿÿÿïÿÿÿ/ÿºÿÿ»þÿï¿®ÿï¾þÿÿ¬îÿº¿ûÿëÿ¯ûÿÿ«¿ÿÿ»¾¿¯¿ÿÿÿºïÿ¯ú¾ÿÿ»ÿÿûÿÿïþÿ¿þßïÿï¿ÿÿïûÿÿÿÿ¿ÿÿÿûþ¿ûïÿÿþûû»¿úÿþ¯ÿ¿¾ÿþÿþÿüÿÿÿ¾ÿÿ¯ÿïÿÿúÿÿþîÿû«ÿÿÿþçþÿëÿÿëÿûÿþ¿¯¿ÿ»ÿ¿ÿÿëûú¿ÿþþïïûíû¿þ¾¾ÿÿÿû¿û¿ÿïûÿÿïºïûïÿïïÿ¿ÿÿÿïûÿÿÿ¯ÿþÿûÿÿûÿú»¯¿ÿÿ¿ÿ¿þ¿þïþ¿ûüïûî¿îÿóú¿î¾ÿèÿÿ÷ëúÿïÿ¿»ÿïï¿ó¿úÿÿûÿÿï¿ÿÿÿ¿ïÿûÿÿÿë¾ÿú¿ÿþÿ￯ÿþÿ¿ÿÿûûÿ®ûûúÿÿÿû¿ÿÿÿÿ¿ïëûÿþïÿ¯þîÛëûÿÿïïþÿÿÿ¯»ÿÿÿûÿîþÿÿÿ¿ÿÿûÿÿ¾ÿÿþ»ÿÿïÿëþþÿÿúÿ¾Ëÿ7þÿþÿÿûÿÿþÿÿïÿû¿ÿ¿þïÿ¿ÿëïÿïûÿ¾?ÿÿèÿ¿ÿ¿þÿÿ¯»ÿ»¿ÿû¯ïûÿÿÿÿûïÿÿï¿ûÿ¿ûÿÿÿÿÿ¿¾þ¼ÿÿ½ÿûêÿÿÿÿ¾ÿÿþÿï»ÿ»ÿÿûÿÿÿÿÿÿÿ»ÿúÿÿÿïÿ¿ÿþÛëþÿ¿ÿïþÿÿûþþÿëÿÿþïÿÿÿ¿þÿ¿¯ÿþï¿ÿÿóïÿûÿïþïÿÿÿÿÿóëÿÿþÿÿ«ÿÿ»ÿÿÿï¿ûÿº¯¾¯ÿþþ¿¯ÿûøþÿÿ?ïÿÿÿÿÿÿÿ¿ÿ‹îûü¿ÿÿïýû¯¿¯ÿï¯ÿúÿÿîó?»ÿîÿÿÿÿûÿþ¯¿ëÿÿ¾ÿ¾þûþÿþ¾þÿûÿÿÿþ¿ÿÿ¹þÿÿÿïÿ¾®ûÿûïÿÿþÿÿÿÿûïïïûûºÿ»ÿþ¿ÿþÿ¿ïÿÿïýÿÿþÿûþ~ïÿÿêÿÿÿÿþ¿ëÿëûÿïÿÿûûþ»ÿÿ»ïÿëþÿÿ»þÿÿ¯ÿÿÿÿÿÿÿ«þÿú¿»¾ï»ÿÿïïÿÿú¾ÿÿÿÿûï¿«þÿÿÿþþûÿÿïÿÿëþëþÿÿÿ¿¿ûïûÏÿ¯ûïÿÿûÿÿîûï¿ÿÿÿÿÿ;ÿþ;ÿûïÿëÿ¿ÿÿþþûÿ¿îîÿÿëÿÿÿ»ÿÿûÿûÿ¿ÿ¿ÿ¿ïÿïÿ¾ûûëÿÿ>ÿÿïïúªÿÿÿÿÿû»ÿß»ÿïÿëÿÿÿÿêÿÿþïïÿÿûÿúÿÿ¾¿ÿûÿ£ûÿ¾¯ëÿ¿¯úúþÿÿÿÿïÿïûÿûþÿÿÿ¿ÿþþþÿþûÿûþÿîÿÿÿÿÿÿÿûîÿÿïÿÿþÿú￾þþïÿþÿûî¿ûïëÿïïÿÿ¿ÿ¿¿ÿÿÿûÿ¯ÿòÿ¿ÿÿë¿ïÿïû/óÿþúûÿ»ÿÿÏûÿÿÿÿþïúÿûÿëÿÿ¿ÿÿÿÿÿÿï«êÿÿÿ¿ÿ¯ï»ÿ¯üÿîÿïëû¿þ¢ï¿»¾¿ÿ»úûÿÿþþúûï¯Ïë¿û¾¿«ûÿ»«êþÿïû¾úÿ¿³þîÿ¨ïïþª®þû¿ïû¾¾ïþúëï¯û+ÿîïûÿÎþûûÿ«ËëÎêú¯þþÿÿû;ûûªÿêÿûûÿºþû¿¯ÿÿ¿îÿÿîîþ¯¿ûÿÿÿûÿëÿüÿÿîþü¿ÿïú¯£ÿî»ÿú¾ÿïÿûï¾ÿÿþ¯þÿóŠÿ¿è¾ÿëï¿Ïÿÿ¿ÿºþïÿÿûÿúþÿþïïþ«ÿþ¾»¿ª¾üþþîî뿯￯;ïëïÿ»û¿ÿï¯þîËÿºÿê¯ÿþþûïÿ¿¾¿ûÿþÿêûï«»è¾ï¾®¿ãÿú¿ûúîÿó￯¾þú¿ûûþÿ¿þÿïúÏ»;ªïïïïÿÿﻺïóûªÿ»ÿÿ»»»¾ûïûÿïþ¿ïú﾿ûÿÿÿÿþ/ÿþºªÿ¿¿Ï»ï»ûþﺮëûëÿÿξú«îÿïûËû®«ïïüûëË»¨ûÿ¾ÿï³ÿï¯ÿ¯ëûû«¿ÿÿÿ?úûïûûÿêÿïº?¯þûºþ¿Ï¯ûÿÿú¿?ÿÿ¿ÿûÿÿËÿú+¾ÿ¯ï¾ûÿ¿³¯¾ÿþ¯ÿÿ¾¿úÿú¾ÿÿþúÿê»ë¾ªÎêîú¢ÿ¿ëÿ/ÿ뻾ï?ã¿ïïûïþ»ÿïþÿëþ«ÿÿÿ¸¿¾/ûÿ«ê»ïÿ¯ëÿ¯ûÿü>úþïÿòÿ¿¿ûûúëÿïÿ¯ûþûï¿Ïïëúÿûþëÿÿîïïÿïÿþ¿ÿûîû¿»ìú¿üï¾ÿÿ+ÿÿïÿþ¾º¿¾ûâûÿ¾¿¿ÿîúÿúÏ¿ïý¿ïÿÿÿ¿þ«úü¿ë¯ûïþâÿïþÿÿþÿ¿;Ïÿÿûº»úÿûÿ»þ¿3¬î¿¿ïþ>«ú®«ïû¿ÿû«ïþþ¾ÿÿ￯¿¿Ïî¿¿ûþ»¿ÿëþÿïÿ»ÿÿ¿ÿüÿûÿïþϪêþîÿÎ;»ÿÿü®¿»ï¾ûûîÿ»¯¿£ÿÿÿ®ÿû¾ÿ»ûþÏï«ëúïþ¿¿ûïû¿ïË»ú¿ë¿ïﯯ»ì¿¿ÿþÿ?ÿþ®þúûî«ûï¿ûÿÿû¾«ÿÿºû«ï¿ï¿ûÿê󬻿°«ûûþûëûúÿ¯þ¼ÿëþÿ?û?ëÿêÿÿû¿þþÿºÿúÿ¯øÿ¾ºËêëþ¿î»ëÿïþïêî/»ìþûþ»ëûû¿úïÿ»ãÿþþ¿»ÿûëïþÿû®¾êúÿï»þÿ»»¾®þ¿ûûïþ®¯þúÿ¾ÿ¾þúþ»ï¾îüó뻿¿ÿ«ûÿÿ¾þï»ïûÿ¾»ûï¯úÿ¿þúú¿þ»ïëú¿ûþúãûÿ»îÿþÿþïúúÿÿïþþ¸ûúÿî¿ë¯ÿîÿë«ó³¿ûÿûû¿ïÿÿ«¿ÿÿëî¿ï¿ÿÿóºïÿ®ú¾ÿÿ»ÿÿûþÿï¿ÿ¿þïëÿ¿»ÿÿÿûÿÿûÿÿïÿÿ»þ¿»ïÿûþ¿û»¿îÿþ¿þ¿¾ÿþ¿úÿÿ¿ÿÿ¾þÿïÿïÿÿúÿÿÿîÿûëÿ¿ÿþÏþÿûÿÿâÿûÿþ¿¯ÿÿ»ÿþïÿëëÿ½ÿîÿïïûþû¿ÿÿ¿ÿ¿ïû¿ú¿ÿïûÿÿïúïûïÿîÏÿÿÿÿÿîÿÿÿÿ¯ÿ¾ÿûûÿûÿ¿ÿï¿ÿ¿þ¿îïþ¿ûü¯ÿþ¿îÿóû¿ë¾ÿüÿÿÿëûÿïÿ»»ÿïî¿ã¿úÿÿûÿÿï¿ÿÿÿ¿¯ÿûÿÿÿïþû¿ÿþÿ￯ÿþÿ¿ÿÿûûþ®ÿ»ûÿÿÿû¯ÿÿÿÿ¿ïëûÿþïÿ‹þî»ïû¿ûïïþûÿÿ¯¿ÿÿÿûÿîþÿÿÿ¿ÿÿûïÿ¾¿ÿþ»ÿïÿÿëþþÿÿûÿ¿Ëÿ;üÿþÿÿûÿÿþ»ÿï¿û¾ÿ¿þï¿¿ÿûïÿïûÿ»?þÿè¿¿ÿÿþüÿ/»ÿ»¿ÿÿ/¿ûÿÿÿþûïÿÿïÿûÿ¿ûûÿÿÿÿÿ>þ¾ÿÿ?ÿÿþÿÿÿ¿¿ÿþúþïûÿÿ¿¿ÿÿþÿÿÿÿÿÿ»ÿúûÿÿïÿ¿ÿþóûþû¿ÿÿþûÿÿþþ¿«ÿÿþîÿÿÿ¿ïÿ¿¯ÿþÿ¯ÿÿó¯ÿÿÿÿúÿÿÿÿ¿ÿÿëÿÿüÿÿ«¿ÿûÿþïï¯ûûº¯º»ÿþþ¿¿ÿûèþþÿÿïÿÿÿÿÿþÿ¿ÿ‹îúüûÿûïûûï¿ÿÿ«¯ÿúÿÿîó?»ÿîþûÿÿÿÿþ¯ÿëÿÿºÿþþûÿÿþ¾þÿûÿïÿþÿÿÿ¿ÿÿþÿï¿þ¿ûÿûïÿÿþÿÿÿÿûïîïëÿ»ÿÿ¿þ¿ÿþÿ¾ÿÿþûïÿÿþ¿ûî®ïÿÿêÿÿÿÿþ¿ïÿëûÿïÿÿþûþ»ÿû»ïûûîÿÿ»þÿÿ¯ÿÿÿÿÿÿÿ¯ÿþû¿»¿þÿÿÿïþÿÿþ¿ÿÿÿÿ»ë¿«¯þÿÿÿþþûÿÿïÿþîÿïþ¿ÿïï¿¿ûÿëÏÿ¯ûïÿÿóïÿþûî¿ÿÿÿûÿ;ÿþºïûÿÿëÿ¿ÿÿþÿûÿ¿Îîÿÿëÿÿÿ»ÿÿûÿ»þ¿ÿ®¿¿þÿïÿ¾ûûëúÿ>ïÿï¿þ«ÿÿÿÿ¯û»ÿï»ïÿÿûÿÿÿÿîÿÿÿÿïû¿ûþûÿÿ¿ÿÿÿÿ£ÿÿþ¿ëÿ¿¯úúþ¿ÿÿÿïÿ¿»ÿûþ¿þÿ»ÿþþÿÿÿûÿûÿÿêÿ¿ïÿÿûÿûîÿþïÿÿþïú￾þþÿÿþÿûî¿úï«þïîÿÿ¿ÿ¿¿ÿÿÿûÿÿÿòÿ¿ÿÿïþÿÿïú?óÿÿûÿïûÿÿÏë¿ÿ¿ÿþïúÿûþëþ¿¿ïÿÿÿÿÿÿ¿ûÿëû¿ëÿÿ£¿ÿÿ뮿ï¾ÿÿó¶ïÿ®ú¾¿ÿ³ÿÿûþþ﮿¾üîëÿ¯ºÿÿïóÿÿûÿ¿æÿÿ»þ¯³ïú»ú»û»¿âÿþ¯þ¿¾ÿî¾úþü¿ÿ¿¼þÿ¯ïïÿÿú¿ÿ¾îÿ»«þ«ï¾Ïþÿëûÿâÿûÿþ¯¯¿þ»û>ïÿëëúûîþïïûîû?î¾>ÿ¿ïû¿ú¿ÿîûÿÿïºïûëÿîÏÿ¿¿ûûîûÿÿû¯ÿºÿ³ûÿûÿêº/;ÿë¿ÿú¿®î¾¿û¸®ûî¿îÿóú¯ê¾ÿ軿÷ëúÿëÿ»»ÿïî¿Ã¯úÿ¿ûïÿï¿ûÿÿ¾®ÿûïÿþëþú¿ÿþÿ뿯ÿþÿ¿ÿûûûþ®û»ûïÿÿú¯ÿÿÿï¿îëû¿üïÿ‹¾î»ëû¿£îïþ»¿þ¯»ÿÿþûÿîþþÿÿ¿ÿþûïÿ¾¿ÿþ»ÿïïÿËúþÿÿøÿ¾Ëú;üÿîÿÿûþÿþ»¯Ï¯ûºÿ¯þ¯¿¿ÿëïÿïûÿº;þ¿è¾»ÿ>þüþ.»ÿ»?ÿë/¯ûÿþÿþûëÿÿ¯¾ûû¿ûûÿÿÿÿ¿>þxÿï<üûêïÿÿ»®ÿþêþ¯»ÿÿþþûÿÿÿÿÿ»ûú«ïÿïï¿ïþ³ëþû»ÿï¾ûÿûþþ²«þÿþîÿÿþ»Îÿ¿¯ÿþï¯ÿÿó¯ïþ®ïøÿÿÿÿ¿ÿóëúÿüÿî«¿ÿºÿþïï£û²¢«ÿ¾þ¿¯ûûèîîþ?ïÿÿûÿþÿ?ÿ‹îúü»þóïûû«¿¿ÿ«¯ûúþþÎó/»ÿîþûÿÿûûÞ¯»ëÿÿ¶ÿ¾þû¾ÿ¾¾þÿëÿïýþ¿ïÿ»îÿþ¿ï¿¾®ûÿûïÿ»þÿÿÿÿ»ïîïÛçºÿ›¿þ¿ÿüÿ¾Ïÿþëïÿÿþ¿ºî®ïÿúêÿïÿþú¿ëïëûïîÿÿúóþ»ÿû»ïûëì¿¿»þïÿ¯ÿÿÿÿÿÿï«úþú¿ª¾î¿ÿÿïîÿÿú¾ÿþÿÿ³«¿ªþÿûëþþûÿÿïÿþêþëþ¿ïï.¿»ïëÏÿ¯ûïÿÿ÷ïÿîëî¿¿ÿÿûÿ;ÿþ:ïûëÿ«ÿ¯ÿÿþþûÿ¯Îîÿÿëÿÿ®»þïûÿ»þ¿ÿ®¿¿îÿïþ¾ûû«úï>ëÿï¯êªÿÿÿÿ‹û»ÿÏ«ïÏÿëïÿÿûèÿÿþïïû¿ûþòïÿ¾¿ÿûÿ£û¿¾/ëÿº¯úºþ¿þÿÿïÿ¯»ÿûþ¿üï»þþþêþþóûúþÿêû¿ïÿÿûÿ»îþþïÿïþïúï?¾þîïÿþÿúî¿úï«þïîÿÿ¿ÿ¿¿ÿÿÿûÿ¾¯òï¾ÿþë¾ïþïú?ûÿ¿úûê»ÿÿÏã¿ÿ¿ÿ¾ïúÿûþëþ¿¿ïÿÿ>ïþïŸûÿûÿ¿ï÷ÿ£·ýÿ»þÿï¿ÿÿÿºïÿ¯ú¾ÿÿ³ÿûÿÿï￾~îïýÿ¾ÿÿÿóÿÿÿÿÿÿïÿ{þ¯ÿïþ¿úÿû»¿úÿþ¿ÿ¿¾îþþÿÿÿÿ¿¼ÿÿïïïÿÿúÿÿ»îÿ»ëþëÿ¾ïþïûûÿëÿûÿþ¯¯ÿÞ›û¿ÿÿëûÿ¯ûþÿïïûþû¿ïÿ?ÿÿÿû½Û¿ÿîûÿÿîúïûëÿïïÿÿûûïÿÿÿû¯ßúÿóÿÿûÿþº/»ßû¿ÿ¿ú¿¾î¾¿û¸íÿþ¿îÿóû¯ï¾ßܹ¿÷ëûÿëÿ¿»ïïŸã¯úÿ¿ûïÿï¿÷ÿÿ¾îÿûïÿþï¿ÿû¿ÿþÿ￯ÿþÿ¿ÿûûûÿ®ÿûûßÿÿû¿ÿÿÿï¿îëûÿüïÿ¯þîûïûÿ«îïÿ¿ÿþ¯¿ÿÿþûÿîþþÿÿ¿ÿþûïÿ¾ÿþ»ÿÿÿÿËþþÿÿúÿ¿Ëþ7þÿêÿÿûÿÿþÿ¿ÿÿû»ÿ¿þ¯ÿ¿ÿûïÿïûÿ¿;ÿ¿èþ»ÿ¾þÿÿ®»ÿ»?ÿï¯ÿûÿþÿÿûëÿÿ¯þûû¿ûÿÿÿÿÿÿ¾þºÿë¿üûþÿÿÿûŸÿÿþÿ¯ûßo¿ÿÿþÿûÿÿÿÿÿ»ûúÿïÿïÿ¿ïþÛûþÿ»ÿÿ¾ÿÿÿþþúëþÿþîÿÿ¾»ïÿ¿¯ÿþÿ¿ÿ÷óïïþ¯ïüÿÿÿÿÿÿÿëÿÿüÿî«ÿúÿÿÿo¯£ÿ¾·º¿ÿþþ¿¿ûûøþÿþÿïÿÿûÿÿþÿÿÿ‹îûüÿþÿïÿûë¿ÿÿï¯ûúÞþÎó/»ÿîÿÿÿÿÿûþ¯ûëÿÿ¾÷þþû¿ÿ¾¾þÿûÿÿÿÿÿïÿ½ÿÿ÷ÿ￾¿ûÿ{çÿ¿þÿÿÿûïïïëÿ»ÿÿÿþ¿ÿüÿ¿ïÿÿïÿÿþÿ»þ~ïÿújÿÿÿÿþïïëûÿïÿýÿóþ¹ÿÿ»ï¿ûüÿÿ»þïÿ¯ÿÿÿÿÿÿïïþÿû¿ª¿ÿÿÿÿïÿÿÿþ¿ÿþÿÿ󯿪¯þÿûëþþëÿÿïÿÿëÿïþýïïÿ¿¿ûÿûÏÿ¯ûoÿÿûÿÿþëï¿¿ÿÿÿÿ;ÿþ»ÿûÛÿëÿ¯ÿÿþÿ÷ÿ¯îîÿÿëÿÿî»ÿÿûÿûÿ¿ÿ¿ÿ¿ÿÿïÿ¾ûû«ÿ¯>ûÿïÿî«ßÿÿÿûû»ÿß«ÿÿÿûÿÿÿûìÿÿÿÿïÿÿûÿóÿÿ¿ÿÿÿÿ£ÿÿþ?ëÿ»¯úºþÿþÿÿïÿ¿ûÿûþÿþï¿ÿþþûþÿóûûÿÿîûÿÿÿÿûÿ¿îÿÿïÿïþÿúïÿ¾þîÿÿþÿúî¿ûïëÿïïÿÿ¿ÿ¿¿ÿÿÿûûÿ¯òÿ¾ÿþïþÿÿïû?óÿÿûÿþûÿÿÏóÿÿÿÿ¾ïúÿûÿëÿÿ¿ÿÿÿ¾ïþÿ/ûÿûÿ»ëï¿þ»¾¿ï®û¿þ²ï¿¯º¾¿ÿ³ûÿûÿþîﯾìÎïù¯¾ûûï»ûêÿÿ¿û¿úûþ«ÿîú¸úûú³¿ò¿ú¯ÿ»<¿îüúîîïÿ?¼ïï¯ïÎÿûú¿ë»êï««þêþ¾ïúïëû»ëÿûÿþ¯ª¿þšë¿ÿ¿ëûï®êþ¾ïïûîú¿î®?þÿûû½Ú¿ÿîú¯ã¯¨¯ûã¾îïÿ»ïºûïþïÿû«®úÿ²®ÿûÿþŠ/;ÿû¿ÿ¯úþþî¾¾û¸íëî¿êÿ3»¯ì¾þ踾þ뺾뿿»ÿëï¿ã‹ºÿ¯ûïÿë¿ûûî®ïþûïïú¯¿ÿò¿¾þêã¿Ž¿èÿ¿¿ú»óÿ®¿ûúßÿóû¿¿ÿþê¿îëú¿üÿ¯¾Ïû«êÿÎî¿¿¯þ««ÿÿºûÿîþ¾ûû¿ÿ¾ûoï¾ïÿþ«ÿ¿ûÿËþþþïèþ»Šú7þÿêÿûûþÿþ¿»ëëû»î¯ø+ü¿ÿãÏÿîëï¿:û¯Èþ²û¾þÿ¿«?þï®ëûïþÿÿû+þûºûû¯ûïú¿þþûºþºÏëºüûâÿ¿ÿû®¿ÿþÿ»ÿkºÿïê¿«þþÿÿ¿³úú¿îï¯ÿ®ïø›ë®ÿ»ÿï¾ÿ»óþúâëîúúîÿÿþ;îû¿¯þ¾ó¿ÿ÷Óïîú¾ïüÿïÿûïÿûèûþ¬ÿî«û¿£ÿïÿϯ£ÿ¸/ª?ÿöþ¿/ûûøìïþ/ï¯ïëÿÿþÿï¿‹îëø¿úûï¿ûª¿¿ÿï¯úûþúÎó/»þî¿üï¿ÿûê¯ûëÿþ¾÷>¾û û¾¾¾¿ûîûÿüÿソûÿ¾ï¿>/ûþûﯿîóÿÿ»ïïî뫺ÿ;ÿþ®»üÿ¿ï¿ÿ¯;oî¿¿¾þ¾«ÿºêÿïÿþî«ïîëúÿïÿÿë³þ»ï¿»ëÿë¼ÿûºþÏÿ¯ÿÿÿÿþ¿ïëþÿʯˆ¾ïî¿«ïÿÿ¸¿óþ¿¿ó®¿ª¯þïûïþ¼ëûÿï¿ÿêîëºëëÏÿ>¿»ÿû¿/ûïû¿ûÿ¿Î˯¿;üÿÿÿ:ÿ¾;þêëÿ«ë+ÿÿ¾þûÿ«îêÿÿëúûλî¿ûÿêÿ¯¿¿û©çÿoþ®÷ò«ïî>ûëïÿî«ÿÿêëû»ÿÞ«ÿŽÿëÿÿûû¬ÿËûûï¿ÿ»ÿòÏÿŸ»ïû»¢û»¾+ëÿz¯úªþ»ûÿÿ￯óûûîÿþﯼúøêîþóûºü¾îÿ¿ûûïû¯?îþÿïû¯þú«ï¾îîëûùÿúî«ûïë¿ïïûÿ?ÿ¾¿ûÿ¥öß¾¯òþ¾þú˾ê÷ßû?ãû¿ûÿþûÿÿÏóûÿÿÿ¾¯²ÿëÿê¿ë¯ÿïÿ:¯úï¿ûßûÿ½Wõß»¿ß×›öߟ÷}õ¶ïV¯úÖÿýsÿë÷ÿýïÿÿŸöÛný÷¿ß÷ßq÷]·ýÿ÷ÿïëí¿ÿ罩×zŸŸÚ[Õ¿ÿ¿>÷îîþïÿþýÿ¶·ûßßnÿÿÖÿÿ»Öýµë¾ê~žçjï{ÿ¿éÿûïÿ®¯ýþ›{¿_ÿëûÿÿøÿÏïÿþÛŸÿÿ»¾w{ÛÿÚ¿ÿçãîW¯þ_ûëÿïo÷Ûïûÿï_ÿÿ}¯oýÿûÿßûÿþ»ë¿þÛ¿Ý¿úÿ~î¾×ëõm÷þ¿^ëÕý¯ç¿ÿ|w¾÷뻹ªÝ¿¹}íï_ó¿Ûÿ¿ÿ÷ïŸ×ýüŸíÿÙÿ_õï¿ý÷]}wïÿîÿ¿ÿþ۹ߞßÛúßÿßÛ¿×ýÏï¿ïãëÿ|ëëïþïûïûþûÎï¿?ÿÿ¯¿ÿÿûóÿî¾ÿëÿ¿ÿÿ+îÿŽÿþ¿û¿ûïëþþÿÿøþ«ß7þßýÿ÷÷ßïîõ—ooy¿Wž~ëÿ¾þûïßíûÿ½5Ûêþ¿wÞý¿ßi»ï›wþ¯ÿû§¿ßÿÿßý«ï]Ùïþûÿûÿÿ÷Uuÿë{þ»þÿÿÿÿŸïÿþÿïûÿ{¯ÿÿþ¿ûwoÿÿû«úúÿõöïÿßþþßkþÿ·þþßûÛþ¾_éþÿÞîÿŸ÷»ý¿¯ÿþÿ?ÿûÑíõî¿ÿüÿÿÿÿûûÿëï¾lÿÿ«ºÿþÿ»ÿ¯»Ûÿ¾½ºÿÿþþ¿óÿøýÿ¾ëïuÿwßuõ~KûüÿvýoUûëºÿÕ×¥Ý×ÿöÞ{¯RýN_÷ÿ}_÷Ýæ—[öW÷zÞëïçžµÿ_÷íŸõßÿoùe½]}wmvî_ó^×çÿÿÖW÷ÿÿ÷ÿíç[µ·¿Ÿÿý_ÿÔw¾mïÿWUUÿý÷¿Zvëÿ¿êÿ½ÿ¿þ¯ïÿû_ûïÿÿûóî·ÿÿûóÿú¾ÿÿ»íÏû¯ÿÿÿÿÿÿïïÿÿú?³?ÿÿïÿïÿíÿþ¿ûþÿþóî¿;®þÿ¯ÿ¾þëûÿ¯ÿûïßïÿÿÿïÿ¿¿óþúÏÿ¯ûoÿþûÿÿÿÓï¿ÿþÿÿÿ{ÿ®»ÿûßÿûÿ¯ÿÿøûûë¿îêÿÿëÿÿï³û¯ùÿóÿ¿þ¿û¿ÿÿëÿ¾ûêëÿî.ÿúïþþêßÿÿþÿûºÿÝ«ÿÿÿûÿûÿïìýÿÿþÿÿÿû¿ûþÿ¿ÿ¿ÿÿÂÿÿ¾;ëË?Žú¾þ¯ÿÿÿëû¿ûÿûþÿïî¿ÿú¾úï®óÿûÿûèúþÿÿïûÿ¿îÿÿëÿ¿þÿúªÿ¼ºþûÿþûóê¾ûϪÿïïûÿ¿ÿ¿¿ÿÿ¿û¾¿ÿú¾¿ûþïþÿûÿû?ãûÿûÿÿûÿÿÏÿû¿ÿïþï»ÿûÿ»ÿ¿¿ÿÿÿþ¿ÿÿ¯ÿßÿÿùWåßûÿß×ßÿŸoß÷}õ÷ÿWÿû×þýÿÿ÷ÿýþï¯ßoÞý÷þß÷ß}÷]÷ýÿ÷¿ûýïÿ÷~ùý×~ßßß_Õÿÿÿþwÿþûÿÿÿýÿöçþßßoÿû×ÿïÿ×íõÿÿÿß÷ÿûûýÿÿÿÿÿþýÿÞoÿ_ÿÿÿïnëÿþÿÿÿÿÞÿïï¿ÿw{ÿýßÿÿöÿ¿W¿ï_ÿÿ¿ÿ÷ßÿ¾ûÿ_ÿÿyÿ~ùïû¿ßÿÿÿî?ûßÿÿÝÿÿþÿ¿×ÿµ}÷ÿÿ[ÿ½ÿ÷þÿ{vÿöÿÿ½ÿÝÿý}ýÿïîŸÿÿ{ï÷ÿß×ùÿÞýÿÝî_õÿÿý÷Ý]}wûÝýÿúÿÿÿûŸùßߟßÿßÿÛßÿ—ýþþÿþÿÿ¿ÿ¯ÿ¿ÿïÿ»þÿ¯þþÿÿ¿þÿïÿÿÿÿÿÿÿþïÿÿÿ¾ÿÿÿÿÿÿïÿÿÿÿïÿÿþïïÿÿÚ÷ÿßéÿ÷÷ßÿÿõ×{}û÷ß¿üÿÿÿÿßýïÿýõßïþû÷¿ýÿß}ÿÿßwÿoþÿÿ÷þßÿÿßýÿÿ]Ýûïÿïÿ¿þ÷{ÝUuïÿþÿïÿ¿¿ûßÿÿÿÿ¿ÿÿoÿÿïúÿïv~ÿÿ¿ûÿÿÿå÷¿ÿžïþŸÿÿ÷ÿ~¿ß¿ßÿû[ýÿûßÿÿßöÿoùÿÿþ¿ÿÿÿ÷ýýåÿÿÿÿÿÿÿûïÿÿüÿÿÿÿîÿÿûÿÿÿïÿ›ÿþýÿÿÿÿÿÿßÿûÿýÿÿÿÿÝuëwßuõýïûÿwýUÿþÿÿÕ×õÙ×þ÷ßÿ_ý_÷ÿ}_÷Ýý÷×_÷W÷Ÿÿº÷ßõ¿_÷ýÛõßÿýuý]}w}w¿_ÿ_×÷ï¿×W÷ÿÿ÷ÿý÷_õ÷ÿŸÿý^¿×wÿ}¿ÿWUUþýçÿ_w¿ÿûÿÿÿÿÿïûÿîÿþÿÿÿÿï¿ÿÿÿ¿ÿÿÿÿþÿûþÿÿÿÿÿÿÿÿÿÿÿÿþÿïïîÿïÿþÿÿÿÿÿÿÿûÿÿ¿ÿ¾ÿþÿÿÿûïÿºÿÿÿÿ¿ÿúßÿ«íëÿÿÿÿÿÿÿÿÿ¿ÿÿûÿÿÿÿïß¿ÿ?þÿÿÿÿÿÿÿÿþûÿÿûÿÿÿ¿ÿÿÿïÿÿÿÿÿÿÿîÿïÿÿÿîÿï¿ÿÿûÿÿÿÿÿÿÿ¿ïÿÿûïÿÿïÿÿÿÿêëÿÿÿýÿÿÿÿÿÿÿïû¿ÿÏÿûÿÿÿÿÿûÿÿÿÿÿÿÿÿÿ»ÿÿÿÿûÿÿïÿÿÿÿÿÿ¿ÿûûþÿÿþÿÿþÿûÿþÿÿëÿþþÿÿÿÿûþÿ¿ÿ¿ÿÿÿÿïÿÿÿÿïÿÿïÿÿÿÿþÿïÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿïÿÿÿ¯ÿÿþÿûïÿûÿÿûÿïÿÿÿÿþÿÿÿÿûïÿûÿ¿ÿ¾ÿïÿîÿÿïÿÿÿ»ïþÿŸÿßÿÿùWåßûÿß×ß¿Ÿoß÷}õ÷ÿWÿû×¾ýÿÿ÷ÿýþë¯ßÿÞýçþß÷ß}÷]÷ý¿÷¿ûÿýïÿ÷~ùý×~ßßÛ_ÕïÿÿþwÿþûþþÿýÿöçþŸßoÿû׿ïÿ×íõ¿ÿÿß÷ÿoûûýÿÿÿÿÿþýÿÞoÿ_ÿÿÿïnëÿüÿ¿ÿïÞÿÿw{ÿýßÿÿöÿ¿W¿¯_ÿÿ¿ÿ÷Ÿÿ¾»ÿ_ÿÿyÿ~ùïû¿ßÿÿÿî?»ÿÿÿÝÿÿþÿ¿×ÿµ}÷ïÿ[ÿ•½ÿöþÿ[vÿöÿþ½ÿÝÿý}ýÿïÎßûÿ{ï÷ÿß×ùÿÞýÿÝî_õÿÿýöÝ]}wóÝýÿúÿÿÿûŸùßߟßÿßÿßßÿ×ýþþÿÿÿÿ¿ÿ¯ÿ¿¿ïÿ»þÿ¯þþÿÿ?þÿëÿÿÿÿÿÿÿþïÿÿÿþÿÿÿÿÿÿïÿÿÿÿïÿÿþïïÿÿÚÿÿßéÿ÷÷Þÿÿõ×{}û÷ß¿üÿÿïÿßýïÿýõßÿþû÷¿ýÿß}ÿÿßwÿoþïÿ÷þßÿÿßýÿÿ]Ýûïÿïÿ¿þ÷{ÝUuïÿþÿËÿ¿¿ûÞÿÿÿÿ¿¿ÿoûÿïúÿïv~ÿÿ¿ûÿÿ¿å÷¿ÿžïÿŸÿÿ÷ÿn¿ß¿ÛÿûSýÿûßÿÿßöÿnùÿÿþ¿ÿÿÿ÷íýåÿþÿÿÿïÿûïÿûüÿÿÿÿîÿÿûÿïÿïÿšÿþíÿÿÿÿÿÿßÿûÿíÿÿ?ÿÝuëwßuõýïû¿wùUÿ¾ÿ¿Õ×õÙ×þ÷ßÿ_ý_÷ÿ}_÷Ýý÷×_÷W÷Ÿÿ¸÷ßõ¿_÷ýÛõßÿýuýY}w}w?_ÿ_Öÿÿ¿×W÷ÿÿ÷¿ý÷_åöÿ›ÿý^¿×wÿ}¿ÿWUUþýçþ_w¿ÿúÿÿÿÿþïûÿîÿþÿÿÿýï¿ÿÿÿ¿ÿÿÿïþÿûþÿÿÿÿÿÿÿÿÿÿûûþÿïïîþïÿþÿÿïÿÿûÿûÿÿ¿ÿ¾ÿþÿÿÿûïÿ»ÿÿÿÿ¿ÿúßû«ïëïÿ¾ÿ¿ÿÿÿÿ¿ÿÿûÿÿÿÿÏß¿ÿ?þÿÿÿÿÿÿ¿ÿþÛÿ¿ûÿÿÿ¿þÿÿïÿÿÿÿÿþÿîÿþÿÿÿîÿï¿ÿÿûïÿÿÿÿÿÿ¿ïÿÿûïÿÿïÿßÿÿêëÿÿÿÝÿÿÏÿïÿÿïû¿ÿÏÿûÿÿÿÿÿûïÿÿ¿ÿûÿÿû»ÿÿÿÿúÿÿïÿÿÿÿÿÿ¿ïûûþÿÿþÿÿüÿûïþþÿëÿüþÿÿÿÿ¿þÿ¿ÿ¿þÿÿÿïÿÿÿÿïÿÿïÿÿÿÿþÿïÿÿÿÿÿÿÿû¿ÿÿÿÿÿïÿÿþ¯ÿÿþÿûë¿ëÿÿûÿïÿ¿ÿÿþÿÿÿÿûïÿûÿ¿ÿ¾ÿïÿîÿÿïÿÿÿ;ïþï¯ÿÿÿÿûûïÿûÿÿÿÿ¿¿ïÿÿ¿ÿûÿ¿ÿûÿ¾ÿÿÿÿÿÿÿþë¯ÿïîÿýïþÿûïÿûýÿÿ¿ÿ¿ûÿÿïÿÿþûÿûþÿÿûÿÿïÿÿþ¿ÿþûþþÿÿÿþïþ¿ïïÿûÿ¿ïÿûïÿ¿ÿÿÿÿÿÿÿïûûÿÿÿÿïÿþÿÿþïÿÿÿÿÿïîïÿüÿ¿ÿïÿÿÿÿûÿýßÿÿþÿ¿ÿ¿¯ÿÿÿ¿ÿÿÿ¿ÿ¾»ÿÿÿÿûÿ¾ûÿ»ÿÿÿÿÿî?»ÿÿÿÿÿÿþÿÿ¿ÿÿ»þëïÿû¿¿¿ÿþþÿëþÿöÿþ¾ÿû¿ÿÿÿÿÿïοûÿûïÿÿÿÿûÿîÿÿÿîÿûÿÿÿþÿ¿ÿÿóÿîÿúÿÿÿû¿ûÿï¿ÿÿÿÿûÿÿ¿ÿþþÿÿÿÿ¿ÿ¯ÿ¿¿ïÿ»þÿ¯þþÿÿ?þÿëÿÿÿÿÿÿÿþïÿÿÿ¾ÿÿÿÿÿÿÿïÿÿÿÿïÿÿþïïÿÿÿþÿÿÿëÿÿÿþÿÿÿÿûÿÿûÿïÿ¿üÿÿïÿÿÿïÿÿûÿÿïþûÿ¿ÿÿÿþÿÿÿ¿ÿïÿïÿÿþÿÿÿÿÿÿÿ¼ïûïÿïÿ¿þÿûÿÿÿïÿÿþÿËÿ¿¿ûþÿÿÿÿ¿¿ÿ¯ûÿïúÿïþþÿÿ¿ûÿÿ¿ïÿ¿ÿ®ïþ¿ÿÿÿÿÿî¿ÿ¿ûÿûóÿÿûÿÿÿÿþÿîûÿÿþ¿ÿÿÿÿïÿïÿþÿÿÿïÿûïÿûüÿÿÿÿîÿÿ¿ûÿïÿïÿºÿþ¯ïÿÿÿÿÿÿÿûÿîÿÿ>ÿÿÿëÿÿÿÿÿÿÿÿïû¿ûûÿ¿ÿ¾ÿ¿ÿÿÿûÿþÿïÿÿÿþÿ¿ÿÿ¿ÿÿÿÿÿÿÿÿÿÿ?¿ÿ¸ÿÿÿ¿ÿÿÿûÿÿÿÿÿÿÿûÿ¿ÿÿ?¯ÿÿþÿï¿ÿÿÿÿÿÿ¿ÿÿÿëþÿ»ÿÿî¿ïÿÿý¿ÿÿ¿ÿþÿïþÿÿ¿ÿúÿÿÿÿþïûÿîÿþÿÿÿÿÿ¿ÿÿÿ¿ÿÿÿïþÿûþÿÿÿÿÿÿÿÿÿÿûûÿÿïïîþïÿþÿÿïÿÿûÿûÿÿ¿ÿ¾ÿþûÿÿûïÿºÿÿÿÿ¿ÿúïû«ïëïÿ¾ÿ¿ÿÿÿÿ¿ÿÿûÿÿÿ¿Ïï¿ÿ?þÿÿÿÿÿÿ¿ÿþëÿ¿ûÿÿÿ¿þÿÿïÿÿÿÿÿþÿîÿîÿÿÿîÿï¿ÿÿûïÿÿÿÿÿÿ¿ïÿÿûïÿÿïÿÿÿÿêëÿÿÿïÿÿÏÿïÿÿïûÿÿÏÿûÿÿÿÿÿûïÿÿ¿ÿûÿÿûûÿÿÿÿúÿÿïÿÿÿÿÿÿ¿ïûÿþÿÿþÿÿüÿûïîþÿëÿüþÿÿÿÿ»þÿ¿ÿ¿þÿÿÿïÿÿÿÿïÿÿïÿþÿÿþÿïÿÿÿÿÿÿÿû¿ÿÿÿÿÿïÿÿþ¯ÿÿþÿûë¿ëÿÿÿÿïÿ¿ÿÿþÿÿÿÿûïÿûÿ¿ÿ¾ÿïÿîÿÿïÿÿÿ;ïþï¯ÿßÿÿùWíßûÿß×ß·Ÿoß÷}õ÷ÿWÿó×¾ýÿÿ÷ÿýþë¯ÞïÞýçþß÷ß}÷]÷ý¿÷—ûÿÝïÿ÷~ùý×ßßÛ_Õ¯ÿÿþwÿþûþþÿý¿ö÷þŸßoÿû׿ïû×íõ¿ÿÿÞ÷ÿoûûíÿÿÿï»îýÿÞoþ_ÿïÿïfëÿüï¿ÿïߟþ¾¿ÿW{ßýßÿÿöÿÿW¿¯_ÿÿ¿ÿ÷Ÿÿ¾»ÿ_ÿÿy·~ùÿûÿßÿÿÿï?»ßÿÿÝ¿þþ}ÿ¿×ÿµ~÷ïÿ[¿•½ÿö¾ÿkvÿöÿú½ÿÝ¿ý}ýï_ïΟûÿ{ï÷ÿß×ùÿßýÿÝî_õÿ÷ýöÝ]}wóíÿúÿÿÿûŸùÞߟßÿßÿÛßÿ—ýþÿÿÿïû¿þ¯ÿ¿¿ïÿ»þ¿¯þþÿÿ?þÿëÿÿþÿÿöþþïÿ¿ÿ¾ÿÿÿÿÿ¯ÿÿÿÿÏÿÿþïëÿÿÞ÷ÿßéÿ÷÷ÞÿÿÕ×{yûWß~¿üÿÿïÿßýïÿýõßïþûwŸýÿß}ÿßwÿoÿïÿ÷þßÿÿßýÿÿ]Ýÿïÿïÿ¿þ÷ÝUuïÿþÿËÿÿ¿ûîÿÿÿÿ¿¿ÿ¯ûÿïúÿïvÿÿ¿ûÿû¿å÷¯ÿŸïúŸÿÿ·ÿn¾ßÿÛúSýÿûßÿÿßöÿnùÿÿþ¿ÿÿÿ÷éýåïþïÿÿïÿûïÿûüÿÿ~ÿîÿÿ¿ûÿïÿïïšÿþíÿÿÿÿÿÿŸÿûþíÿß>ÿÝuëwßuõ{ýïû¿wùUÿ¾ÿ¿Õ×¥Ù×þ÷ßÿ_ý_÷ÿ}_÷Ýý÷×_÷WûŸÿ¸÷ßõ¿_÷½ÛõßÿýuýY}v}w?_û_Öÿï¿×W÷ÿÿ÷¿ý÷_åöÿ›ÿý^¿×wÿ}¿ÿWUÕþýçþ_÷¿ÿúÿÿýÿþîûÿîûVÿÿ×ÿ¿ÿõÿµÿÝÿïþÿÿû×ÿÿçÿÿÿÿÿÿûëÿÿëïî¾ïÿþÿÿïÿÿúÿûÿÿ¿ÿº¿þûÿÿûïÿºÿÿÿÿ¿ÿëßû«ïëïÿ¾ÿ¿ÿÿÿÿ¿ûûÿû÷ÿÏß¿ÿ?þÿÿÿ¿ÿÿ?ÿþëÿ¿û¿ÿÿ¿þÿÿ¯ïÿÿÿþÿîûîÿÿÿïÿï¿÷ÿûïÿÿÿÿÿ¿ïÿÿûïÿÿïïßÿÿþëÿ»ÿÝûÿÏÿëÿÿïëÿÿïÿûÿÿÿÿÿûïÿß¿ÿûÿÿûûÿÿÿÿzÿÿ¯þÿÿÿÿï»ïûÿþþÿþÿÿþÿûïþþÿûÿüþþÿÿÿ»þÿ¿ÿ¯¾ÿÿÿïÿÿÿïÿþïÿÿýÿúÿïÿÿÿÿÿÿÿû¿ÿÿÿÿÿå÷ßþïÿÿþÿûë¿ë÷ßÿ¿ïÿ¿ÿÿþÿÿÿÿûïÿ»ÿ¾ÿ¾ÿïÿîÿÿïÿÿÿ;ïþïëßûþWíÛ³·ÝÖš¶ŸoŸö}õ—¯V¯ðÖþýrÿê÷»ýî›jþçïÞ¶ßaöY¦ý?ç·ëké«ÿç~¹©×zŸ›Ò[Õ/ÿ¿¼·êîøî»þí¿¶÷þŸßOûûÖë«ûÖíõ«¾îoÞ§oïcÿ»éÿûÏïú¯ýÞÚn¾_ÿëû¯vëþüÏïÿîÚ›þþ»¾Ws›þj¿þçòþW/ª_ûë¿Ëo÷žkú;ï_ÿÿ}¯^ùÏ¿ûߺªþ««¿úï¿ÝªÎî~Ï>–âõjçì¿Z£½¿æ¼ßXv?öëª9ªÝ¿¹½íïã›ûïï÷ïŸ×ùþ›íÿÙî_õ¯¿ýö]}fê-ÿìþ¿Ïî›±ÚžžÛúßÿßÛ¯ýÎÿ»ïëë¿î‹ë¯þËó«ú>ïŽê«¿>þ¯¡ÿþúó¿æºþËû¾ÿ¿«bþ®ÿ¿þû?ûÿëþÎîïèþëÞ7¾Ÿ¹þ¶÷Þïþå×znqïWžëþ¾þîîÛíãÿ½5›Êø¿·ßí¿ßI;ï›wþ®»§ºŸÿïŸí¯«Y™ÿîëïû¯û÷oUuïã{þ»Âÿþ¿ûžïÿîÿï»ÿ»ºï¿úÿêvo»úº£úú¿µ÷/¾ŸúøŸkþÿ·înþßûÒþº[éþûÞòÿŸ¶ójù¿«ÿ¾¾¿¿ûÑýåËÿê¼ÿÿÿ»ëóû诼xÿÿ«¢kúÿ«ÿo¯Ò뼪¿ÿþþ¯òû¸½÷.;ïuïwÞuõnk©ë°»tùoUú«¸¿Õ—¥Ù×߶Þ{RýN_ö¿mSçÝæ—[÷Wïzžëø眥¿^÷½›åßÿoùuý]uvmwª_³R×ï/ÿÖW÷ÿÿ¶úåæZ5¶»ÿ½_¾Ôw¾}¯/WUUþýç¯^voÿ®b¿¿ÿ¯®Kïüûæûï›]ï³î¹ÿ½úÑÿêºÿÿ»ª¯û¿¿ÿþÿûÿïëúÿê+Ï:ÿÿø¿ïëîþêºóüû¿ú迺®þÿ«û¾¼ëóÿ.¿ûêßê«ï»Ïÿ?¾ëþúÏÿ¯û¯ûþëç¿ÎÚ¯¿»üÿþÿ+¿Ž:ÿúßÿûù»ÿÿ¸ø÷â¿îzïÿïëÿïòïïú¯âûÛ>·û³¿ÿkû¾ûêûïÿ.ïëïÿúê¾ÿþ®û8ÿÝ«¾ïÿË¿ûïû¬ÿïÿ¸ûû¿úëûÿÿ»?¯ûûÃûû¿»ëË»Žúîúÿû»ûë³®ã»úªïïî?þ¾»þήóûûüþèúüÿêþû¿ÿ.»ÿ¢ÿ¯úïòëξºþûºþûòê¬ûï¸ÿïûÿ?þ¿®óûïû¾ÿÿú¿¾úºÃ¾ëû¾ã>ëûÿÿÿÿëûÿªÿ®¿»ïîëÿªÿ¯¯»¿ÿ»¿þï ¿â¯»ú¯óûË»»¿î¸®®ë®»»¼¬ï¸Šêòº8èêê»»þ¯»ÿ?ìšê¹ìξ¾«Â¿ó¿º.þÏê(»¿«êþ®ëú¿»ê£("ºÿ²ëêîüºº¿î¾ãÿ¯¾ï»ÿþê»ëèþú«¬þîü«ï/âûïú¯»ï¿þ?ÿþëüÿ¾ëë¾+òúîŽ;¿®þ;.úë*ë»êþþ¯ú¯êþ¿«þº;¿¾ïëÿºë¿>ÿî¿þëëûøë¼ëÿâ«ÿ+ªºüÿ¿îÀŒëü«¾¾êüáëü¯ï£úóºìü®¬ÿ¿÷뺻®ë¯²¿Ë¯?º‹Êû¯Ï¯¾ï¿»ïî»ûÿú뾿¿ºþò¿úüêÚ«¯êìò¯ïÎûëø®¿»ú+ÿûª¯«¿ÿ»«úë¿ïú미ϳ¯ú¾þŽê£ÿ>ºŽó¯¢êóÿêóÿïÿ« þ¨úÿêîû;8ϸ¼?«»®ø?þ¨?ª»º¾ªûøËîÏúþþú￾ÿ˺úþîèûﻯï>úÏê«¿?ÿþ¿ÿˆ+¾û¯®º¯:ªÿï;ÿ®º®ÊÿŠã¿».ûþïû¯Ïþó»»»âîîîëªÏúìïî¸îjº¯¯þûîÿî²þ¾«ºÿ¿º¿þ¾¿úúŸû¾ÿþ¾Žþëºò¨¸óûûûîò¾»<»ª§»ªîþ¾¾¯ÿªÿ¾ëþø>þ¿ú»ûúû뫼ú/¿¯‚ïîì+ê/2ᆵê»ÿúêê‹êï»®Ž?3‹ª²þ®¾ïî?î*û¼úºû¢¼êþ¾«êûï®®û»ú¿ïâê‹;¿ªÏ¢êëþìþìï¾Ë¾»ïÎϾð½þþ¿¾ï»ª¯²¢ø¯+ûîê>ÿꢿîË*ªº»ë<ªüþþ¾ûÿ+óûî¾ÿªº?Žÿ*¢¯/»®¯ªî:¾ÿ³ÿº»ï»®«êȺ»ëêÿþïÿ¸ºû/»ÿîï»Ìëûúÿ¿;ë²îþºîê«î¼ã"ÿþûþÊúþ:®¾ï¯ûþîªóÿ*¾óúÿëþ¿>ïÿ/¼¯îúÏêêËîúì¯ë¿Ïüï¬;úûþþ¯>.ªÿꮳ¿þ»ûÿàð»¢ÿþèï믊èÿøúïè®ó²»0¾ï»¯þ㲪ûêÿÿþ#ûû«¯êú?>Šþ¾ûü.Ïþ¾‹þŽ¯ëÿû®úþªˆøûþºëêïê¿+«ºËÂûϯ»+ËþŠèìóþÊ«úû»®ëºû³îîü®üºÿëή«ûèüëèòêÿ¬ÿûÿû¾à¿¢ûªüþú¿ë¸2þò³îþú¸¼ê Ž®ëºë»û¿ºûûÿû¼ÿó껾ê¿ë>ïëøª¸Ëª¯þïþò»¾®ï¾¯Ë¯ê¨ÿûï«ú;+»¿»¿ÿë+âºúªãúÊ*³?,(®Ë¬º;¬¨(
+*âº(àŠê:«ú.»¯8È*껈¬¸¸«À»ò¾º*¾Šê ª¯¨¢êªâú»«â# "º:²ŠŠîøº*²¬ºƒì¯¨ê£ÿú¨»ë讪Š¬ª¢ì«¯â³ëª¯‹î¯².ûò‹ï¬ú2Ë«>( ¸ Ž+«¬ú:.º«*볪¾êŽº®Âº««¢;»¾Êª¼ªêº>ïì¯þâ«ðÊ°è¯ +¾*øó¿î@ŒŠø‹>>ê¨àëü¬Š":²ªìü®¬º?ë못"â/²?¯0€€ë.Ë‹¾ã®«Ëê»ë»úè¼®¯¸¾²»º<¢¢ƒŒÊìò«¯ŽâƒèŽ¼ºè+»ûª¯++ŽÌº«êê¨îª‹+¨Š£Žê¾:Œê£ÿ
+¸®£¯¢èྮ»?ê°þ¬:+ ê¨úÿªà»*8Ï ¸>Š ®ø®˜?»ª¼ªûðËîòúúêë»®þ
+º:ðªÈªêƒ¯¯2ꋈ‹»?¾ú¿¾ˆ+î³>,ꮊ¸®8ª¿Ë;ÿ®‚¬Êú
+㯣.úú˲ˆƒî⻸»€îªÊú¬Ï¬¸îè²/«àú¬þβ¾¾£:þ¾¨¾®º¯êø«ºîÿº*Ž¾ë:â¨0ãëóãèòº»¬£ª‹«ªâ¬ª>+ÿˆî<ãîÈ..ªø;ªê»èƒ¼ú®¯‚¯ê(®/ «º)
+;³úꨋ窱Ž80Š²è®¾ïî.Š*£¸º º¢¼ê®þ¾£àãʪŒò¢¾¬Ž¼/ë¢âŽ+ê‹+»*΢êâ¨ì®ì¬¼Š¨ºÎÌήðªþþ¿¾î»¢¯¢¢è¯
+*ê³¢>¿ª‚+ÊË*¢::¢¸¢üìêªë.+Âúÿ꾺ª:;Žï"¢ª.ŠŽ î(¨»³ïª»Î°ª *Ȫ«ëêúþ²ë/»ãì »Ì«»¸î®+¨²îü°®ª«ì¬‚ü‚þÂúþ*ªºïòò¬
+óÿ(>³²ïëø«.¯ï/¸ êòꪊ®€¬¯«/ȯ¬;¸ûêþª8¨ÿèª#£ú*ë? à;¼¨ì£«ŠÀº¸èãèŽâ²ƒ ¾ï#«¬ã²
+«â‹îî#¢ûª¯Êº;> ì¾ûüΪ2‹øŽ®««ó¬òꢀà«úºë¢î¨«+«²Ã‚;‹Žª+ʺŠ(¬óþÈ‹òû³®ãºò£®ìèŒüº:âÌ¢£» ü¢èòàÿ¨ÿê£ú¼à«‚ûªøîÀ«ë¨2îø2ì¾ú(¸ª‹ *£ºê;è¾:ë»îú¸ûâʺ¾ÀºÂ>ïë¸*¨Š"¬âêþ¢+¾Šã¸‹«Ë/ê ªª‹£ª3+ƒ+;«óËÿû¿ûû¯ÿÿûÿ¿ÿÿºÿïÿïÿ»üÿÿ¾ÿÿû¿¾þÿ껿þïÿÿÿï¨ûûÿþþ¿ïúÿû¯ÿÿ®þÏî¯ûÿ¿ÿÿ¯ÿúÿûÿëïúþÿóëûïþÿº¿þÿþãÿÿþÿÿÿÿúÿÿþÿþï¬þÿþ¿ïïûÿïþÿÿÿ¿þÿÿÿÿÿüÿ¿ÿëþ¿ó¾ÿÎ;ÿ¾ÿ;ïÿûîï»þÿþïúÿþþÿ¯ÿº»¿þïÿÿú뿾ÿþÿÿûÿûþïÿëÿþ¿ÿ¯ª»þÿÿÿï®ïþïÿ¿îþûÿþÿÿãúÿûþü¯¾ÿÿÿÿ»»¿ëïþ¿ÿÿÿÿÿîÿ¿ïÿ¾ÿ¿ÿÿþûûÿÿÿÿÿ¿þÿ»ÿÿþÿúÿïÿüÿ¯ïþûÿúï¿ÿþ¿ÿÿþïÿ¿ÿÿ¿ÿïÿÿûë¿¿ÿ»ÿþ¾þ¯ú«ÿÿÿïûÿòûóïÿ»ÿëûÿïÿ¯ºþþþÿÿþû?:ÿþþ?ïÿþþ¿ÿ»ÿû¿ÿ¿úÿûïÿÿûþÿþïÿ¿ÿËúþþïþÿ￯ï¿úïúûÿ¿ÿÿ¿ÿú¿ïÿÿ¿ÿÿþ¾¿ºëÿï¿ÿ®¿îÏÿÎï¿»®ÿþÿÿ¿ÿÿû»ÿ¿ûþîîÿÿÏÿîÿÿÿÿÊþÿ¿þûÿÿîûÿ¿ïþÿÿºÿþÿ¿þÿÿÿÿÿÿ¾¯ÿÿ»ûë¾ûÿÿûÿÿþ»¿¿»ÿûþîþ¿¿ïÿúÿþûþÿ¾þÿû»ÿûÿﯾûÿÿÿºïþî»ÿ+¿¿ÿ¿ÿëûÿÿûê¯úÿ¿ïÿ?û못ÿ¯ïÿÿî?ÿ?û¿ÿ¿ÿ»¿þÿ¾ÿÿ¾»úûÿÿþÿÿŠÿÿÿÿÿÿóþïïî«;ÿÿÿóïïÿîÿîÿÿë¾»ÿîÿÿûþÿÿÿ¿ÿûêÿûªþÿ¿ÿîÿûÿÿÿºÿþÿ.ÿþ¿ïÿûÿÿþþ¿ÿ»óûÿÿþÿ®ú¿ÿªûï¿û®ïúþ¿ÿÿ¿ÿþÿÿû¯¿úêûûïþÿÿïÿ¾þû¿»ÿÿÿûïûÿûÿÿ¿ÿ³ïÿ¾ïïûþÿïúÿÿûÿîúÿÿþÿÿ¯ûþÿ¿óÿ¾ÿûÿÿÿÿÿþÿÿïú¯îþïÿûÿïÿü¿ÿÿïüÿü»úûþÿ¿¿.úÿûþû¿ÿûÿÿþø¿âÿÿûÿû¯ëúÿûþïî¿ûûû<ÿïÿ¯ÿãûÿÿêÿÿþ«ûûûÿþú?¾ïþ¿ÿüïïþÿëÿþ¯ëÿÿÿÿþ¯®þûþþÿÿïÿÿÿ¯¾ÿëÿï¿ûÿËþÎþîûþú¿ÿûûþï»ÿ»ïïÿÿü¿ÿïï¯ïÿïþïúúþÿ®ÿÿÿÿ¿þÿêÿ¿þÿÿÿïÿ³ÿû»þÿû»þîÿ îÿÿúûûÿ¿þÿûÿÿ¼ÿûîÿÿú¿ÿ¾ÿûþêþïê¿þÿÿ»ûÿ¿ïÿ¯¯Ïïÿ¸ÿûï¯ÿ»ï¿»ÿÿ¿ÿÿ¿â®³ê¯óûË»»¾ê¸®žë®«»¼¬ï°Šêòº8èêê»»þ¯»ÿ?ì¨ê»ìξª«Â¿ó¿º.þÎâ(»¿£êþ®ëº»»ê£("ºû²ëêêüºº¿î®ãÿ¯¾ï»þþê»ëèþú«¬þîü«ï/âúïú®»ï¯þ?ÿþëëüÿ¾«ë¾+òºîŒ+¿®>;.úë*ëªêþþ¯ú¬êþ¾«þº;¿¾ë«ÿºë¿>ûοþëëûøë¼ëûâ«ÿ+ªºüÿ¿îÀŒëü«ª¸êüãëü¯ï£úóº¬ü®¬ÿ¿û뺻®«¯²ºË¯?º‹Ê²¯Ï¯¾ï¿»¯î»ûÿú뾿¿ºþ²¿úüŠú«¯êìâ‹ïÊú«øª¿«ú+ÿûª¯«¿ÿ«‹úë¿ïò꯸ϳ¯º¾þâ£þ>ª®ó¯¢êóïêóÿïï« ú¨úûêÎú:8¸¼;«;ªø?þ¨/ª»º¾ªûøËîÏúîþúï¾¾ÿ˪úþîèûﺯï>úÏê«¿?ÿþ»ÿˆ+ï»»¾º¯®º¯:(ÿï*ÿ®ºŽÂÿ‚ã?»,ûþïû¯Ïþû«»«â®îîë¢Ïè¬ïî¸îʺ«¯þû®ÿî²þ¾«ºÿ¿º¯ú¼»úú¯û¿ûþ>Žþ«ªò¨¸òûûû®ò®»<»ª¯»ªîª¾º¯ÿªÿªëþð.î¿ú»ûºë뫼ê/¿‚ïîì+ê/2ᆵê»ÿøêê‹êï;ªŽ?3Šª²þ‹®¸ïî?î*û¼úºû¢¼êº¾ª*ûû»ú¿â쮫ʋ;¿ˆÎ¢èëþìþìî¾Ë¾»ïÎξð¾úþ¯¾ë»ª¯²¢ø¯+û®ÿê>ûê"¾îË*ªº«ë<ªüþú¾»ÿ+òûÿî¾ÿªº?Ž¾(¢¯/;®¯*î:¾ÿ²ÿº»ï»®«êȲºëêÿþïÿ¸ºê+»ÿîï»Ìëúúÿ¯;ë²®þºîª«ê¼ã"ÿ¾ûþÊúþ:®¾î¯»þîªóû*¼óú¿Ëþ¿>ïÿ/¸¯îúÏâÊËîúì¯ê¿Ïüï¬;úúþþ¯**ªÿª®³?þ«øþàð»¢þþèï믊èÿèøïè®ó²º0®¯»¯ú㲪ëªÿÿþ#ûû«¯êú?>Š¾¾û¼.Ïþ¾‹þŽ/ëþû®úþªˆøûî:ëêïê«+«ºËÂûϯ»*ËþŠèìóúÊ«úꪮëºû3îîü®ìºÿëή«ûèìëèòêÿ¬¿ûÿû® ¿¢ûªìþú¿ë¸2þò³îþú¸¼ê Ž®ëºë»ë¿ºûûÿû¼ÿ³ê»¸ª¾ë>ï«øª¨Ëª«üïþ »¾®ï¾¯‹¯ê¨ÿûë«ú;+»¿»?ÿ늼š>½V©“+°˜“Ïœh§a夊V«
+*|;º&¢á̾˜Šœh,¦ƒ’¦˜i¦Yæé:¦êï
+1¾È¦H¹ÖrÚ›Rî‚»*´"ꂲº¾Éèçø›OŠ*–€«È—¹%*(ªbœ¦`‹C:쩨¯*ꪢ©øòl¸Z¢;úèK²úê⼸ҫî8Ï(vjª˜®Ë¬.VªˆZŽ‚*"oÇšàϸJZƒ*y®b¡®î»›ª<¨#*¢’®™.²0j裖*¥H†‚ªZî•Íú$¨lf¬ã¨(‰ ‘ì¡©!n¼¬Š¨O«†*šÜ±º’ì"^õÊc¡†ÙYAd.Ù¹ë+ŽºŠ:’í˜ÛŠ>.ššãÖÍ( ¨ŒÊî’ˆ£À*#<«ˆè»(û¯Œîꊪë(#*+ª. àúòî*»ø
+ê ªêàî(Šª¿+ú¢/Šb¢ŒêÒª·ž.5—zcm€$|:»:Ûùºë¥’hì;¦*¡>Ÿ}¨Ût«j»‹¦«ž®ù,ÊYÙ¯‹¬‚Šª·sUEâúB2ªŠ³ò¯‹?¾ «#³¸¸ÎýøèDK?þŽ
+Œº"¥¶ê¢Žòrª¯&ÈhìÚŒÛâ¢Z‰(ƒ«¢ž¤®J¢>拪¢ý¥¿«2*"ª
+Ë*"¾®2ª"ハ¨¨€È²àŠ€šÏ(é>ª*2¨"›¢‚€¨à°*ÝE+FÚe¥Khn=>èúgoUë®*•”¥™–«¦ßn¿XíkP¶®}^§Ùq¶–Z7T¾z“꺶µ‹R·½¥Ð£héF-]aGIfŠY:Z–«îcÖ–.3‡¸é„[¥æŠ“,¡P¬t+iËìTUÕ(!¦¨Zî¬Âú¸
+ºëƒªó ¨
+®8®¢«Íê Žƒû
+ªðˆ‚8Š+0;Žª
+ë(º/»®©ŠÎª+"¢£§Ê¸¯Îª/¨‚¼²"2"¸Š
+Š¯®:, ºêªë*ƒ«¼ê«:ª踪º#ªÊ¨
+Œ›ê*®ë¢0ÿªê+î‚"«¶ªâ¯ª#€‚ ¬ò¢«ŽêŒ¨Ž¸šŒîâªÎª0ê'
+»ˆ(Ë:?£ìª:‹8"¢"㳨ªŠ;®è
+è芮¯>ª/Š(üÊÿŠâèºÏò³º®àŠÊ«»î®â‚¯¢ˆë¨ï"êà¬ê(ÎŽ¨ê*¯¯"¢â"û«Ã‹£ê/¢ãèúê2ªþ⊯ë¸Ï« ¢ê¯Î8+:«»8¢.:Â(³¬û‚Ê®®«ë«Î,ªŠŽºìëì+úâèì®®³¬:¬"΢Êï껺Ë㢫 ò«Š ʸþ«»úËãú®žìï¯üÿ8»ÿμï3ûþ¾êÿÿê²Kþ¯î¯¿ÿóï‹û¿ûÿþþ®÷ûû뺿«î»/¸ûÏË¿ÿ¿þêÿï¾¾ïîë«ÿêëËî«ÿû»3ÿ‹ïïúþÿ¯¿îûžªïïÿû®»ÿï¾þïã¿»¾ú;¾¾¿?¯«ûûÿÿïûþ®îû¿«ïþÿûºË²÷ªþÿ«ÿ³¼ÿûûþûÿïºÿÿþºþë¿>ÿ¾º¾ëÿº¿ÿ¿»ïÿïûûþþ¿¾â¯ÿîï»ûþúÿûÿòÿz¯>¿¾Ïÿïþ»ÿ¯¯ÿ¾ïþ»ïªÿÿúïóÿÿÿò¿ÿÿê3ïïïÿ;ûïâ¿ú®ïúûûÿ»ê¼ë»úÿËÿËÿþÿûúŽ»ãïú®¯î¿ûÿ»»ûªÿ¿ø¿ÿûÿãüÿûè÷Šª»2«¾ç¿ïþûþëûÿºŽûꎻû.ÿëÿÿ?ûºóû»û¿ëÿþï﻾¯ï¿ªûãû¾þüï¾ó¿ÿïËËûú¯þþ¿¾¯øûÿ»¯î?®ÿïûª>ëþøÿîúê¾ûÿ®û¿ûÿ®ïÿþ:þãþ¿¾úûîîþþþÿºþÿê¿úì¿»ÿûâúþï¾þ®«‹ó+¯«ÿþ뫾ÿó®þ¬Ïþÿûû¯ûïúþî¿ïÿ¿³þÿÿûúï¿ï¿îª¯ÿºÿ¯þ'¿û«¿¿»Œ¾û»Ïþï¾ÿ;úÿþ«îîÿª³ºë¿ÿûï¿¿¿ïúë¿Ê¾îÏïþËÿÿ¿¡»¯ïë*³þ»ú뫺/úëëëú篮þ¾«»ïú®ûî慠ÿúïïÊîªú»ÿ¯Ê»¾ê»¯ï¾ÿÿ«û쾿ïîþê?ÿÿ;ÿûÒ¿ÿºëþªúû¿ÿº¯ûºÿûîºû¯û¾¿³ÿìÿþÿÿûÿëÿº»ûû¯ûï¯ÿïû®»Ï¿¯«ûú»ÿ».þ¯ûÿ£ëúþ¯:þ¯û¼¼ÿû¯ÿþË¿þïûú¯úºï«ûü²®þ;ªúÿï¿ûÿïâúïþïþ‹úîï¯ÿ«úûþxþïk¯¿?ªºþû¼¬ïþÿÿ?º¯¯ÿÿêûûþ»þþîîþî¿þîïëÿþ®è?¿ïþüúú¯ëïîÿÿÿûÿû®¿ì¿.ûþû»ï¿³»ÿþ¿þï¿ïû¨ÿëºîëïïúîüïþþî¾¾¯ÿú¿îïþ;ûÿ»ÿ¿ªû¿ú¿ïë?ªÿ?û¿ò®®ï²?º¾ëʳ£ÿÿîï¿»ÿ£ï¾ïÿ«ÿ»û«?ïªøÿóÿ¿ÿ/¾ÿ?ø®îûÿ.;ÿ.îï*.úº¨ë¾ïïÿªûºïëþÿ®úï¯ïê¿ûúü¿¾þû®¯¼®¯úóû¿óî³ê+îû¾»«ÿóîûÿÿëþû¿ú¾ãÿþ¿‹ÿêÿó¼ïëÿï¾û¾ïº»¿ëÞûúWýÞû¯ÛמûÚkÞç}姻W¾ûÔÿí{Êú÷þþ¿¢Þ¿Óo茶ۦŸm¶]¦½ûöú¯øýº»æ{½o›ÛŸ_Õú¾îÿ·ÿ¾¾®ûó=¿ôö¿˜Úz»êÖÿº?ÖíõúëŽÛ¶ú~ê?éïêïîãÿéë®{¯^®ˆ*/zï+.¯ë«º¬ëÿ¾ëgkþþ«î»ö«êW.»Zú¾ëëj6ž¯ú‹û_þþaûnêªúܪã¯üîëîï¿Ùò¯ïnï®×ê¥z·¾ÿZãÕ±ºç»óofóþûëù¿«½ýíøo£«Ûº«~親Ÿßªž¡ëÝþ_¥¿þ½·]mgûÝìú²¾¾þß¡›ßÚšúîòŸÛ¼±ïïïû¾»®ÿ¯¾øÿìî«»/¯ë¾úúï¾û¾ªûîîê¾êï¿*ÿúþûþ¾*/êÏïþ®Èìºêøºo¾ßûûž¹êö÷žëòå—jn}ÿ¦Þ{þûþèú˘ù˺¡åžo³êþ÷êýÊÚa¿ÿGºo®êû§úÚâÿЩó2YÝ;þºãþ¿®¦oÝUu.ÎûúþÿŽè¸È¯»ÿ¿êêïÿÿ.꪿wzèªÿúÿëïõ¶+¯Ûº®ÿn¯ê÷;{3šÿ.®_½ûì›ì¿Û÷¢±þ«þ¾¼þ¾îù±åÌìþëþ«þüïîƒúïûîøÎÿ¿ëÿ?.«ú¿š:þ©ÿë»þ³êž®¾ÿýþÙuâvuõn{kéê?+týjUºãû¾Õ×õ×¼·{ú[)x_¶³i[ä™í·×[æWâjÞª‹æÞ¥û^¤¡Ûµß,{ívÉ]md}v¿_Ï^Ö¨»ü×÷êîö¯¹·Z妺Ÿ£ý^£ÖGüi¾«WUÕïýö«Z÷sû¿¿úïþ¬¼þîÿÿ¯úþ뫯øþÿ:ÿÏú®¯»¿ÿúãúÿ®ûîè‹ïú¿úÿîî¾ü®:«¾;ºâ»¿ûº¯þîîï¿þ»ë£êûÿêêÿ®ßîÿ»«+ÈÊþï¿ëª¸¯þû¿¯ÿûÿïš?»³:¾ÿ¿ï(ªÿ»ÿâþþóëᄎºþ¿þ¾úÿ«¯î»òû»ÿ¯þ«úûª>«²«ïªüúÿ»ÿ¾ûê¼³¯ëûëï¯ÿ®þûª©úú²üïþª¯ªâúÊêêúû+úª¾ü¯Ê>¯îªïﻸ¾¯þ>¾²¾û¬¯¬þ«¯£¾ëººÿêúú«®î®®îìâûü¿þ;è®þïûï¾ëû¿ê¿¯³¼¿Š¿è»ëþËúúŽëþòï¾ïûóŠþ¾ûòëºú;¯¾ú¿«®>ûú.¯¯»²>®«þÊ»ï:îû»8þ+øüò¯8ÿ¯¾¼þ¿®»¿ÿî¢þ?¯¾ÿþªû»úꫪÏ껣ˆîúª¿«è».®þûëªâú/¼¾»®¬¨²ê‹»¢¬+ê‹þꪮêê¯ú¾Ì¯®º»þø³¿ÿã?¾ºþëî¿>þïèϺú¿º¯¯î¢®»ïû»*º®»ëüëòË>î︫»ëïëëêòÿªï¯»þïëºûú¾¼Šê»¯¸ï:ú>óïê¯Ë¯ï¾ïî®ê¯£¨ªÿûâë»êꫪ.¯úþúîþ»î<ë«+/þ»þú®º3ê(£/»ì΋‹ûþŽî¯*ª>jëþóï>ª¨£ü¢¯;;þ®®ë¬/ûú¾ºîººú¯î¾>àêë¨Ïøº«â¾³¯«ë¯ÿ²þ:ÿϸ?ûÿ¿.®ºãâÿ(/ëÎëî²³¯Ê«;󿻬îû<ÿ¿Ïÿꪾþº;º¿»?8òÿúî:»ü*þú®îêº:®Ïû¿/þº?ï²£ºÎªë««¯¾.¯/¿;ûÎú:<;Žëÿ‹¾ïúúîï<ê¨î¿«àª£¾ÿÿÿïú«ì¿ëŒøë/®¬/þ¼ÿûûÏ®¿Ã뮳;Î>ƒêþª>¿º¯#ú¯¿¾ÿ
+Êï;²êºïþþ?ÿ¢+<ÿ²«úÿþ¬îò*úê;/þºÌûþëû³¬‹ª£¾³«ïû¾ÏïÎòïÿ»¿«²êþêË»¯þîº:"ïÿ«¯êÌûï‹àªÏ.ûºïê2®»º¢£Ê¬¬üøºþï?Îïþÿ¯è.—¾ëÿï£ÿúê¿ïºì*»ÿ¯þ¿¯ÿþïû°»þþû®ú¾Èº?ª¾û‹ï¸ÿ;û«ê¿þ‹îúãÌú®¾ïüïÏŽúîûþ¾«Ï«êªƒï3˺êþ‹îêû¬¯‹ü:ü«¾ïè컪<¿ª¿ºêîúÀ®¸*ÿû»‹óˆ¿¿ê¯¼¾úûëÿêÏ«»ÿºûè²¾».ºóËû®ï¨ú/ÿ¿ï£î¯+¿ã«êëü¿Îïïî‚þ¯º»ÿ£üê;Ž¯®ú( ¯î¯ûª¯³®ø껾êêÿúû‹¿ãïë¨
+¿Š««ëºŽûÏ>¢°¿î:þ;ÿã£þ®»®âþ»+º«ËÎ ¿ú³»¿îÊúꬮÊúî«8ï;ªëÈï뫾»®î?¯8»³:달»ÿÎ/î¿ìª«úº¾¿¿ªÿθÿúþ«ã¨¾Ïòºþ¯ïÊú«ûì¾â¯úêûðÿ¢ïò®ê,Îî¾î¾ï¯²Îëââó¿èË«óë¿«ãûü꾺þþŠïë¾î»ºûî/ï¸*»ªïÿ¾ú¾»Ê¬Œ³îû¾î¾«ïªÎ¼«¿¼þîëìëêêüîîËó®ª:î«Î².îï¢ëË¿®¿ÿì㢻£üû¾þ¿ëîûú®«ÿîû¯ûÿ¾ûúëþïÿﯻû¾ûèÿï»Êúûþ¯þ¿¢þ¿ãï﫾ÿ®¯î¾þ¢¾ûþú¯øþz»êû¿¯3¯»Ë¯¯úú¿îÿ¿ÿ¾¾®ûó>¿üþ¿¸êú»êþÿº?îîÿú뎿ëºÿú¾ê?ëïêïîãÿêë®»¯¾®ˆ*/:ï+.¯ë«º?¬ëÿ¾ëïëþþ«î»ò«ê;®»úú¾ëëê>¾¯ú«û¿þþãû®¯êªúüªã¯üîëîï¿ëò¯ï®ï®ïê«û¿¾ÿºãó³ºë»ó¯ªóþûëû¿¯«¾ÿîø뺫þ說¯ÿ¯ª®¢ëÿþﯿþ¿¿þ¾ïûÏ®ìú²¾¾þÏ¢»ïʺúîò¯û¼?²ïïïû¾»®ÿ¯¾øÿìî«»/¯ë¾úúï¾û¾ªûîîêþêï¿*ÿúþûþ¾*/êÏÿþ®Èìºêøº¯¾ïÿû¾»êþû®ëòâ‹ê®¿ÿªíûþûþèú˨û˺£ë¾ß³êþÿêÿÊêâ¿ÿ?º/®êû¯úêâÿà«ó2êþ;þºãþ¿®®ïÿé¾.ÿÎûûþÿŽè¸È¯»ÿ¿êêïÿÿ.ê«¿¿úèªÿúÿëßûº«¯ÿº®ÿ®¯êó;û3ªÿ*.®¿¾ûì«ì¿ûÿ¢¿³þ«þ¾¼þ¾îø³êÌìþëþ«þüïîƒúïûîøÎÿ¿ëÿ?.«ú¿º:þ¨ÿëûþ³î¾®¾ÿÿ￯þë¾ê¾/ºøþûëêê?+¸þê+ºãû¾ÿëû®ë¼» ûú«+ø¿¾³êûìªï»ÿëêÿâêþª‹êî¯ûû¿ï,{îòê¾ï ¾º¿¿Ïü>ÿÿêîþﺻú论¯ãÿþ£Îü«¾«+Žûïÿú«úÿ³û¿¿úïþ¬¼þîÿÿ¯úþ﫯øþÿ:ÿÏú®¯»¿ÿúãïÌ»úÿ®ûîè‹ïú¿úÿîî¾ü®:«¾;ºâ»¿ûº¯þîîï¿þ»ë£êûÿêêÿ®ïîÿ»«+èÊþï¿ëªø¯þû¿¯ÿûÿïª?»³:¾ÿ¿ï(ªÿ»ÿâþþóëᄎºþ¿þ¾úÿ«î»òû»ÿ¯þ«úûª>«²«ïªüúÿ»ÿ¾ûê¼³¯ëûëï¯ÿ®þûª«úú²üïþª¯ªâúÊêêúû+úª¾ü¯Ê>¯îªïïÿ»¸¾¯þ>¾²¾û¬¯¬þ«/£¾ëººÿêúú«®þ®®îìâûü¿þ;è®þïûï¾ëû¿ê¿¯³¼¿Š¿è»ëþËúúŽëþòï¾ïûóŠþ¾ûòëºú;¯¾ú¿«®>ûú.¯¯»²>®«þÊ»ï:îû»8þ+øüò¯8ÿ¯¾¼ÿ¿®»¿ÿî¿ëîûú®«ÿîû¯ûÿ¾ûúëþïÿﯻû¾ûèÿï»Êúûþ¯þ¿¢þ¿ãï﫾ÿ®¯î¾þ¢¾ûþú¯øþº»êû¿¯3¯»Ë¯¯úú¿îÿ¿ÿ¾¾®ûó>¿üþ¿¸êú»êþÿº?îîýú뎿ëºÿú¾ê?ëïêïîãÿêë®»¯¾®ˆ*/:ï+.¯ë«º¿¬ëÿ¾ëïëþþ«î»ò«ê;®»úú¾ëëê>¾¯ú‹û¿þþãû®¯êªúøªã¯üîëîï¿ëâ¯ï®ï®ïê«û¿¾ÿºãó³ºë»ó¯ªóþûëû¿¯«¾ÿîø뺫þ說¯ÿ¯ª®¢ëÿþﯿþ¿¿þ¾ïûϬìú²¾¾þÏ¢»ïʺúîò¯û¼?²ïïïû¾»®ÿ¯¾øÿìî«»/¯ë¾úúï¾û¾ªûîîêþêï¿*ÿúþûþ¾*/êÏÿþ®Èìºêøº¯¾ïÿû¾»êþû®ëòâ‹ê®¿ÿªîûþûþèú˨û˺£ë¾ï³êþÿêÿÊêâ¿ÿ?º/®êû¯úêâÿà«ó2êþ;þºãþ¿®®ïÿë¾.ÿÎûûþÿŽè¸È¯»ÿ¿êêïÿÿ.ê«¿¿úèªÿúÿëïûº«¯ÿº®ÿ®¯êó;û3ªÿ*.®¿¾ûì«ì¿ûÿ¢¿³þ«þ¾¼þ¾îø³êÈìþëþ«þüïíƒúïûîøÎÿ¿ëÿ?.«ú¿º:þ¨ÿëûþ³î¾®¾ÿÿ￯þë¾ê¾/ºøþûëêê?+¸þê+ºãû¾ÿëû®ë¾» ûú«+ø¿¾³êûìªï»ÿëêÿâêþ*‹êî¯ûû¿ï,»îòê¾ï ¾º¿¿Ïü>ÿÿêîþﺻú论¯ãÿþ£Îü«¾«+Žûïþú«úÿ³û¿¿úïþ¬¼þîÿÿ¯úþ﫯øþÿ:ÿÏú®¯»¿ÿúãïÌ»úÿ®ûîè‹ïú¿úîî¾ü®:«¾;ºâ»¿ûº¯þîîï¿þ»ë£êûÿêêÿ®ïîÿ»«+èÊþï»ëªø¯þû¿¯ÿûÿïª?»³:¾ÿ¿ï(ªÿ»ÿâþþóëᄎºþ¿þ¾úÿ«î»òû»ÿ¯þ«úûª>«²«ïªüúÿ»ÿ¾ûê¼³¯ëûëï¯ÿ®þûª«úú²üïþª¯ªâúÊêêúû+úª¾ü¯Ê>¯îªïïÿ»¸¾¯þ>¾²¾û¬¯¬þ«/£¾ëººÿêúú«®þ®®îìâûü¿þ;è®þïûï¾ëû¿ê¿¯³¼¿Š¿è»ëþËúúŽëþòï¾ïûóŠþ¾óòëºú;¯¾ú¿«®>ûú.¯¯»²>®«þÊ»ï:îû»8þ+øüò¯8ÿ¯¾¼ÿ¿®»¿ÿª>¯®¢£+°¨#‚ÏŽ(3£ ««+*®<;ª*¢à
+Œ¿ºˆ¬(!ªƒ¢¢¨¢ª‹îê*ªêê2¾È
+ˆ¢ºÌ°Ê:0².î‚;(¸"ꂲº¯ÊÊÏøë:Š*¢€«È³» *(ºâ¬Š ‹ƒ:쨨«*ꮢªèò쨪¢»úè˲úê༸‹Â«®8Ϩú*
+ª¨®ËŽ¬/ʨˆ*Ž‚¨*¯Ãªà˸ŠÊÃ*,Žâ ªîº£ª<¸£*¢¢®º.²0ê(£*ª¬®‚Êê,ºèª¬ã¨(Š ¢ì¢ª"*¬ü,Š¨«ªªºÌ°º²®ì#>¨Š£ Šø
+‚¨.³»«Žº‚:0ïˆ8?ûŽ>.ª+ëâÎ* ¨ŒÊî²€«â*«>«ˆè»(û¯Žîꊪê(#*+:. òúòî*»ø
+êjêàê8Šª¿+êª/‚¢¢0ŒŠê¨ªë¾º:㌀ª2<:»:ëò»ê¯,‚¸ì;¢+¨>¿ï¨£Ë°«ê»« «.®/ú,Î+ËÊ.‹¬ƒŠª³;*ƒâê2.¨#ò¯‹?¾Ž€«+p¨¸îþø耫?þ‚
+ú"£ºú Žò²ª+.È(Ìê¬ê⢀‹(«¸£¢® ¯ÊŒ¢ªê‹ªÂ¢ÿ«?«:*"ªË*2¾®²:"¯ºª¨¨ ÈòèŠÀªËªë:ª*2¬£º¢ƒ€¬¨àð+þÎ+Ê꾯‹è.>>èúë/ø꾊è¬*«º‹º¿®¿¨î+ »®¿«ª°¾ˆª?ˆ¾:ƒªº¾(³Š¢»¾Šªàãˆê
.¯€¯Ëª‚ê:ú¢«Î£ÊŠ€.3‹¨êÌ‹«îŠ³,¢¬:ø#¨Ëì캨(ª¨*ˆîŒ°Àª¸
+ºëƒÊú ª
+®8®¢¯Ëú ΃³
+ªðè‚8Š.2;Žª
+ë(ú/»ª«‚Ϫ+*¢ƒªÊ¸/Ϊ/¨‚¼²"º"¸Š
+ê¯.:(¢®Êªë¢*ƒ¯¸ê+:Âê踪º#ªÊ¨
+ˆ#«âªŽëÊ¢0ÿª"ê+îª"+º*âîª#€"‚ ¬ò¢«ŽêŽ¨Š¸ŠŒîªΪ0ê#Š¯ˆ(‹ª>£¬ª:8"¢¢ãƒ¨ª®Š+®è
+ªèªª¯>ª?Š,üÊÿ‚èºò³º®àŠÊ««ì®Â‚¯ªˆë ÿ"ê°¬ê(ÎŽ¨Ê*¯¯²ªâ"³¯Ã‹£ê/¢ëèøê2ªþꊯë¸Î« ºê/î:*:«»8¢.:Â(³ŒûŠª®«ëªÎ¨ŽŠÌºþëì+êÂèì®Î³¬:¬"ŽâÊï
+ê‹»ºË㢫 ಪÊàŠª¿îîûî¾#ÿïû¯ÿÿ¾ûºóþ¯ÿÏî»û¿ûøïÿûÎêúÿ¯ú?ªïÿëîÿ¯ê¾ÿ*¾ïþ»¯úþº»êú¾¿ó¯úËï®Èú¿Îÿ¯ÿºþþ;ó¾¯ð¿¯ºâúºêüÿº?î®ÿú﮻調ê¾Î/ëÿîîîâÿîëž»¯¾îª(/¨Ï2ª¯ï¯º¿¬ïÿ>‹ëêúþ¯þ#ò»û:«¿ºê¾êëú>þ¯ú‹ë®¾¾ûû®¯êú®ìªë«ü®êîïúÊâ¯ïªî¾¯®ëû»¾ÿ*ëãòº«ÿ»¯*óüú»û¯/¯¸ÿïøß»‹«ú«êꪺ¯ÿ«.ªÂ«þ¿Ï+¾þ¾¿?¾¾ïÿÏ®ìúò¾¾ì¯Ê«þªª>û‹;òî¯ï³þû¯ÿ¯¾úÿü¼£»/¾ëúúúêºû¾ºûïîîÿê®®Š¾*ÿðîºü¾ª/úÏïþ®ìì:îþ¿¿¾Îÿú¾êâëú®âòª«ëª¿ÿîÎû¿ûúèúËèÿ˺»ë¾Ï³êþ¿ìûÊââ¿ÿ?>¿®î»ïûè£ÿâªó:î¿.¾ªãþ¿"«¯ï뾪¿îÏÿûþþ¬ºÈŠ¾ÿ¯þþoÿÿ/ë«¿¿úì®ÿþÿïïïºëëþºªû®¿ªó;û³ª³2*ë»þÿ¸«ì¿ûÿ⿳þëþþïþ¾þ¨³êêì¼ëþ®þüîÎËêëóþøÎï¿ïÿ¿/£ÿ?º¾¾ºÿèúï«î³¯ÿÿî믯þ»¿ê¾?¯òþ»êèÊ;+ªþ㮺Ãû¿ÿûû®ë¬¯ ëî««¸®¾²êûìÿúâÿêúþ£Šâïþû«ï¬ªî±ó¾ïŽþª¾¯Î/Ψ»ü>ÿ¾êïúξ;ú켺ïãÿþ£ïü«þ¯/®»ïþâ«;ÿ+û¿¿ºëúŽì¼ºîﯯúþ¯¯«è¿;ûºÿªúþº»ÿúÎïîúêÿ¾úîèŠëº¿þÿêïîþ¾+»ú+ªêþÿûë¯ÿîïû?û¯ïëêûÿîèÿïïï¿»«.èêúï»ï"ð¯þÿû/ÿûþÿê¿»³¾¾ë¿Ï úúþó»Î¯ººº¾¿þ®úÿº¯î²ëÿ¿ú¯û«úó¾þªº«ïªîºÿ¿îîûü£®ëûëþ¯ÿ¯þóë®úòº¼ïþºïªêê‚îîúÿ(ú®îü®Ê¾+îŠï¯¿¿¸þï¾¾®²«ú¬¯¾ë«‹ã:«;ºÿúþú«îþª®¿îðûþ¾þ¾º¾þïóïþªû¿è¿Ï»ú¯®¾è»Êþëó¸Žïÿóî¼îûŽû®þºÿûþú³¯?þº‹¾>ÿó./ÿ»º¯¼Êîî»ÿº®ó»
+þ«øüû¿8þ¯:¼ÿ¿Ïî£ïÿ¯þ‹¿þ¯ÿ¾Î¾îï;¬ÿ¸ûÿ®ð¯¨ÿþþë¯ÿïêëû?ïúï«¿¿ûïþ¿þÿÿÿï¾ÿûüë®úþïû¿ÿ¿¿®?ï¾ÿïï¿¿òºëïþ¿¿ÿî¿»ÿ¿ÿêïÿ»ÿ¿¯¿þÿªêÿÿ«û¿¿ÿûþîû»¯¿þó»>ﺿë¯ëÿþþïûÿºî¿û¯Ìî¿ó+ë뿯ÿ»ûû»ÿÿÿï¯ÿïÿ»ë¿úºÿëûÿûºÿ‹ãþþÿÿþº¿«þïïûþ¿»êï?¿ûûï»þû¿ûÿËïúÿ/¿ÿÏ»Ïþ»ÿÿ/¯ïºÿþ³ï¯ÿúþïºûÿû¾®ÿÿþ³ÿïÿþ»û¬»ûû¯ÿþûÿÿûúøï»ÿÿÿ¿ëÿþ»ÿúþÿëÿëïºþ¿û·óïï.ÿ¿û«ïÿ»ûÿÿëêþ®¾¿»ÿÿëëÿûÿÿ®úÿ¯¾¿êúÏû»îþë¯ÿ/û¾ë󷿯»óî®ÿ»¿¿ÿ¿¿êëÿþîìÿþ»»ûÿÏÏëþ¿ÿÿ?.¾ÿþÿÿ»¯þ+Îÿïÿ¾ºï®ðÿϺêºÿþþûÿëþ¿Ïïÿ¾ÿëò¿Ïúÿìêþþïÿºÿÿúÿºþ¼¿ÿûúûþïúþ¯»Ëò뿪ÿûïûÿóûþ¾üî>¿û»ïëÿ>¿ÿÿï¿¿ïîÿÿÿûî¯î¿î¾þÿºÿ¿¯;?þ¯¿¯ÿήûºÿîÿÿ¿¿úÿþê¾þã»»«ë¯ïûÿ·>û懲¯ÊïïûïÿÏþ¿â»¿þ«ªº»¾û«ãïû®ÿëÿïï¿ûþï¯ÿ¾ÿî¿ÿû¾ûÿ¯û«ÿ¾îû㮾û¿ÿï¾¾¯î»û¯þÿ¯úþ»ÿÿîþú¿ÿ¿ºþÿËþþúïïûªû»ÿ¾¯ûº¯ûþú?ûÿþÿëÿêÿú?ÿ¿û»ïººÿëÿûû¿¯þ¿þ»û¿ÿ¬ÿû«¿¿3ìÿûÿûîûþ»¸ÿ¯ëþþÿû¿ïþë¿ÿêúú¿ò«ï³ûÿ¾ïî;Ê¿þëÿëûïêê¯ÿºþê®ïþ¯ÿÏûûþ»þïϾ»¿®¨ûøüî¾üÿî?û¿¯ÿï¾ûì¯êóü?¾êîïþê¾îþÿ¯»?ÿîj»«üü¾úÿûÿîÿ¿ûûÿ¿îÿî?/ûë?ÿƒ¿ú¿þ¯¿þû®ûÿþºþÿ¿ÿ®þïúº¼þº¯<ó¿þïÿ»ûÿë»ÿîÿûêþþ뻪;;ë¿óïîÿ¯ÿÿ¾ïúòãÿûîê¿»ÿï﾿ÿïÿúû»?¯ûþÿãëÿﯯÿÿëþ¯ú¯*ûÿ/ÿ¿»¾þû¨û¾ïûÿóëªúë¼ÿÿú¿.îë¿ïúºÿ«þÿî*¼îÿûóÿ»ÿꋯþþ¾«ÿòÏûûûúþÿ>ÿ¾úóÿ¿¯ûúÿû¼ë»¿¯¼ûÿ?»û»ìëî)VÞò?ÓÖ£šz›†iµ4ûWìîÖª)jªêäïñ¾«âšªr3ö¨¤AæY¤ë¶úŽêɸ«¶n±©Ö`šÛßZ•+¾¾>¦ú²ü²«®‰¨ç¦¨ØßxÿèÖ/«Š”©¥û‹ÂH¦kˆkàË ª¢ó¿‚ûáê‹{²^¸²¢p+>ª*:«ª’Šûƒþ*Gp¢ëë¢çêïV¨²Z³ºêëj¦
+þËâ[ÊèIºJ麫¾žÈˆªÌ:«î¸Ùï+¢`‚(”*…o÷þêZ¾•¡òæ¯âJf+þ
+ëáûݺ‰¸hû+›‹®~à´
+š©®ÉïÙëR…*ê=ö]iG*¿¨ê¿ú‹ž)šžšš²‚š’:¡ªà/ò(ƒ*˪Šïø»*²î(ΰ(¿úÿ»Ï¾âèêü
+è˪ªî(¾ºˆ¿Šê®£«òú"ꃯˆ®j/܈.œ Ðë²åÖ{zq¢¦ßs/³+ïèÉ‹¼õ›sªƒêæêéúi.˜f‚k:¤¯šëì˜ë:YÑ®:>2¢«+çkÙUu¾*cº3¨ŽÈ
+ÿ£ªÿ쮨¨Žª» :«vzèÈ*ª«ïë¥Ä« š®ºªj¾ª¦ºj«èÞˆº^©âªšþúš&ºL髪ëóΨ ý©5ðÀ+Îëº(è˪઎ú»Î+‹?ŽŠ¢¢Ûºª©ïê¨îêêÞ<¬®±À‹ëuìFÛe%zxJ©Â«èf9{Uü‹ê•–¥‘×€7˜zÂX)z\§òM^¦Ù-¦–Z&V¨xš>¨ö›…ëZ†¹˜¥Ÿ®‚
+îìȬ
+êê²úî‚Èëè¬:.ª¨«®ê²+»¾³/"¨ÎªÂÊè<îàü
+ŠªðÊûˆâ¿û«8¨¾»«îª³>ª*Š»*ð0ªËŠÎº¢ Œ²«ºú²ë®þ*³ð¿Ãˆ ï
+«êê£ >¢¾ªªÊŠ ŠøŽê ®¨èˆªŽºëºŠëº¢º¢º*Ï®üª>üºÂàîªî®ãú"®»ªŽò+ﻂ£¾.̬2;*¿¨¸‹>º;<ªŠê»®êþþžëÿ©VíÞìïÖÚ³’{Ó¤Iå§?Wûþ׳ák®¶ÿ9ÿ/꓾sú¶Ï·Ûi·Y÷¹ë÷î.ò©ëþ¶{éýÖ~“ÚÚ_•îª*ûæ¾»ú®*ª¢·çîÚšbúúÔ¾âê×ùþ+ƒkžöjúoª Éþøú2®ª½üæo‹^¼úþÿ~®üú®¿ëêÚþ¿.ë¯vr»øóê/縯Wû¾_ÿ¨úû~æÚªÿ‹ªSþïa¾o©ÿûïÞ¿Ìë²¾ºãÿ¬Ýêïëo(îÖ¾…o¶¿øR»•é«ç¿ûkGê·¾¿»Ý®‰©ýþz¯®Ú»îûô¸˜Ê’ÉþÙã^¥¿ú½çÑ]}f꙽¿àþ¯ûþÚùÞžÓ˜þòÜžã–é먫»Œþ¯êîªûû;²ëëî>ïúúê¯ó>ïëî¨ÿËŽŽ®¯;«ÿê*ûúÎî;¿êòüÿ¾»¾þ¯€¯£këߺþžÉ臨*êµ×jsmË·ž~Žó¯úëïÚ¹îþýåš«®#·Ïíïœiï˜fþj¯üªÄªŸÿ«ý®¢]®îÿêî»·Ue.ãsÊï?úüêþëëüóúø¿ªÊ+Êü¾®ËWs냾ή.%¦««›ïúŽoþ¬÷²lþžº›û[½º>ßóÿ“·ênÉîêîûþ¶®¬á9åò絛®²î»¾óÎêúüú»,¯¿«¯óï«:þ˜ ‹©þê³Ãîß¿üº©;Ίªu¿fÚe¥rzzÉ«¿êw9~U/˺ȕ—åÑÖ‚·ž~¯Z©oZ¶ÿm[¶Ýé$Ö_´WŠzÛûÿ¤’õ«Z¦¹›µœïL=tíYiFiF+Zï^Ö—Ö¦¯ê¶¾ù¦ZµÇþÚÎý^ÊÖgë}ºúVU•‹ý÷û_竿뻋󪿮êî«Êª¾ïê®üÿë¨þ³úï®»î¨îŽ<¼ûÿŠ»Ïºûÿ»ë*+ºû+;øú+®°ÿ¾ÿêü¾ïûëèúûþÏ¿ê¾¾ÿ»¨ê«ÏÿÊê¾úúÿ¸þ¿ÿ¯º+Ï¿û²üóûþž«º£ú»óþîûî.ø»¿,ó¨î®¿/«óºªë"»úÿ¯¯Ëº¾®¢¿¿î¯þÿîê¾Ïò®»»î>ÊŠî¯þú¿ê®Ïïî»»ªþÿ¹.¼ºþÿ¿ë»»:ÿªÿ«ë¾ŠêèèøîãÊûúëïÏÿª³ê®ûÿŠû‹ëï.ú¯ï¾««î¿Î®ÿƒ«¼¿ºï/>ªê¾.ûûªúªêº³.þóïúûªë;î‹¿ÿ(ÿîî¨;¾¢¿/êûóï¼ê®¿ª>ë*Îþ0¼¼;ëâ¿°¸¢îûèû»¯îú«ø¨ú‹ÿ¿³ºþø¨²ƒ>ºªû»»Èêïîÿ®þþþžëÿ©VíÞìïÖÚ»’{Ó¤I姿Wûþ׳ák®¶ÿ9ÿ/듾sú¶Ï·Ûi÷Y÷¹ë÷î®ú©ëþ¶{éýÖ~“ÚÚ_•îª:ûç¾»ú®*ª²·çîÚšjúêÔ¾âê×ùþ;ƒkžöjúoª éþúú2®ª½üÞo‹^¼ºþÿ~®¼ú®¿ëêÛþ¿.ë¿vr»üóî/縯Wÿ¾_ÿ¨úû~æÚªÿ‹êSþïa¾o©ÿûïÞ¿Ìï²¾ºãÿìÝêïëo(îÖ¾…o¶¿øR»•é«ç¿û{G껾¿»Ý®‰©ýþz¯®Úûþûö¼ÜÊ’ÉþÝã^å¿ú½çÑ]}f♽¿âþ¿ûþÚùÞžÓ˜þòÜžã–é몫¿Œþ¯êîªûû;²ïëî>ïúúê¯ó>ïëî¨ÿËŽŽ®¯?«ÿê*ûúÎî;¿êòüÿ¾»¾þ£këߺþžÉï·¶.êµ×jsmë·ž~Žó¯úëïÚ¹îþýåš«®+·Ïíïœiï˜fþj¯üêĪŸÿ«ý®¢]®îÿêî»·Ue.âsÊï?úüêþëëþ³úø¿ªÊ+Êü¾®Ëws냾Ï®.%¦««›ïúŽoþ¬÷²lþžº›û[½º>ßãÿ“·ênéîêîûþ¶®¬Ñ9åòﺯ®òóîêúüú»,¯¿«¯óÿ«>þ˜ ‹©þê³Ãîß¿þº©;Ίªu¿fÚe¥rzzÉ«¿îw9~U¯ËºÈ•—åÑÖ‚·Ÿ~¯ZéoZ¶ÿm[¶Ýé$Ö_´WŠzÛûÿ¤’õ«Z¦¹›µœïL=víYiFiF+Zï^Ö—Ö¦¯ê¶¾ù¦ZµÇþÚÎý^êÖgë}¾úVU•‹ý÷û_çë¿ë»‹óª¿®êî«Ê®þïê®üÿë¨þ»úïî»î¨îŽ>¼ûÿ‹»ïºûÿ»ë*+ºû+;øú+®°ÿ¾ÿêü¾ïûëèúûþÏ¿ê¾¾ÿ»¨ê«ÏÿÊê¾úúÿºþ¿ÿ¯º+Ï¿û²üóûþž«º£ú»óþîûî.ø»¿<ó¬î®¿/«óºªë"»úÿ¯¯Ëº¾î¢¿¿î¯þÿîê¾Ïò®»»î>Ίî¯þú¿ê®Ïïî»»ªÿû¹.¼ºþÿ¿ë»»ºÿªÿ«ë¾ŠúèèøîãÊûúëïÏÿª³ê®ûÿŠû‹ëï.ú¯ï¾««ïÿήÿƒ«¼¿ºï/>ªê¾.ûûªúªêº³.þóïúûªë;î‹¿ÿ8ÿîî¨;¾¢¿/êûûï¼êª¿ª>ë*Îþ0¼¼;ëâ¿°¸¢îûèû»¯îú«ø¨ú‹ÿ¿³úþø¨²ƒ>ºªû»»Èêïîÿ®þÿÿ¿ëÿ¿ÿÿïîÿïÿÊ¿òÿóïïþ¿ÿÿÿþûûï¿/þþÿ»ÿÿïã¾;ûÿòï:¿ÿïûïû»ÿÿþ®þºûÿ¿ÿëþÿþëëï/¿ÿ»¿ÿïþ¿ú¯«¿®þûÿþëþÿþþî¿þîÿûÿÿ¿ûû¿þÿúï«*îþÿú>ÿÿÿÿþï»ÿ¼ÿþÿÿþüúÿ¿ëúÿÿÿ?ëÿ¿úÿþóï?ïÿÿûÿÿÿÿþÿÿ¿ëÿÿÿ¯úûÿÿãþïïÿÿïþÿìÿò¿ÿïÿþþîïûÿëïþþêï¿ÿþûÿïë»ÿÿÿÿëÿûÿÿþûþïï®ÿþ¾¯¯úûþÿûÿüî¯þëûÏÿÿûÿÿÿÿ¿ÿÏÿÿêþÿÿÿÿÿûÿúÿþ¾óû¯ÿúü¯ë¾ïï®ë¿þþÿëîªÿÿ;²ÿûÿ¿ÿþþþïû¿ÿÿîêÿëïþï¿ÿÿÿû¯ÿþÎï¿ÿþûþÿÿ¿þÿÿÿ¿¿ûëÿ¾þîçïû¿¾îî¿ïîûïû¿¾þ¿û¿ÿûïþûÿþÿïëÿïÿ¯ÿïÿïüÿÿîøÿÿï¿üþÈîïÿï¾ÿ¿úÿ«¿îÿÿîÿ»ÿÿþû®¿û³ÿÿ¿ÿþúþûëÿûþþÿºî¿îþþÿï»ÿûÿ¾ïÏ﮼êë«»ïûŸÿþ®ÿþìþ¯¾ÿïû¯ÿúÿïëÿ³¿ÿïþïûîûÿ¾þ¬ÿ»ûû￯ïûûîêúÿþ¿¯ÿ¿¯¿ÿÿë¿þüãïÿêï»ïîïÿþþï»ÿªû¾»¿ïþªïÿº¾ïïÿÿû¿ÿÿ¯ïÿëÿ¯þúþª¿ÿ¾¿úëÿêúÿÿûÿÿï¿þïúï¾þûÿÿëûÿûúî¾ÿû¿ïïþýüûªîþïûÿÿÎïÿ¾¿¿ûë¿ÿú¿úªÿ¾ïÿÿïÿîêûÿû¾ÿû¿ú¿¿ÿÿûÿÿÿ¿ûÿ«ÿ¯ÿ¿ÿÿïë¿þïï®þÿÿ¼ÿ¿úïïÿþªïÏÿþÿÿËÿÿ¾ÿÿ»ÿ*¿ÿû¯;ÿþ/þúÿ¿ÿËþþ¿ÿÿëêûÿþÿÿú¾þÿ¿¼êûïÿþ¿ÿïÿþûúÿÿþ¿ÿÿþ¿ïÿÿóÿÿÿþ¿ë»£ûÿûþÿÿïÿüÿ¿¿ó¾ÿ¾ÿÿ¯ó»®ëë»ûÿ¿ïÿÿ¿þÿÿï¾ïú®ûÿîÿîêÿïþúÿûïÏÿþ»ÿÿÿÿû.üúþÿ¿ÿ¿»þÿïÿÿïÿîÿøúüþûëÿúûÿÿÿ¾ûï¿¿ûÿŠÿ¯ïï¯ú¯ï¿ÿ»ÿÿï¾ÿãÿþ¿»ÿÿ¾þîþÿÿûûÿúî»ÿ.þÿÿÿû¾ï;þ»ÿÿÿÿïþü»¾úÿÿûÿÿÿüûÿÿëÿïºþÿ;þü¿ÿó¿üþâÿÿÿþÿÿÿîúïÿ¿êûïÿÿ¿þÿÿ¾²¯¾¿»ÿ»¿úêÿÿÿ¿þúꈣÿª.¦Êˆ«ê‚;¢+㬋®óꈲâ+
+Ž.¯#¿.##¼ã²²Ê»²Šç‹»8꣨ˆúªë¾¾º+ŒÎ.‚Èê¢êŠ8úê¼£à¢*(ˆ0*Èìʺªªª„¾àŠªºþ+«.øêèë* ªêúú"¨ª»ì‚¯®¨¸þ+þŒ¨è.¿Êèିê¯:2«¬Óê+/°®»ÿ°«þ¨ªª¾ªú€®‹ª³úë£:ïªÿû¯>ºˆ®¢.ºâ+躢îë.(Ìκ ¯º¿¸à«ÊŠê>û«ƒ¢;«(;¨«¾¢«®òú*ºúúÌ*(ˆ‚‹ú°Ãþ¢ºèª«ÂŽÿîŠ/âú¿:ê*ªÎ*ó(
+¾ò°ªâ:¨+Šª¿Œê¯âèªëû*ïêî>ªòêê«ò(ÌëΈ»Š
+Ž(«?«ú *ëºÎÎ+¿ââüÿ>³¬ê« ƒâ‹¾ªìªÇºº8.â*ë*³î뫾þ
+¢®òƒ¯:8Ìêÿª¯‹
+³Ž¯.¼ªŠˆ®þê/üª€Šú‹*ï® ê+Š®ê®ª®³¾?ºû.â3Àë;úìèî 모à¿*ˆ"Š¬ºŠ»²ã ¾Ï€*.(¨Š‹»ïúŽª¸¨ÿ²¨Žªª«‚ª"¾*:‹¢ë3ºª®ê®êî󾾪¨¢3«¢ª®¨ò®¢ºóîêºüº»(.¿£¨òŠ>ê0 ‹£ìÈŽ³Ãºªª2Š ³¾ª¨¢ª2²²Ëª³Ì³ øð¯Ê2À®Ê 2ŠŠ£¸®â«ÈŠ¢î««Š¾ê(ü°îŠ¸ªúú¨¢¯ªª¢"«; Έ>.ìè*‚ŠÂ+ˆëŒ.ê ³£úª¬â¢ªº*¨(˺úÎêìèúªª¾¾ú¢83‹ûþ뾫‹ª«¸‚ó*¿.èè«Ê¬ð®êŽèÿê¨ü»úïî+Î êˆ*<껋+¯ªû껪*ºó*:ø¢+¨°¿.¾âÈ®êëëÈò£ì¿ŠºŽÿ£¨êƒÏÿ꯼ˆªºòòÿª¼«¿®º+‹¿û2è³óüª«
+£ú3³®®ºî*ø»¾<Â,ꮃ/Šó°*ã"»ºþª/ʸ¾î‚?¸®è®îê*Ï"®³ºª*ÊŠªêø»ªªÎï"³ƒ¨ÿ»*(¼:þ»;Ë«« û¨ëªëªˆ°¨àèÊ£€êêëï‹ï¨£ŠªŽ*þˆò
+Êï.²®Ï>£ËïÊ.¯ƒ‹Œ¾ºë+*¨â®"º³*úª¨‚³.ìãϺ«¢ã*¨Š¯»8ÿêŽ +ª€»êúêÎ<È¢¿"<ë"À®08°++à« ¸¢Žêƒà곯꣨¨¨Šú¯³òªè¨¢ƒ*²*û;³Àê«èº®®úêÌ¿ÿë.®êªª"껿¯+Kï꪿ó뎻òûê/««¿.3?þïûº¿êûûºªë«¿ü꣪úûïï¾îº?®Î/ªìúïâêθúú¾ãêò¾¨ê2.Èîî:ª««®þâ«*¾þ¯¯®úèîÿ¾ú»«úþ㬪º¬ƒ¿®ë¸ÿ/þŽ«î.ÿî®â¬»Êî¯ú;«®ÿþë¿°î¿ï°£þªªªþ¾úˆ®ë¯úúë¿;ÿºþû¿?º«ª¯®ºò+î»óþï.<îÏ»*ºú¾ºè«£îÎê>û««¢?£*¿ï¬ ú«¿ãûþûþ;ºúòîª:¬Š»ú°Ëþâ;èê«òþïî/âú¿>ê/ªÏ»ÿ,ª®û³úúû¸?ë¿ÿŽï®úúÿ«ûîŽîÎþ¾®êëëºú¬ÌËﯻ¯"8ï?£ø¨ºë»ÿëêþï>ó®úª€ïÃ꯾ëî¯ï+¾úº?óªû;»þïëÿÿŠêîòŠ¿û<Ìëﺨ¾«(«³®ï>¿ªŠ/ªüúÿ«»«¯úª«ïî*®¿Ê¿êî»®û¾?«ÿ¿Žêÿ€ëºúÎîë(ÿîªâ¿¯ª «®»ªÿ²ê ÿï°:¿«¾¾ïÿÿîûû³»ºû« ®²¾/>«ºë¿ú¢¾ë¾îÿë¾ÿ«û¢¿¯ª¯êþ¸:¿êû»ÿÿ¿ü»û¸.ÿóè⯮¾ë³¼û»îî¬ûãû¿¿£«ºªŠ®¨û²ºªûº¢û󫺳λ øðÿº2èþ˪³ïê£úïëÿȯ«î«¯Š¾ú¨þ¿ªþ뺮ûú¼ª¯®³£«? î¨?/ïì¿£‹¢/Èë¾<êëóãþ¾îâÊê¿ÿ¨ªëúø®êþþúª®ÿ¼þâ>£Ë¿ÿîþ«‹î¯¸ê󺿮èî»îîó¾úûêÿêëüûÿïþ+Ϻú²*>껿+¯ëûêÿŠÿ‹ºûºþøë󪺿®¾:ãÊîêëÿîø£®¿ë‹¿ãËÿïÿëHª»ûïþªþê¿®;»«¿û>è3óÿÊ¿¾ïþ;»¯®ºþ*û»þ¼Ì®îïƒ/êÿÈ»û:ÿ¾¾ê?ªüþÿ¿¨.Ϫ®ªò«ï:ú»ú»*믮»ëþ»®ªþï#ûƒ¨ï»>ú¿?ÿ»ºËëï¢û¸ï¨ûº«ð¯êëËë¨êïïï‹ïꫪêÎ*þþòªêÿ¾»þᆰËïꫯ¯«¾þü«+«ªó¯"»».㯺Š³ÿîâÏ»¯ãóîªÎ«¿8ÿø«¯ëŠº/ÎûêÎ?Ì¢¿:<û«‚¾ø:³«+ìë#²¿Žêƒâ겯ûË»¨Ï¾¬ªú¯óóªèêïã«òŽ»¿²Êÿ«è¾î¯ºêÚ*»©V-š¯®–“»ÐjÛ¦iåæ¬Vòê–òáo"Ž&¨a/.;¼ŸC®Çªß·açY·9⧫¸ú©/;6j Ž×n’ÜÒX•ªƒ¬°æ¯ûòâj¨¡ª*¤èØ›k«»”ºê¯–¹5®«8j^¤lŒjê
+¡Êîïªþê©øÂ~¯_¨®¾*n¬ëìþ’®«(ªïvnêìóúû7¾®Wë°ZôŠ¬¾~§²¸Ž¿«[‹óiªo‰óú¯:û.«*Êè/ë‘ãú¯n¨ì—»5N·¯ÿPê•É¨æºëjG *Žª9*ÙŠ-©«Ë»¾¾#zþç¬Ø©.’¹þ˜‹_¥ûþ‰¶ÙYmt¯™©ú‹¿*Š)ßšš*º²Øú—©/ªê¿êª«û«¬«‹è*« º>¨ó«êûÊê¬ïŒÏû#«®8¿¯ªÿ«»*²ï£¯ò¨ª¯.º¿8«øï£sËšîì˜é¯7¦¾ê%×Jbyó¦Þ|¨¾-;ƒ«-૱µ˜£*;·ž½ªyª›wþj;¾£¦úßé®èYÙ
+ï³ë®»º¶™Uu,âsàºëÊìèî ëî
+«ûÿªj³ŠŽ«.Žfn£ þî/¾%´ª¯“î»®~ªª¾ó|ŠÜº›Š¾Z‰(›ºû“·*í®îÍ«¿ë«øé)…«®º.ª»¨â:ò«ë«ºª»êºà貫*¸êîî©ìì®»ë‚¡º ¨0™e¾vœe%jjz骳¬g¡zU‹ë"ã•Ô5™Ö†›h®Z@Z&îm[Æù´Ö_4Vª~žú®´Ú%.Zæ!5ÐÊBfù]kcIF/ZÿX—Ž~ú–צ,Êä¯9¦\¥ç+ÒÎéZíÖz*qïWUùöë^·ªª ®‚ø*¾úÊ;ê¾òŽ»ïŠÿþ鲿»þÊîˆûȻ꯿ë¬äâê󮪫2ü.¼¿ƒŒ®«¾¯ºâóê®òûÛÎþ¢üï»û®ï£ŠªÃËÿz›º,«¸û£¯¿º£»ª®+‹rò²ê²óªšëª+¾£ú®¯¸î*®>ø¼Â&ê¿ã¬» º³.®:Žþ®èð¾üª6ð¨Îè®®«‹¯{ï£>®
+¯‹º£ú몮ÊÏ#«ƒ¼û¾)¨¿:ï»+®ÏŠªË²¯¾ïè/ò¯àì‹¢ ªª«¯Ž¯î£‹ŒþÎó(θ/2º®¾£ëªË¾¯«Êì>ºŽª+¨²ï"ªººúÊ»ê®èë‚ꪢê+ûº¯ê‚ê/ú ;.ì>.:ÿ«ì®*Àê¢:²®*ú;*º¢Ìì«úú³®óÃ#«ï*(¢;¯»3ºÈ(‹ãêº.²;Ê‚û¯ê®ª®¿ÿÿ®û¿ÿ¿ÿÿþïþûÿþþûïþúÿÿÿþÿÿûÿ¿»þþ¸ûÿÿÿ뾯«ïó¯ÿû¿ÿÿÿÿ»ÿÿÿ¾ÿ¾?»¿ïËÿïþëÿÿ¾¿¿³¯úÿÿÿûï«ÿºï¿¿þêÿÿÿÿîûÿÿÿûÿ¯ÿüþ¯¯ÿ®îë+ëþïï¾ÿÿïûÞþÿ¿¾ïþþïþÿÿþ¾þÿ¯ÿû:«ÿÿîþüûÿÿÿÿÿûëÿÿúïÿÿþû»ÿï¿û¿¿ûïþïïóþïþ¿ÿ¿ûûïÞÿÿÿïû¿ÿïþÿÿ»þ»¯ÿûþïë¾ïûßÿëïêÿÿþëúïÿ®ÿëï¿¿»¿ëÿÿïþþ¯ÿ¿û¿ÿÿ¿ÿ¿ÿÿÿÿï»ÿ¿ÿÿþëÿ¯ÿê¿ú¿ÿ¾3û¿ÿ»üîûÿïÿ¾ûÿû¿ûÿ¯ì¿þ»¿²þ¾ÿÿ¿ÿÿÏÿÿÿìÏÿ£ÿþÿ¿ïþÿÿ¿¾úï?ÿïþº«¯ï¾ÿ?ÿÿÿ»ûëûþÿìûÿ»¯¿þî¿ïÎëºó»þþþÿ>¿ûëîïÿ¿³ûûÿûÿ¿ÿïüë¾ÿÿúûÿÿ¯û¾ûê¯ïûïÿû¿úÿþ?ï»ûîÿºûÿ¿®¾¾êóÿþÿîþòþïëÿûÿÿÿúÿÿîÿïÿﻯ»ÿþþïÿ¿º»¾»îûŸÿïî¾û¾úþúÿïÿïêøïÿÿÿ»ÿÿÿÿîÿîÿÿÿûþÿëìÿþ¿/ïÿèû¿ú«ïÿûî¿ïºîÿÿû¿ÿþüïïïÿþÿ»ÿî¯ÿþëï¿ûêûº¯¿ÿïî¯ÿî¾ÿÿÿ¿ÿÿ¿ÿ‹ÿïïÿÿ¾ûþº¿ïî¿îÿ¿ûþÿÿûÿÿÿÿû¯¾¯¿ÿÿÿ¯ÿÿº¿þî¿»úÿïêþùúÿ«ÿÿïÿÿÿÊïï¾þþÿïÿîú¿ºîÿÿÿ¿ëïÿÿïûÿ»óÏïÿû~ÿÿÿûÿÿÿ¿ðïëüïÿ¯ÿï»ûÿÿï¿ÿ¾ÿÿîó¿»þËîþÎÿÏÿïÿï¿ÿüüêÿóÿ«ÿ»þ¯ÿÿ﬿ÿþÿÿëÿÿ¿ûÿ«îÿþþÿÿÿÿ¾ÿ¿ÿºûëÿþ»¿ÿÿüû«¿ÿÿ»ûûþ¯ïóúóÿþÿ«ÿûû+ÿïÿþÿúïÿ®þúÿûªÿ¿ÿü¯»»þ¿îîû¿ÿîþó¿ü¿ºûúþþÿÿ¯ïÿÿïû¿þÿ¿ïþÿ»ûÿ«ïïÿÿïÿÿûþû¾ÿúïÿ¿þÿêÿÿÿÿ¿ÿþ¿ÿÿþü¿þë»ú»ÿþ¿ÿûï¯ÿïÿÏÿ¾ïº¿ú¿¾¿ÿ»ÿºïþÿûþÿ¿û¾þ¿»¾ÿÿïþã¾úÏÿî®úÿþÿû¾î»ûûûÿÿïïúþ¿ÿ»¿ÿÿþ¿þþ?¿ÿïïîºþû»þþïþÿ?ûÿâþþÿþÿÿþÿû¯ÿÿ«»ë¿ï¿ÿÿë¿ëÿÿ¿¿»»î»ûÿÿïºÿ¿ïÿ®óÿÿ¿ÿÿþïîûÿþÿÿÿÿúÿ¿ÿþÿÿÿÿ¿»ÿÿºÿÿ¿ÿ뿯¯ïó¿ÿû¿ÿÿûÿ»ÿÿÿ¿þ¿?»ÿïïÿïþûÿÿ¾¿¿ó¯úÿÿÿûïïÿ»ï¿¿ÿêÿÿÿÿïûþûÿû¿/ÿøþï¯ÿ¯îë«ëþïÿþÿ¿ïûîþÿ¿¾ïþþïþÿÿþ¾þÿ¯ÿûº«ÿÿîþüûÿÿÿÿ¿ûëÿÿºïÿÿþ»»ÿïÿû¿¿ûïÿÿïóîþþÿÿ¿ÿ»ïîÿÿÿïû¿ïÿúÿÿºü»¯ÿûþÿÿ¾ïÿïÿïïêÿÿþëúïÿîÿ믿¿ºÿëÿÿï¾þ¯ÿ¿ÿÿÿÿ¿ÿ?ÿÿÿÿÿÿÿ»ÿÿþëÿïÿê¿û¿ÿþ?û¿ÿ»þþûÿÿû¿ûÿú¾ûÿ¯î¿þû¿²þþÿÿ¿ÿÿïÿÿÿüÏû³ÿþÿ>ïÿÿÿÿ¾»ï;ÿëÿº«®ïþÿ?ÿÿÿ»ïêûÿÿîûÿ¿ÿ¿þîÿïÎëºû»ÿÿþÿ¿¿ÿëîïÿ¿³ûÿïûÿÿÿïüë¿ÿÿûûÿÿ¯û¾ûú»¿ûïÿû¿ÿÿþ?ï»ûïÿ¾ûÿ¿®¿úêÿÿÿÿîþòþïëÿû»ÿÿúÿÿëÿïÿ￯¿ÿþÿ¯ïÿÿ»¾þúÿÿê¾û¾ûþûÿïÿïëøïÿïÿ³ÿÿÿÿîÿþÿÿÿûÿÿïìÿþÿ¿ïÿèû¿þ«ïÿûî?ïúîÿÿû¿ÿþþÿ¯ÿÿÿÿûÿï¯ÿÿëï¿ûúÿº¯»ÿïî»ïî¾ÿÿï¿ÿÿ¿ûËÿïÿÿÿ¾ÿÿþ¿ïï¿ïÿ¿ÿþÿÿÿûÿÿÿû¿¿¯ÿÿÿÿ¿ÿÿº¿ÿþ¿»þÿïúÿû»ÿ»ÿÿÿÿÿÿÊÿ¯¾þþ¿ïÿþþÿ»þÿÿû¿ëÿÿÿÿûÿ»òÏïÿøþÿÿÿûÿÿÿ¿ðïïüûÿïÿï»ÿþÿÿ¿û¿ÿÿîó¿»þëîÿîûÿÿÿÿï»ÿøüêÿóÿ«þ»þ¿ÿÿïü¿ÿþÿÿëÿÿÿûÿ¿îÿþþ¿þÿÿ¾ÿ¿ÿªúëûþ»ÿÿÿþÿ«¿ÿÿúëûÿ¯ïóúûÿþÿëÿëÿ¿ÿïÿþÿúþï®þòÿûªÿ¿ÿü¯»»ü¿îîû¾ÿîþóÿþ¿úûÿþ¼ÿÿÿïûÿïÿ¿úÿ¿¯þÿ»ûÿ¯ïïþÿï¿ÿóþû¾ÿþïÿ¿þÿê¿ÿÿÿ¿ÿþ¿ÿþ¿ÿ¿þû»û»þî¾ÿûïïÿïÿïÿ¾ÿº?ÿÿ¾ÿÿ»ÿºÿþÿ¿þÿÿÿÿþÿ»>ÿÿï¾ë¾úïÿìþúÿþÿûþþ»ÿ¿þÿÿïïûþ¿ÿ¿¿ÿÿþ¿þÿ?¿ÿþïî¾þû»ÿÿïþÿ?ûÿãîþÿþÿÿþÿÿ¯ÿÿû¿û¿ï¿ÿÿëþëÿÿ¿ÿ»ÿì»ÿÿÿïºÿúêÊ»¿ê.¯ª¯¯"¿«¿â+ᆱïêì®óêªúòÿª/Ï«/®;?þïë¾Ïúÿ»»¢ï‹¿þâ««úûëï¿þº>Žë.ªìòªúêÏüºï¯ûúò¾¨êºªèê«»®¾ê¯®¿¼þ«?«®ð¬îûîþ»Ëþÿëþê»ü뿯ï뾿+þ®ëîŽïïþ⮯îþïº?ëïûþû?¾þ¿ÿ°êþª¬¾ÿ«ú¸®ÿûËûú«ÿ«ÿ»¿?ºû®¯®êú/ë³óþ﮸ëÿÿèë¯îëú¾»ª¯°?Žª;>ÿª®¾«¿ëûþ»þ;ºþûî꺻®Šûþ¸ÊÿêûþŠ¾úÿïü¯‹‹?úë¿?Ê>ªïëþ®ªºú³êþªº/ëî¿ïêûû¿ëûê®ë®»¿¨óëêûúê¬ï¯ÿû¿«¯8ÿ¿«ÿ¯û«»ÿΣ¿óîþÿ>û¿ø«øïëûï¾ÿì»ï¯¿ºª¿û«ëûºþÿêÿ¾ª¾î»‹¿;>àèÿ¸¬¿«*»³®¿¾ª»ª¿úú?ÿ«»¿¯ÿ*ÿïîîëûÊÿûï¿»ÿ¾¿ûþú®û¿à»ëëîîï ÿî«ûÿ¯ª³«Ž».®îþë ÿïø;¾®þîïûÿ¿þ¾º»ÿû¾þ¿«ª¾:¯/«ºûï»*?î¿îï«¿ë¯ûê?¯«¯úþ»»ÿîºûÿû«¾»û¸úÿò貯ª¸ë³þþºìî®ÿëÿ¿¿»ª²ú¨¾8ïûþ¾¬¿¾*ûûëª³ì« úøÿë2ó¿ü»¬ãÏŠ«ºîë®À®/ʾú¼þ¿ºþê¾®úþ<ú¯®«ó£¯?àꫯ¯ÿî¿£‹â/¿þ«®ÿû£ÿ¾,ëêï¿¿¬Žë«úîëêþþú¾¾¿ÿ뾫ûþïþ»ªê¯®ªû:¾¬úê¿î¾ò®ûïËÿþû¾ÿÿÿþ*ïºûø».ê¿ÿë¯ëûêÿ®þ«ºú¾¼¿£ïî«¿¯ºúóêîûûÿïþ£þï»ûïïãŠÿËïÿ»ïú,«»ÿû뿮¯»«¾û¾ê³³þŠÿ®ÿ¾³ú¯¯¾þ*ÿ?þ¼Ê¿êÿ㯮ÿè»ó?¿>Îþ¿êüþÿê¿ø®Ïë®®û«ï;ÿ«þ¯
+ïûºëþëú>êÏ#»Ã¼ÿ¿/ê¿?ÿ»£¯Ï¯ªË²¯þïê¯ò¯êïË«(î¯ï¯¯ïþþóªîþï:úïþ£ëï뿯ïË쾮ϫ«ìóï"º»/ûÿú›ûÿîë﻾Ãûîªî/ûº¿ú‹ë¯úˆ».îºúî¿îºï»ü¿¯Âîê;³þ+úû.º¿îî‹ûú³¯ó˳«ï¾¬»»¾û3ºìª¯ãêú®ú¿ëÊÿ¯ê¾ï®ïû?ëϺêâ«ìûÿ⯋¯ûªþî;ÿãº.¾·þîúû¿¬êúÎú¯³ü¢?¿"Žê°ï¿ú¸Ïîêèêªúúº8ë¿ãïë¯îþóï#ª«î?꯿ºþ¯ûûʿ쨿ïûêêÎËêºËîþ¿»»¾?û¼ú»ë»®¾«¿ºÊ«ìºëªêêã<"ûêªê¿ãüÿ¾:¯úú¿®..ÊËËŽ¿®ÿþ³ºƒþ¾¯²Îü긮¯¾"¸>ëºîê(ÿ¨ë>ïúúì¾>èþ»+ú¬ïÿì∿®üºëªî꺸¯îû®Ë꯾®ë¸ª¼®‹ÏãþÊ¿ûïÿ¸ëþÊ뺯ëÎ+»î*Š:¿âüÿü»þ êþËë<þïûúªþï;‹»úú«ºøú»û¨üûþû?ëëÿºÎ¯¾º>.º:㻳2>ëë¿î«¸Êÿþ®ÿ¯¿/ëêòþªÊë뻾®¿®/¿¿¯èøþÿ®ªêº>¾»<>£«Ëãìÿúþú?¿¾ï¨ìþïÎÿ«êëþ¾ÿ¼ú««êÎü®þú¼ûŽ¾ÿ;ÿ+þ.ŽëªÊ¯Î«¨ãë믌¯®*:¿¿ëÿªªûê®þºøú³þ®¯ï+«ÿëªþϯ«Î¯øŸ¿®¯Ëº¯¾î¿Ãêúëþ¬êêüªþÊ:«û»ëŠ®ü*ëîóþª¾ê»ú«¾Î®¬¨èúêïûªŠ¿/îºë‹»ÿ¢ªÿ¯ã«ºï«êò®ÿ®ºo¯ï«ø®ÿû뮪¯¯û¨¯ë¯þûþ®ðÿïîúþú»ë»ë¿«òãê¾þªË¿
+âÿúÿúª««ë«úâºïþþﯺþîÿŠ«êîü¾ëþîûþò‹¯ÿâ¢ã+¿îú®î/òþªºËîÏò;?‹úø¯;¾³¯ûª¯òþ«ÿ¢ó+»Î«¯îú¨¨ºˆ¢:¯ê¨ª»ÿú»¯ÿºòº Šîû;¿ª»«ºþ«ò»¯þ¿þü‹«ªïÎ?﮼¨²ËïÃꮺ¾«»®ºª¾¸,î¾úãêï?þºãê¿î¯êú¾¯®®¯ï®ºüã¼*¾ì¿+ÿ¢ú¯ã?ÿ/À¯ûóú¿ìò¢ëÿ¯âë/Ê‹ªê?û:ÿ¾ú¯¼þê*®âîÿ¼ø󎼪*ºþ>²üª¼¯¯³û»¼ú²®î£²ºê¾Ïû‹ï«âÿ²ëï¾úÿ¯¿¯²þ¾*¼þþ»ÿ¢º®ë;Ïëï£ò¿ø»ê:Žºª?ûêïÿ®ê¿î*þúëü¿Îú¨¯º¿þãÊîþ.¯¾«ÿΪûûþþë:ÿêþòî;îêêªû««þ¿ë®ú®ªê«êîïþŽ>þꮾþê°úï®Ë«¨Ì뻿¸®?®ûîú»þŽ¨î¯ªêúï뻿þ>¿«¯ÿëÿ«¿û¯ïþ¿ÿúìîÿë¾þþÿ»¯¯ïë¯þ;¿þÿï½Ïþÿ»»ªïÏ¿þú¯»úûëï¿ÿþ>Ïû®ºþûîþûïþþÿÿûûóÿ¾úº«ìþï¿û¯¿¯¿ÿ¯®¿¿ÿï¿»¯öüîÿîþ»ûþÿïþÿ»ÿÛ¿¿ïëÿ¿+ÿ®ëîïïïþú¯ÿïþïº?ïïûþû?ÿþÿÿòëþþ®¾ÿ§ÿ¾®ÿ¯ÿËûû«ÿïÿ»¿?ºû¾¯¯ïþ/ë³ûþÿ¾ûîÏ»ûëÿÿîï¿þîú¾¿ª¿²¿¯ê¿¾ÿê¿ïûÿûþ;ºþûîïöû¾ïÿÿºïÿûûþÊþúÿûþ¯ïË?ÿëÿ?Ë>»ÿëþ¯þ»þóûþ¯¿/ëî¿ÿëÿûû¿ïÿú®ÿ¾ûû¸ûïïûþê¬ï¯ÿû¿»¿ºÿÿ¿ÿ¿ÿûÿÿÎïÿû®ÿÿ¿ûÿû»þÿïûï¾ÿüûÿ¯ÿ»þ¿ÿ«ëû¿ÿÿïÿ¾»¾þû«¿?:îëÿºþ¿ïºÿû®¿¿ë¿«ŽÏ¿ÿÿÿÿ¿¿ÿÿÿ¯ÿïÿþëûêÿûï¿»ÿþ¿ûþúïÿ¿ú»ëëîþï0ÿûÿ¿~û¿Žû.¾ïþû¾ÿïþÿ¾ÿÿîïûÿ¿ß¾º»ÿÿ¾ÿ¿ïû¾þï¯ûûþûïÿ??þ¿ÿï«¿ûÿû¯¯ÿþû¿ÿîºÿÿÿ»¿¿ÿûúÿúø¾¯îÿûûÿÿ»ìîîÿûÿ¿ÿû®ûúº¾ºýûÿÿ¬ÿÿ/ûûÿêóú«àûýÿû»ó¿üÿ®ãÿÎëºþû®à¯¯î¿¿Ë¾þþþ¿ûÿþ¾¾þþ¿ÿ¯îëó»ÿ¿ãê»ÿïÿï¿»ïûÿêÿþ¿ÿÿÿóÿ¼ÿêï¿¿®û«þÿëþþþþ¾¾ÿÿï¾k/óþïþ¿®â¿îºÿ?þ¿úûÿÿ¿ò¾ÿïËÿþÿþÿÿÿÿ¯û»ÿøï¿î¿ÿï¿ïÿêÿ¾þ¯þúþ¼¿«ïþÿ¿«ºúûë¯ûÿÿïÿ«þïÿ¯ÿïÿë¾ÿëÿÿ»ïú>»ûÿÿïÿ¾ï¿þïÿ»þÿ¿ï»¿þ‹ÿ¯ÿ¾»ÿ¯¯¾ûûÿ?þÿú¿ëÿãÿ®ÿú¿£?ÿ?ÿþ¿îÿÿÿï¿ø¯ï뮿û«ï?ÿ»þ¯ëïÿúëþûû¿ú¯3»Ïþÿ¿¿êÿ¿ÿ¿«¯Ï¯ëûû¯þïëÿú¿ûïë¿úî¯ÿï¿ïþïïÿ¼¯þÿû¿îþÿºþïþû¯ëïû¿¯ÿëî¾ïÿïëþûï󾻿ÿÿúûÿÿïï￾ãûîûþ¯ûÿÿû«ûïúìûîÿ¾úîÿîûï»þ¿¿òïï»»þ?úû®ûÿþÿ¯ûþûÿóËû¯ÿÿ¿ÿ»þÿ3»îþïûëÿ¿ÿ¿ëûÿ¯û¾ï®ÿïÛî3½WùÛ»ÿß×Ûþߟç}õ÷?Wÿ¿×ÿýn»ÿ÷ÿýú®¸ß¯›ë§ÿÞ·ß}·Y¶¹ÿ÷ÿ?Ƚ¼ó÷~ýûÖkŸÛÞ_Õÿû¿û·ãûÿÿþÿý¿û·ÿÓßoÿÿ×ÿïó×¥»ÿûÛ÷~ÿoûîûûûîú¿íÿþþ_ÿ»ªï{¿¿û¾¾ïïÛëÿÿú¾Füò»øïçï¾Wþï_¿ï»ÿ¦¯ÿÿ»û_¿ïmê~ÍÿêêÚ«ÿû¾»ûÿîŠïûÿk¯»×¿å·¿Ã[¿ù»÷þ¯{fúëûêùþÝó½ùûº¿úÜïÿ~ÿæ¿ÞŸ¹ûßíîŸÿ_¥ÿþýæÙ]}gÿÝñ»¾ï¾ÿ»ÛñÚßßÚÿ¾ïÞßûÖýúÿ»ÿêºÿïïûþÿÿúÿïïïîÌïÿ«ÿÿïûêï»ûü«ÿŽÿ¿ÿÿªþ¾ÿúïûÿòïìû¾þÿûþûïK*ÞûÿŸ¹¿÷öŸþÿõ×{yêwßÿþÿ»ÿëßýÿû¹õÞzïÿë¦ïùïÛy¯¯Ûfÿ{ïêÿ·úž¯ïßý«¿]Ý¿þ¿¯»úï§ÝUuë¿ïë¯þûîüú¿?úïÏûûºûw~ÿÿþê«üïõ÷¾ÿž»3ëoúèïï~ÿßëŸÿ¿_ùûþŸîþ›÷¿z1ïÿ®ïêïÿÿ½íåèÿïêïï¼ûïîÿᆰÿ¿¯ïÿÿïïÿ¿ëúÞ®*½ÿïÿÿ³ÿÛÿÿ¿í¿ÿþÏ™uïwÛuõo~z=û¯¯vùoUïúÿ.•×åÙ×»÷ß{¿_½{_¶ÿm_öÝýÇ×[÷Wÿ{ߎÿ÷Ÿõë_¤ßåߣýt9]{~}wÿ_îZ×¾ªþ×–öÿî·ëåö[õ÷þœû¹_ÿ×nó}¾¿VU×ÿý÷«^÷ÿ¿û¾î»ûúÿþÿÏ¿«¯ÿ»»¯¸ë¿þêÿûÿûÿþ+¾ÿÿ¿Žû¿ó¾¾¾ÿúëìÿ¾¿ª,þúþúïúÿª¾¿ï®¾ïìÿþÿ¾øÿÿþÿ?ÿÎúêûoÛ«óâÿïûêòÏþÿ«ò¯ß¼®«þûïïÞ+ÿÿïÎÿþÿ²»»ÿû¾ÿŽ¿ÿïûÿèþ¯®òøÿ®ÿÏÿãúúÿïþþ¾ÿ»ÿªÿ»ÿÿËû¿¯û¿ÿ¿îëûï¾ÿ¾>ûºþù®þúþï¯ï»»þïú«;¯ÿïú¿û¿þï¿«»êïºÿúèüÿÿïû?¿?¿;Ïïÿÿ¿¿ú¿ÿïÿþÿÿ¿¿ÿ¯î﮻￿þÿêÿþþÿþº¿þêÿûþﯾ¿¿ÿïûÿÿþÿ¿ÿÿÿê¿ÿÿÿÿ¾;ïÿþÿºÿ¿üÿþïûú®¯ÿ¾è¿ÿÿÿÿï¼ëúÿþ¿®ìÿ¾»úûû¿þÿÿêÿû>Îï¿ïúº?úÎòãï¯ìòþ®ûº;ª»ªë².ú».òîúû:¬«òÏøoú¼©¾ï3Žêꢼâï¯î¨î»¿ë¬+ë꺷ÿÿ«ïªŽþ¾ï¢¾+.?««»êþ¯«¿ˆºø®ÿʳìªîïú®Ë訮«ºø?ûþ¾»è?‹ºº¿ºÎ»<ºîþúΫ¾ªúëº9»ª«¯ª¿úê½Þ/>ê»Ã誯ª¾þûâ‚÷þo²È¼Š¼¾ú¿ø®ê¾ê®ªªï>ªúþ̼.èþûëºìîó®Ê¼¯êüþþêËûÚº®äë¾ïâ¾ò«¾®¾ŒËÏ2úï‚«ó«ûî꾪/Ê:¬ÿÏ£;ª/Š,¯¢ø¿ø«ºÂÊþëî:îîëêËþ.;Ï»ëê*¯à¾ÿú¨ü¸?ºª«ªû»««¿ú¸®ª:»¿»"¬þ«¾Ïþ¼àº¸ï«û®ú>¿/ïì»ÿêÂë¿ÿº®¾ÿ³»îï¨î츾Šº*#£»£ã®ü¾Âê«ÿîŽëê®ÿþÿ®ºê¯ïúþü«£/º¾¨îúÿ¼ø ûÿã¿»þ¢ŽúèÏ>óêûêŒÿø/º£¿³ÿîêûïèÀ‹ú<ÿúîúðþë/ï껫ªîŽ¯«Šîì›»Žïª¨ûº+¾è¾ÃJ»îþìëºþîêÊî»;¿ûÿ®úûïòÿªºë«û£¾ê*.êîïîî뻢~/ê»Ên¾ÿãûæ®2²¸®
+®âªï>꯫ÿ¿«ªÊ» ûË®ê®ì»j¯«¿¸«Žîð‹þ¿ìþþºïó»ã?®ò3ºò¿¢¿Î¨Ï ®úªû«Ãšúúè¿þºî¿¾þêùÎ;ú®üºê®«»ü»¯‹¿òƒ«;®þ®þ¿úü®¢»»¾Ïòë¿ë|ì¯3þ³¯»¾®óÿºïºûëû»ë®þê®ûϪ¸‹¯¢ˆ:þú«ÿÿ¸Ê¢²ˆèï«®»ë¯«êÊú¯ëþ»¯ê«®û¯¾ÿ²¯ÿ¢³ëïÃÿÿº,¢ˆþººÿº¬î¸ºï¿®.¼>Îú¾êþïû¾ë®®ïŽ¾:»®»î¢¯ªúþ««ÿîΞÃ>ó;òïúú¤¯»îâúï«+ã®;¨/ïê²:»óÊî¸ÿ誼êþî¨úÿήÂ;¾Ï>²þëþï£û»¾ú"üìó¸þþ«ïûèïûª®êÿªþóÿ«¼ïª¸¯*¯ÿÿ»ëª:þëòËî¿*¢êþð/êú¢¾£¾¿âª.¾ÿ?îªþúëú»îúªïºÿ¯â‚¿üÏ«º»úÌ꣪¼¾ë;¿Ìêê»ïê.«®úÏ»î¿è«è®ê;ªîï»þÿ¯þì».¾®û8¿ã¾ë¯ì￯¸Ž«êè¾»þκºë¾ï øêÈ;þî,.º«?®‹¯ª+ïü«Šªèòʪêºûª*.Ê«®¯»+úž‹¾ï0ßò;«î«¯îò"«â¿ë¯¿úª>ŽË*¨¬âêº.˨¸ï®üò⨪ª*츨»¨‹²(ºè¯®º¼®«<+¯²êŠïȪ£ÊŒ¯ó¿ë«àË;¯«ª®»*:è㮋®ªù¸¬«¨®ï³«ÎÊÿã;¾þ¯ë°êúªŒ¾¼£¢¨ŽÿûËò+«×»²»¿>úë®ïªÊâ/û³ãú+ª¸¬»;Œâ¿ÿªªïîŠî¾ª®¯«?®k*/úŽ®ê¯«Ëó>2î
+²þ÷쮪».
+»þºÊþªú®Ê¿øÿ󸯋Œêë¿:Š>/ïê:®*º"óʾ¦º/çî¿«ª‹»«ËËꞪ(¨¸¶óªKúºê¬ˆnÿë««ê8¹ƒ¯ë«úª»¢ã
+ã.3».û?8«Šî¢¿ê¾ÿŽ»«¿¯¿¨¿ª¯ëʺ¸ÿÊþ®ˆª®îª>*ø«º®¿·»£³¯¾«»ªª«¾þꫯ«º+‹ë+ûê®âªŠîóë¯;î²ï»,û¬ë¿ ûúênìî þî®»ÿ¾©û‹Ž«.ÿ®ªè ÿ?ü«¾ú¿îëûîÿ¾x»;º»
+‹ì»«Š¾:Ï&£šëû³ª/î¨Ìÿ¨;òªúê<.+Šûþ¸:ïê:ÿâ6£ú"º¸êºÂð:ª¶¾‹²¾î²âîŽûëÿž>« òº º8è뺺Œ¿¼(ú«ê.²èk¨¸¸ë¯²ó¿ü3œãŽ‚‹¨ÌˮȪŠ®º¼ò¿2¯ªÎªú|<ê.›ó££²à¯ûê¿c‹Ê*ªþ®?Îÿº ÷¾lêêî:¿¾Žªë滪þ¼ê¾:Ú꾫+ãîï⨎(Î:¯€ºŠºèþò¾ëêÚû¾ëº¿®¿ê
+«ªû¢«:îÿ¿ë,êóÊã*º«:»Šþóƒî./¾«¸¾ãâ¬òâþﬢ<Ê«Šó¯ûŠ»Ëïë²î,®£ú«ë¿¾£+ªïªª»óþºº«êŠë®º¿³ÿª»²æ
+¯¾j¼Ê¯Ê¿âŠ*ï ¯#¾¯.¯ü¾ªúÿþ*¿ð®ËªŽ¾ÿ‡¯;ï©.>*ïú²²¾êê:âÏ¢ªÃ¸ë®/úƒ?ï»3¬«Šªî³/¿ê¨«ð/¢ïŠ è먿«êþª/ˈ*ºîâ¨î¼ïºú®þ£Êº«¾‹¯Šàîîãê¢è³î"Ž¨¼ûêë¢îŠëúªªîûªÿúËÊ,ꨳ
+¾°®Œ»îkëªø¨*‚«î+óû+Ê»*º³èŠ£»Ê#ªó‹³¯ïº,£ú¾³#ºÈª»êò.»ÿÈ
+ÿ{e¾ª¯ï¿ÿïÿïÿúþÿïþ»ÿÿûïþûþÿÿÿÿï¿ÿÿþ¿ÿÿëÿÿÿÿÿÿûÿÿÿþÿþÿþ¿ÿÿÿÿ®ÿÿÿÿêûïî¿ÿÿ¾ÿÿÿ?ÿÿëÿûÿÿÿÿÿïÿÿïÿïûÿÿÿÿ¿ïû¿ÿ¿ÿûÿïúÿÿûÿ¿ÿ»ÿÿÿ¿ÿ¿îþïÿïÿúêëïÿïÿÿÿîÿÿÿÿïÿÿþÿûûþû¿ÿ¿ëþþÿ¿û¿ÿÿëûÿ¿ÿ÷ÿÿÿ¾ûÿû¯ÿÿú¿ï¿ûïÿÿÿÿþÿ¿ÿ¿ÿ¿ïÿÿÿÿþïÿ¿ÿûÿÿÿû?ÿ¿ûþÿÿÿûÿÿþÿûÿÿÿëþÿÿÿÿÿÿï¿¿ÿûþïÿÿÿûÿÿ£ÿÿÿÿûÿþÿÿþ¿ÿÿï¾ÿÿÿÿÿÿ»ÿ¿ÿÿÿïÿºï¿ÿÿú¯ÿÿ¾ÿûÿú¿ÿÿÿÿÿÿ÷¿¿ÿÿÿïûÿÿþÿÿÿÿûûÿ¿¯ÿÿÿÿÿÿþþþÿÿÿëïÿÿÿïÿïþûûÿÿÿïûïÿÿ¿ÿÿÿ¯ÿÿÿÿÿÿÿÿÿÿÿ¯ÿÿÿÿÿþÿÿþþïÿþÿÿÿÿÿïþþûÿÿÿúÿÿÿú¾ÿÿþûÿþÿÿþÿÿ»ÿÿïÿ¿ÿÿ¿ÿÿÿ¯¿ÿ¿ÿÿûïÿÿ¿ûþ¿ÿÿÿûûÿÿúÿÿÿû¯ÿûÿÿ»ÿþïûÿÿÿÿÿÿÿÿÿþÿ¿ÿÿÿ¿¿þ¯ÿÿÿÿûò¿úÿ¯ÿîÿÿÿÿþ¿ÿîÿïÿÿÿÿÿÿÿëÿþï¿ÿÿþÿûÿÏÿÿÿ¿ÿÿÏþþÿïÿÿÿïÿÿÿÿþÿÿÿÿûÿ¿ÿÿûÿÿÿÿÿÿÿÿÿÿï¿ÿÿ¿ÿÿÿÿ¿þþÿÿÿîÿÿÿÿûÿ?ÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿ¿ïÿÿëÿÿïïÿ¿ÿÿû¿ÿëûûÿï¯ÿÿÿÿ¿ÿÿûÿÿûï¿ÿû¿ïÿÏûÿþ¿ýÿû¾îºÿþþïÿÿÿ¿þïÿ¿¿þ¿û¯»þÿÿ¿ÿÿÿþÿÿÿÿ¿ÿîÿïÿÿÿÿÿÿÿïÿÿÿÿÿïÿÿ¿ÿÿÿûÿúÿûÿ¿¿ÿ¿ÿ¿¿¿ÿû¯ÿÿÿÿÿÿÿ>¿¿ÿÿÿÿÿÿÿÿÿ¿¿ïþÿÿþûïÿÿ«ÿÿÿÿþîÿÿÿúï»ï·úÿûÿ¿ÿþþÿþÿÿÿÿÿÿÿûÿÿïÿûþëÿÿÿÿÿÿïÿÿþûúÿÿïûÿÿÿ¿ÿÿïÿÿÿþÿÿ¯ÿÿÿ¾ÿÿïÿÏÿûÿÿÿÿ﻾îÿþÿÿ¿ÿï¿ûÿÿÿÿÿÿÿÿëÿû»ÿÿÿÿïÿÿûúÿÿÿëþÿÿÿ¾ÿúÿÿÿÿÿþûÿÿÿÿÿûÿÿï¿ÿ¿¿»»ÿ¿ÿÿ¿¾ÿÿþûÿÿì¿¿»ûÿÿÿÿûÿÿóïóüºïÿÿÿÿÿÿÿïûÿÿÿÿÿþÿ¿ÿÿ»ÿþîÿþÿÿïÿÿûûÿÿûÿÿÿþþÿûïïÿÿûÿÿîûº+¯¿üŠ²ãï«þòþîøëÞû¾+ººªÿ².ú¿¾Š¾úû:ü¯âîü/þ¼®£ï¿Žêø¢¨ê«¯ïª¾ª¿ê®+êê»ÿúÿ¯ï:®þºïº»«/¿{ëûïþ¿««Š»ú¿ïÊ¿ê’îÿ»îÿ誮ê¾ø;ÿþ¾»è>‹¸º¿¸îÿ¾»îüúÎ;ÿ«üãº?‹ûª«ªêþÿè¾ú>þú¿ƒêª¯º>îûêÿÿ¯²ªºŽ¾¾ú¾+È®Êüê/;ª¯û?¾öïά.ìîë³»îêû®Ê~ªêüþ¾òËû⪸úë¸ïè.ûó*º¯¿,ËÏ:ûóª»ÿûþª/Ë>®¿Ï³º¨;{,»»úû¸»ªÀÏþëè3îÎãî‹î,»ïûë꾫â¿þúº®¼?ºªºªû»«ªïú»®®·»¿ª‚¨úû;ÿ¼ü຾뫮¿ð¾û?êîºû¸Âë¿þú®¬®³ƒºÎû¢¨ê¯ûîâªzŠ :«û®ë®üªÂï¯ÿîªú¾ÿþÿŽºÂ«¯ú®ï«£?º¾ªûúÿ¼èëú¿ë/û¾ó/úèë¾î¬Šû8óúìÿ¨«j³²ÿÊêúªþÀËk¼ûúïòh®ï/ÿªÊë»ë¾ˆþË{ʺ®þº»þ辫î»êÿ¼ïº®îªêêë;®ÿÿ¯û«ûïîûº»ë‹ÿ°úê*.Ïï¯ï®‹ûªþ¯ê»ªÎ¼þ¿¿î®:²¼>*¯âªï/ª¿êÿ¿/«Ê»¢‹ëÎì:úλ®ë«¿ª£Ž¯òËüÿîÿþ¾ï³?û;¾¸3ªòº¢ï¿Ï¨Ï¢¿¾®û«Ë®úúȾ¿¾Îÿªÿëù¯?³ÿ¶ï¯»ªþ?îÊÿz««¿®ÿÏèO»ªþ¸ûì¿«³»ºÎòïïã|쯳º»»?¯ûÿºë¸ÿêû«û¾ÿê¯ÿ«Êºº«®ëˆ:þúîûþøË*8øèãë¬ûŒïÏêúˆº®¯ÿûÿê‹þûË¿ÿó/þ"ªïïþþ¿®°ˆþû¬ú꨾ø¢û»¬+º>îã¼êîþ¿îꬪ着;ú:ûîªïþûϯªÿªŽêÃ:¢;àÿúê¨ïøÿŽüë »Ã¾«ª?¶óÊêúëîú¼êêîªÿÿίË?¾Ë.0ÿ¿¼¯ë«óºÿøòüìûêþ¿«Ïóèï뻯ÿóÿ+8눸®¯«ïÿ»ê®?¾ûòë¿¿:²ê¾¸¿êþã¾»¾ÿ¢ª.þî/¼ªþº¯ú»Ìûîîûþ¯òª»þÏë»»¸Ì꣊¼¾ï;ÿìúª³ÿë>¿ï¾Ï¿ï¾è£è/Žê?ˆïþ»þï®þì¿?¾Ž»¸¿ã¾ëïîïÿ«ºÊëîø¾ûú請ïïî #«›ºî±V¥®°ÙÖ˜£Újš'y5¤îT*â¸bºÊæ*áú«œ¬Þh.§ÊŸÆ’a†]橪‡"ø»¡Ë®&j‹×lžžßX•þ.¿«*²£ëñ®è¦ªŸšzª?—Š¾Žíõ»Î¿p„k¾x/¿¹ª»è?Šø1?¢n¿^£ê¾¢NªëŠ®Ëª.Þ먫®ÊwÊû?ú6¾ÂVª¢R¼þª,B§ÿ® êî\Šºq*K¹®¢®šª#(Ëï/¸¦û‘¸,ì|âê—ê¥K†À¾_ÊÕéî´»Hv:ö+ª©ªîá©
¯ï¨ËÛ83Kˆ¦â›Ö麚©/š.\µ‹²&QIw+ÙÍø«²Âʚ؛ì£ü“î—‰¨ª¢¿ëú²úº„.ªª;£"û껪Œ¢8¿+¢¨Žó¿²¼ü º¾¯‹¾¾Ê®ÿ:þ£¿º‚ã:ÿþŽxØý⤦Üûê–~JMºh³*ªª€>©ªëí%ÓJ¼º¾÷.©¢šm ìßg¢º¿*§êß¼è“éÿèYÑø²«â¨¯ºäl‘Uu«ø`ºðª»‹º£˜ïÊ˯ºÀϺ¸¾¨ëè¸dk#¬«êê³ò¥¦ê.’þìûz㺮n¨›¸Ø¼ªX‰ŽûØ¿²Þæªjíó;¯«¿ëë¤é©µ¯*+«£¿³þ¢".ïëï¯îãò¢ø¨ª;èîªÛ¿ÿÁ¬( <º"â(Ê è8Š²eªFe…kKjù¬è¢FécU:«
+ë•Ôõ™ÖÛÄškòZ©h[ö"yR‡é·–XÆVª|úˆ‡ž¥üP§¹š¥›¬jégí]k{mvïZ»ZÖ»ïË×V§(¿„¯†^¦ª›«é_Š—z