From ac05d5f8d1128084675104611dd795d982a42dad Mon Sep 17 00:00:00 2001 From: Joon-Klaps Date: Wed, 17 Jan 2024 13:37:36 +0000 Subject: [PATCH 1/7] Add Freyja module to multiqc_config files --- assets/multiqc_config_illumina.yml | 6 ++++++ assets/multiqc_config_nanopore.yml | 4 ++++ modules/local/multiqc_illumina.nf | 7 ++++--- modules/local/multiqc_nanopore.nf | 7 ++++--- workflows/illumina.nf | 6 ++++-- workflows/nanopore.nf | 6 ++++-- 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/assets/multiqc_config_illumina.yml b/assets/multiqc_config_illumina.yml index 2f7b84c2..545bdf44 100644 --- a/assets/multiqc_config_illumina.yml +++ b/assets/multiqc_config_illumina.yml @@ -20,6 +20,7 @@ run_modules: - quast - pangolin - cutadapt + - freyja module_order: - fastqc: @@ -62,6 +63,11 @@ module_order: info: "This section of the report shows Pangolin lineage analysis results for the called variants." path_filters: - "./variants/*.pangolin.csv" + - freyja: + name: "VARIANTS: Freyja" + info: "This section of the report shows relative lineage abundances from mixed SARS-CoV-2 samples from Freyja demix." + path_filters: + - "./freyja_demix/*.tsv" - bcftools: name: "VARIANTS: BCFTools" info: "This section of the report shows BCFTools stats results for the called variants." diff --git a/assets/multiqc_config_nanopore.yml b/assets/multiqc_config_nanopore.yml index f4851ee2..ad155d94 100644 --- a/assets/multiqc_config_nanopore.yml +++ b/assets/multiqc_config_nanopore.yml @@ -16,6 +16,7 @@ run_modules: - snpeff - quast - pangolin + - freyja module_order: - pangolin: @@ -26,6 +27,9 @@ module_order: path_filters: - "./samtools_stats/*" - mosdepth + - freyja: + path_filters: + - "./freyja_demix/*.tsv" - bcftools: path_filters: - "./bcftools_stats/*.txt" diff --git a/modules/local/multiqc_illumina.nf b/modules/local/multiqc_illumina.nf index bcfc37f1..e87b45a7 100644 --- a/modules/local/multiqc_illumina.nf +++ b/modules/local/multiqc_illumina.nf @@ -1,10 +1,10 @@ process MULTIQC { label 'process_medium' - conda "bioconda::multiqc=1.14" + conda "bioconda::multiqc=1.19" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.19--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.19--pyhdfd78af_0' }" input: path 'multiqc_config.yaml' @@ -32,6 +32,7 @@ process MULTIQC { path ('assembly_spades/*') path ('assembly_unicycler/*') path ('assembly_minia/*') + path ('freyja_demix/*') output: path "*multiqc_report.html" , emit: report diff --git a/modules/local/multiqc_nanopore.nf b/modules/local/multiqc_nanopore.nf index c6ffbb4d..92ec1f8a 100644 --- a/modules/local/multiqc_nanopore.nf +++ b/modules/local/multiqc_nanopore.nf @@ -1,10 +1,10 @@ process MULTIQC { label 'process_medium' - conda "bioconda::multiqc=1.14" + conda "bioconda::multiqc=1.19" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.14--pyhdfd78af_0' : - 'quay.io/biocontainers/multiqc:1.14--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.19--pyhdfd78af_0' : + 'quay.io/biocontainers/multiqc:1.19--pyhdfd78af_0' }" input: path 'multiqc_config.yaml' @@ -25,6 +25,7 @@ process MULTIQC { path ('snpeff/*') path pangolin_lineage path nextclade_clade + path ('freyja_demix/*') output: path "*multiqc_report.html", emit: report diff --git a/workflows/illumina.nf b/workflows/illumina.nf index 1c369a78..3c53281b 100644 --- a/workflows/illumina.nf +++ b/workflows/illumina.nf @@ -486,7 +486,8 @@ workflow ILLUMINA { params.freyja_barcodes, params.freyja_lineages, ) - ch_versions= ch_versions.mix(BAM_VARIANT_DEMIX_BOOT_FREYJA.out.versions) + ch_versions = ch_versions.mix(BAM_VARIANT_DEMIX_BOOT_FREYJA.out.versions) + ch_freyja_multiqc = BAM_VARIANT_DEMIX_BOOT_FREYJA.out.demix } // @@ -670,7 +671,8 @@ workflow ILLUMINA { ch_cutadapt_multiqc.collect{it[1]}.ifEmpty([]), ch_spades_quast_multiqc.collect{it[1]}.ifEmpty([]), ch_unicycler_quast_multiqc.collect{it[1]}.ifEmpty([]), - ch_minia_quast_multiqc.collect{it[1]}.ifEmpty([]) + ch_minia_quast_multiqc.collect{it[1]}.ifEmpty([]), + ch_freyja_multiqc.collect{it[1]}.ifEmpty([]), ) multiqc_report = MULTIQC.out.report.toList() } diff --git a/workflows/nanopore.nf b/workflows/nanopore.nf index 698220cd..8a83e30e 100644 --- a/workflows/nanopore.nf +++ b/workflows/nanopore.nf @@ -453,7 +453,8 @@ workflow NANOPORE { params.freyja_barcodes, params.freyja_lineages, ) - ch_versions= ch_versions.mix(BAM_VARIANT_DEMIX_BOOT_FREYJA.out.versions) + ch_versions = ch_versions.mix(BAM_VARIANT_DEMIX_BOOT_FREYJA.out.versions) + ch_freyja_multiqc = BAM_VARIANT_DEMIX_BOOT_FREYJA.out.demix } // @@ -564,7 +565,8 @@ workflow NANOPORE { ch_quast_multiqc.collect{it[1]}.ifEmpty([]), ch_snpeff_multiqc.collect{it[1]}.ifEmpty([]), ch_pangolin_multiqc.collect{it[1]}.ifEmpty([]), - ch_nextclade_multiqc.collectFile(name: 'nextclade_clade_mqc.tsv').ifEmpty([]) + ch_nextclade_multiqc.collectFile(name: 'nextclade_clade_mqc.tsv').ifEmpty([]), + ch_freyja_multiqc.collect{it[1]}.ifEmpty([]), ) multiqc_report = MULTIQC.out.report.toList() } From f0ecb40c3d17ac30949efce039546d1637930ea0 Mon Sep 17 00:00:00 2001 From: Joon-Klaps Date: Wed, 17 Jan 2024 13:43:53 +0000 Subject: [PATCH 2/7] Declare empty freyja_mqc channel don't pubslih freyja update version --- conf/modules_illumina.config | 1 + conf/modules_nanopore.config | 1 + workflows/illumina.nf | 1 + workflows/nanopore.nf | 1 + 4 files changed, 4 insertions(+) diff --git a/conf/modules_illumina.config b/conf/modules_illumina.config index 2cc48bea..8bb72cea 100644 --- a/conf/modules_illumina.config +++ b/conf/modules_illumina.config @@ -219,6 +219,7 @@ if (!params.skip_variants) { publishDir = [ path: { "${params.outdir}/variants/freyja/" }, mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } } diff --git a/conf/modules_nanopore.config b/conf/modules_nanopore.config index 31ca44fb..0297911f 100644 --- a/conf/modules_nanopore.config +++ b/conf/modules_nanopore.config @@ -260,6 +260,7 @@ if (!params.skip_freyja) { publishDir = [ path: { "${params.outdir}/${params.artic_minion_caller}/freyja/" }, mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename }, ] } } diff --git a/workflows/illumina.nf b/workflows/illumina.nf index 3c53281b..38abdf56 100644 --- a/workflows/illumina.nf +++ b/workflows/illumina.nf @@ -477,6 +477,7 @@ workflow ILLUMINA { // // SUBWORKFLOW: Determine variants with Freyja // + ch_freyja_multiqc = Channel.empty() if (!params.skip_variants && !params.skip_freyja) { BAM_VARIANT_DEMIX_BOOT_FREYJA( ch_bam, diff --git a/workflows/nanopore.nf b/workflows/nanopore.nf index 8a83e30e..87afd075 100644 --- a/workflows/nanopore.nf +++ b/workflows/nanopore.nf @@ -444,6 +444,7 @@ workflow NANOPORE { // // SUBWORKFLOW: Determine variants with Freyja // + ch_freyja_multiqc = Channel.empty() if (!params.skip_freyja) { BAM_VARIANT_DEMIX_BOOT_FREYJA( ARTIC_MINION.out.bam_primertrimmed, From 4bb74c8337b074912552ca612fe606415677746f Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Wed, 17 Jan 2024 19:45:14 +0000 Subject: [PATCH 3/7] [automated] Fix linting with Prettier --- .devcontainer/devcontainer.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4ecfbfe3..4a9bc5c7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -18,11 +18,11 @@ "python.linting.flake8Path": "/opt/conda/bin/flake8", "python.linting.pycodestylePath": "/opt/conda/bin/pycodestyle", "python.linting.pydocstylePath": "/opt/conda/bin/pydocstyle", - "python.linting.pylintPath": "/opt/conda/bin/pylint" + "python.linting.pylintPath": "/opt/conda/bin/pylint", }, // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] - } - } + "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"], + }, + }, } From 7e65e9b4c268b2f977b313dc2c38e9f8e529519e Mon Sep 17 00:00:00 2001 From: Joon-Klaps Date: Thu, 25 Jan 2024 11:01:11 +0000 Subject: [PATCH 4/7] Update multiqc module & include freyja in report --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f0676a3..01fbca92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ Thank you to everyone else that has contributed by reporting bugs, enhancements - [[PR #387](https://github.com/nf-core/viralrecon/pull/387)] - Software closes gracefully when encountering an error - [[PR #395](https://github.com/nf-core/viralrecon/pull/395)] - Remove minia from default assemblers because it is unreliable - [[PR #393](https://github.com/nf-core/viralrecon/pull/393)] - Changed primer set to params +- [[PR #413](https://github.com/nf-core/viralrecon/pull/413)] - Update multiqc module & include freyja in report ### Parameters @@ -42,6 +43,7 @@ Note, since the pipeline is now using Nextflow DSL2, each process will be run wi | Dependency | Old version | New version | | ---------- | ----------- | ----------- | | `freyja` | | 1.3.12 | +| `multiqc` | 1.14 | 1.19 | > **NB:** Dependency has been **updated** if both old and new version information is present. > From 4366e62e0618df472e870be6cd8a8ca581fdb912 Mon Sep 17 00:00:00 2001 From: Joon-Klaps Date: Thu, 25 Jan 2024 15:14:37 +0000 Subject: [PATCH 5/7] add freyja screenshot to output.md --- docs/images/freyja_screenshot.png | Bin 0 -> 55926 bytes docs/output.md | 170 +++++++++++++++++++++--------- 2 files changed, 120 insertions(+), 50 deletions(-) create mode 100644 docs/images/freyja_screenshot.png diff --git a/docs/images/freyja_screenshot.png b/docs/images/freyja_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..cae764d4de41a9d933c3802ef1ef66c0f00c0a8b GIT binary patch literal 55926 zcmeFac|6tI+dqtul2D-#q7mD0gv?S>Ih0J>EQ(AiGS6u=HVBC*WZI@=9y3_xPhWGVe4=*Y!&}?VkPC`OL zbMEZvOC%)ZX(S|DIH)M$e}ulgAcG&IwwDy-NK)!phe=2{NY0%;sphCZ+Py7^_o|c3 zmvJ)Aw^VOaZ*y>SGs~+P9p^q>o{y zl{v3&lI}Tl+b7DCUX4+uA!*J7C!Rgn)6^u?)UDbwHn>_q21hjCSkgtg@1-AXLS)@ zJ=I^Gv>TI&)xMfhE5fpJCE(!q?qcLfNwM7JbB*8o<8_#VZSsLaO}KlLk|>Hv_r}Sm z?1NoD9#(?P{2Rpuk=`{QyHUZQ8I+V-uQ$`~i6eqJX?BDFxtfKJDRI+cMf4D^7xvey5`m0kRA*rtYJVGH8A1}DS zwJcf~*vEfPX=9ACim)0{Rt43EWj#w`wo#=~;zLO+E*~M)SW}>)KzsZ1yL|6plCrF4 z=E$hqZ-_8<9B5!MtZcKGD%V5%_2&OFl{ z6-BhJU$#_JvRI~lxm@o?u&w4|U-(d=EF~->y2Zj=dsuFL)yU$ZC&|SWB!~olBX{0{ z@!lyO&w8VT^r_17-lXN`IB9kFrOqCW$i0DdmD*>T@}!2(UEnTW?&mk<8}C_L>8ai+ zF)EN8BJtUdhS^Yl@7}=cm06bUZ>Qj!EzD@HhY}Aq7S%P_$Spyb>0Pj#WRqd}Ym3G8 zULnI&be_28nK}P_^yK&bfzE`7>iF@dZAhPFVdZ#UM0F^6W;$k2pnX}|y*J($x&xkE znK}0iM0%}IHiA?`(tdU_(8IOzI97QC<2&PT?HV2KfOG1LV*5K>#tW0y z_AB4?aKr2LaKk&5TFOpXcXbx$|u&}k;tbqh?8@Z&LOUT2UDChUMFFk{8 zYEf6kd)(fA1#b{S&6g9E7g@@eA~VW1_2_=kLY-)j-SUuv47VU-YEG|@%|d^O=Ah5? zour**)$Yw?Uf+C8gvgGRMiRP6j3|YWe<}#XI)qsCpA=alq+|1PH z8lq>P;JnaQC7soU*Pr7qd?U!%myWxerBbZA7$H>in!N{hSM>$=siz}(t$GgKZz~ve z)T~4O)?8+y+4Wj1H`Lx!4vvzrJA4U`kp*xbCj5?)$5OV3M08%g^ioi3!GLf-``RSC zBKhg=PGs6bvWtkxw&HZfRK*0l)E5k=iG+9fl>Fe`$|o+@mG;7RQ26u$T7KR=?l$fc z66ih?opC$f9aX$C+nFSroFRYW#%#N3eTQ9xd>7Yg7uW^*t8*S}4vqOda^X$N63JbI z(sR!pdaON`I{U|03F9X2t2L(5wzx0WjkK&c?&pzVWR}0u_ItB08;Y&WG%>AwLzAx_ z;&=M^8h?sN9l-g!V;KuB?Tcyo$`q5wB$F>zaA>DDCEB~_Zdy;9*z!bKHB<3?g-toV zLd~7HLSls!o3Ug5SeDMa8LG<{#D`-j<|J0<`>J2M5OTjrryuUvDm~#fH66L;+F0** zakPB*g;ACcJND%&nbq`ywUu#x)9{;>1%q8T%4m|t{pJb=rDB)lx6tceFC=28*|LMi zgK$qP=cN~iqL~V3sakeQ%{0injc%y$->9h4e!F#&2GL(>@v=`zu?8zG2I@k_pbGhG z5~2+}8H!oYd?A87O&at1tR7A(&K!PW`CG=gRd%<=%lYynb>g!i<(}6<2kNBex<*1q z>liP8Xo_5&(Hh(bdOE~oA%wex`IfI1^V-aXH8oiHnML=1H}_=tdZs4LS4-Oay5Q0g zvJZF33UObC#@ANI74PtQTk^XNE1KT*@@5t4k?x~PGqUe6@=|SP%827!em>5YH(e)D z&C)YpIW>I2!#PS(e^h>F;j1pABmNhcuJXII7vy)}tlHnwDY)czf!CfezaU47y;Q84 zCnIBWzoMq*qzEaNte*%LcNFkLxVT@*<68=Hdy`<-&(Yf z!mHH*>s1r1QyojoyEMzIU{{{!NbxF(XRdxxSbP zH>MZKLPM?cO{5xK9^J+VR+kV>$p`Iqn{k$|Byp^}KWYw_r$$kBhG*pKrr*Sv09x)=kUQtxi8&>ew2yThVVACk(<~zq*d~7mf*|kiD`)xiP=uf!dW}Z7JH7;h0CVxCR*xf1g za?;N{tNv2Kbz-<~KYR!k_g8&zuhE!Ek>c@!Kc*?-JdxkbYGH*Ag1KCNl1$rD#3 zpEwd*H0wt{^Oqz}OB|AppPT%4vbB|^qE2vQ5q810zv;Uq3A>(d?>WODXrHLJNP(VI z94%v;O{1{D>xqtJrn*@X(FVmR9F~z((G<_LT5cIgsE9IdoO39|>)9$hRHL%h0*~2c zx%*~2xNDetG6bHki1v@LDw?<)a}Rr?;Sw3f(UPByVbqddprS*Oy6_O6TvhQZzW60E zt0**`A+Uycy^vIc_xGZP7t_5o?uCO7U5sC~dwSCaaFvKplx!Jv+ks+BpvkCXG{#5> z_{aoaqM$E@GHH7>`~z%x-uc-hx3_9mcI@ zwP7U`50c%}vu}?bzf5mmo_8rC+28~No~MErLqNH|B1BNwgITR+eFJZ~!e~9djHx3@ za{V&N$b@6}e&DO}Yc7lDG50K&6nec|?*#7!NvnRG)DIF&r|?eMuxo_6ZNMRA4uz zKk7R8McuFK*1bS~D%c%@Nzo2t2{_sS;bbG4a9pwjrH15_=KUr$4y5V0S^?`My!3@T zm%0Pb+PPzw6t9n422+*xrdJRY-YlYUII*61QY@|egts~U2o>vf@CkNV?2=ELsI_*t z9r*3dv62xz0oPZVL3vAU62_)QRon{O(t6W#J=W$tA{TPdx)Ox@v6kLgL37W{wzlDj zhi&{NBiU?S0eufdwuMli3@2LtrAm1(7bsWsM(IC%gACzF^0&@b=f9m ze??^}sd~2Lzfs|Rz)tPVpG8a=-ji|HxyO%baPRRGBdY~Ch4aQ%o!{w$w6RThku* zo@0|4j>D%gYppByJ`kp>MjJE>N7SjMvEt{Y0+0ioluT(mRa#iH-F0MG@k$)0JcWB+ z^ivjoa4)v3H0qsnyfDWf){V!r+P7Wq@Ac(>x$s~C*6OIhHBSa>4!`X8#HCnixp#HO zej)nK!!@QCR6QA9De!*6wXaUHucb?lnO)F%_pGrDG1-KcD)Kbw17@y!Qz~><79;pN+`fm2coA1}OIm_|&+L)bN~Yb+qd>{$)o z9c!beGWn8|4=?aqBxh<6>6;2DHF%5ItRI0+8Yuii!H<3yQfOf+^>y2Yqmx4haGc&~ zcGI<1@-1Yz*=Te>bXykp77Q+1;>@GHUcHyHtic`WXJ7rwZW6)i%#bnqS~Ox`fH%gA z0so{T`Yvd`5Y!A-;;d&&v%`4@lpqTaftcg4WVN=Kx~6U4b+an=hD7kXqvt0t>nY4= z!Y+r*p(4WvI>Y_8HG+rSzm8ej6?XHOoF4^WB;!GEV=2`K++=`5&GLdAXjyyagC#!G zx;Nfa2o3r_S5JSi5@wMimUPc-XPWfX)%;)PnFRu=20qdSic!nPm^XOa&c}nI#z%BQedEHym4=~ih5*#tCmnJN7u{rKjH^DypkRXkARpO4c zUNYl*&4)sCf3r zRa}pNL$uGfu93gQd`jYK5z8P*D2a`MfGdLdMhJ2gDdx4Z{=RN0g+YW*7&W?#?6ix% z$WG&nnVZa~@-z~u1j|1=2Ja_ICJlaYUZ^=dvJ+!8mNQqp zwjzYrw+nbUAp}O^&N?thO@pEX#Ler>mQYkZPEQSL_V`wOG4@(>B)?VE{`;gzd97%V zYh5mWS^1&M@S7LcN0!7QXp6uZR_wxe>lBRLYJYoGv9SBQ<;ctc^7w@Rwl0ql*{K-&i2D8g|i*I0wYoHD#Enc*XFARM}Pa!I~L*1 zNS$U>jQcWpnbrmE)W_0;E_^lyX5`Tj19zu~6czccbR*$w;3VE^ckJ^YY(|W=5X8|J z@?Z-rTUqH@bJH6ecX=5L2lMVjBctwHuGC<}2swQw6i+6nhm__P)l@Ft(V7&=ch@P- zuC9=4rw`km}NHfsI_7%`Qf*$0-mE|90@DOE3hMz6!~#fp4kp-$+1}riWf-z?JC8$$6t0jI22@>()V<#H(jlvHjX{U=rc#BD2dAIcyP9O))1GtN zGq>ERz%IpeCCRvP`J~e5M(8=1lcPl2=cVzw&1FfZMTW`w5}Ll})v0kti;t(z(x1Fo z^C4#-%)*52rmunSpbIs6P!hr|S`VL#7wXjPdT8+5)^^HmX}Hzd>^Zj=mz&#G&gvJ} z`?~egClxPO7l$)kAxdv&D3;`BY@@M}q8`g=CgG{u?{)c(YN5`ZdoL{Co@21Tm8yho z=f~Y>T?)=8*v?R=iOU2o9mHK>x?GAlfP)#vZ#3tal@)J>#gOon7UV#DZKgeUHaV*! zu?qy5Y@#AB%iv{ZijPQOz(1_u@>r?cJzMxny%?vE)-J)t%O>IfD640s!6m@4K;U*7 zLCbDZq-?>&97~M&JbssMGGdQK0?MGMATe%kk;&zj{js^ob$NKoMu0^sE*#;D=pyFb zANCkl$XD{GE3i3T>CrkrO(Ek8mU^gm4Qnohr%fY_9#wQoY~8WTQ2rtvo{ae7a?8s5 zNsS^ZZD)_ifo`waC$%E1E^WcY%P`&wq`Q(n!8hwqauCPZmhY}%T@Nnx36s>q*+eq` ziYzK7BuH^9y_<4%;UES2rpn~dhzoA|rTPAZliBWp%#}6k*1P`19{S44nldB?7-rX+ z?>3teiNdEAuVQ2Z7RA4+6+cx#@0nBJonQ;}tF)}FWBl4EmoYLjuRP3Th`MuQ>f@1m zr|=sW9hTOk!Cp5Zs$YpBOe4zH@Sqn?>(sh$TG-(p`c&Vk|5?9Ny$cRZBfdwtrG50| zg-hMze3NLsxz0Z4Io~Qr&Y&SCaw37HxS*;-HNvW`!`b`k0=DmAyUe&_mBc5HD*TM_p1Ol*!lMaEexMN@uGJek6s9%?z(! zmgLftlR|LmFQw+km_!k;mjy)ND9ZY9+r2@!?#ePNGettp;#HNza&a|!wQeNPX8S3W zbRVg@!-G8%^8Cj4I(hUbeQaRB8Oy74#r*v4lfHwa4ussn;IXXE6zhb^c&i$+C3s|D zq?a3Nw-5i-uDIdyBY|8n`O!Ti5Dh<@nW9`v&+&x)=s`<#lcU8G;X= z-^m?Vx2ryqrBk^qm$C}UVA00@<|;F29&ScQLiW*l*H-2OmC(7|=j^n3jxMZpfyz=~ zU4)C-Kay|lqtA_(z@;&H$ztl8$E~hRp8eKZG@EHo6WJE$VDjnUTuSyVRfUntB$a_k zo1r&1>oC&*@2y(uT34SmUN&p$CP!YrRqF(6mhi)C1dE3*;wA^r$Xw6u4>m_(=8KcF zan5yl=#?G4^N!yHDzB0&O$L9YGU-z($DySAe0Wmg7xxP#7!_hvvT-55?Z^nw8x#sz zjMx>py^^>3g>_Nx_N#qiWhl8MDuN|4N?F6tVD~@83KEeBeM$5789r&LQU1b0YbM{S zH5@U;K`B{tfSP5dv9P8!DyxwKJi71^!Ol97o=zHtHF5>yYb0K?kj?05wbfidG|y2u zw=OW7OwQ)SI9`cgs`YR;)3@_yG)xv>dLz9637ZiKiS)T?BMsw%@+g<|8AnNBwnJIp zQyGZ$pz;$h|2L? znla1eMBD<7i^ZNKN$#qq8;Pq^)a9JRf{M`@sCSMo1$HPoOk1yD89MG5R&B)HSAY5Q zGDOh|v;(U}+#we+U;ARU-0|jVa&!cW(K}EcXPlgm7DZJW7LP?j<|;9JR|g_ykWnni zD0pD-+Io{|SG*uR6XF=H??A#}G1N8gK8JT95FpS%D?@Bntu|&~YCF_AKpqWWI%8Yy z+AO^^s*3WF9%7_^&+hc?asNqL=Z2{JZGr3d7#&&`Qg*XQGo)lm=r2>%{QO(lT_=8L zm<%q?s1vuqCH4x&qQeV&_?rZ|@I%poe8|4$E=sibSbq9)CdOtk!a;*dP;t;;wcntF z<~IsWk4AZ>XUHD!uQphn!YGit@S`emIG1s~_1I;+=p$v)$BG**`h$@FKc;aMaPp&2+?8HPqq z9WATOmZRTS0u5|NW?8%Q>u+5j+4_P7NiM>YC2EQ9USA^{UD$Xey9G`L%8L<*o&Eif zzki652A|$7xbF1&KHr#;jYkchF!`ivaX+$_>yx$qDE@-1r+Q?p(D(lQ<%P!~Ct*&~ za%|lj+tk*`ZaTvj)8XI$^2gs_`2U&Vq+yvYe_#Rre>SvV!}*_Ic&xf#UTESZ=j*nN z=2k1S(58jx{dKz`n(!Q?-<2Rlo~A*H-6PU+X!Eprg+X*f*jv0ik$#B$vWa0b^BV3# z;bbLCl1zt@FUn?5^Az_CS1U~v`ywbHP2tM>?%#HOQ1_pF#hy!Uqi*c_ZA2k1EN_Xk zE;+p_oPS3FK)C&PrVTvXo$>f*^6 z3~!kM$G>Rh#~X4N4?sh->WAp*3=f&zA>q;FnmHwNY5O^Er%MNM+B}#{4{&bK(dz$oJc*U_4S~93Vo3=u;f{9%Oe58W zV?0SL&ZgaSNL}(x{Av@oIm0%M`D_uY#Xi z`61MwW*EjOEGIL=6)T(adf8hOnV;|D$xRfLo`LDBGaq3)!giqMKUqr=<|71O5d422 zlD`T+{p}79uYWO~A42^$vT26NFuMK?v@2(iJxV&d_N4{p=f`+{EXRznysC!^RJQ-Y zTKeC!y&_2P1s1_HPBGm-9o1f!Dfq)R^*x6MM)om*vNLw!^OH=@{kQ^v4_z z0TgzQD@afacI(HH5c5q>4c~&cdfF}1lFEsooo>&iZ#w!L&LgkvB)ksc29G{5s&CVm zJxjj8JKrado-;fH2As)XZ5c2t`oNg*ukSdb^ceP&PuTFKO^TGG5c=ijyC+ly_H;Ur zIp-!D$qWKDN*1Pin$gh08K;QwO=b#J4T69=K;;L93^Qr%y2JD5*9}j@P#)aaX^{=4 zQTK`ianq0l^x>&vp<71~7-(-|9`k*N=6vt`VL6E0(pz1+A_61N3W&eIso^(T@U*tu z&dMJQTjppxqs?}jfC7l&4Tr#O7%=(q`+wSE$jiOxLDXEOVwi3ilKosy%kIC*tHcor ziW6teR3UZ}_T)_7j!mx)rGj3ces}J1JLt1^@z-pdpPIna;|{Hv!iT}K^TR&;X_{C8 zFZkki2^BO<-@v*al>SpDXZFA}Q4OZqgX_}K?V-7mWBoB#eJ~OJt(|d7u#7CuGY|jv z{r)F=VOC6{O*;KOxDAU2AKCfLVNU z|3YyX0{+_7y1SK?c+1*Ox9o}U%RzE7%$q9_AwQ`XhEN|8d}2}xx9LkKlia=liN)D@ zz8x4v+G zkA-Se_tm!{g&4_i2WX!!j1z2$FRuXHjt9_;3hf}O!BN1n^c1rK+=m)hUkoYlY9zBR zKfa)PK`L|mBk@iKOJdL4DtR zwy{6NK;IoY6k;4Gm4(Ds+~kcSh3ZZi510ZV(6rq&(rusxPZJR!HW2D$D(E)pYrqTt zH(QfC09hBt&y_6Jy0v8akl!(Nn_XQRH(&#aX?kE6MlWx{gnEhe_$8;|U%tZft66ZC z_|)rK7ZMX21XJ=|Bu3(+KVfyOrFcr12bd}Ii6L1bBo=1w0Y9BdWmLbrdJ@wE-7vbh z8s%Gri)S-aQ3!U~G)0E(q;I>H;0v>&Dyp7EY_`VItt`ho{3bIq(skGcC+m{kLib*R zK{hKK_}oASQr3(#X>2o5TWf2Y7t7dJFBZ+j@;|e!6N?ik01{URL05+CF_hz%O~p9uNm`p@N$uoPup1X5&B@0KwgMBaFAEY`k$}Cj26XKIv9@0HKFa(k$+Y$*#Qtt|!u3#Jt ztlwuxiH-kyq2_lM1y6?7y_fsmZ)Ml54b5*YB&aJ(PM#*kUUbNa_{jp9*$!g0gH8Ah z$+4^7=M?C$@3h)Vz&Z^^Xz~?Ily^AOx2Y4`4c5`S>@>R}d3%47%E&T8xZsUgi4R_KG_5SrE}QdrSHQmV zl`zjMXK`&Z9q2-@dp)F0TStE&88h{e-kbRdI{pyj76VJ)eKM)eElG*QkX{-WB!H-h zF|`BCyxRRr06at|INfW-ZTV6Bs-i0^6L(=K&E zCbJqTEwJ`v@Y1YV_NiLtJmI_V6un5rEG)pZ@LQkHwM157QqV7WvQC;Bx_zZKILf}* za6i#F&(zzW*|4JTQQ<57X6E;ua-BJB2mC1Jd!}E`)zrjvA`nVZ0ei^e>z7TOGD_nj zM|+F4ucxs7?05440R~bHa*lMWc~hCCcCEt~oIa_3Y69T+bHjwC`|0}FXPWw2g(n3} z^eY%MJbN48pD^IP!gfGy9J}o?XNk5$x1A}@aQ<^h(K`eZm2B_PvxL(uT5L(xu%`8^ z_aG)26dHPF_6O@|EOp;%QtJP#$d5w6-KPRdOfL(x zTm51v)q~j{k2Q*_(@#k?ifM76%d6d&#xyCs(*bS+T@PcP`KROMcPCGV5GD&9H|TLH zHqM9cSXPx3;by;By;EIHiw8g)c_RVYoVXT1!ox^2ZkhhY+4OKLERPABFJ4>gF5!2k z8I55GB|L0gehRz$ZstHZJT3f2>9!2H&;?i%H&BdTfzLHwT+cHj7Q1+795retv1len zhXJ5L$y>0~{Hc;iLW&q!NiBeRf-{BFT(52pkdcxd5KtFN%hPcN+$eGm*bfBONlw?i z1$-O#7XUdr0Fp-5p`;TxoAnm({EQTvzw#pnm66tC~oCdtAQ$OH}v~x!ilg=MG zKC<&NrQQ~cqEdjO`N&VeN}Z!{0l#pFG4rPod#JNl0!`X$TS2Z7fJt0$0kFAbdO0Q% zLDCT9oe5;=p>{;bC%o;*o@P8n zid`EV%K}eg#le^Qr|^5`w%_eM?Er|cNqwivek36-I1}))1O9g>+d2U8+{!eCR03hM ze3BiCar@Be7kD{5CM%fg!+F@&e2E!GyA8LcnX@D-{}k`n<`$TQ3IetC1}ENl+)8{8 zEDFu!lMHyn3bHTj>HyAX>D|1Ir89OE>u^>-AS?jqBwK_z~!H- z77WSrbEk9Ul2~LV?n9$if^W9}=@cTH+VCNwg7)7mr|%zlVV$yg0S6B=N*g z+0K8xAL5wQL&2nbu})@f`E7@J(lg|M!S;?726S8KR2Yp-o+()%!^}^kt$A)^&~(yl z?7GJO!pziZz2!G)R_10GH7L zu=png_WT*}b|e;|7JCzN4$w|9mL7ONx{><)LkR_QfQYd9kovP}zZyb3)CR!x#B5sJ z5^gTV9rs*{AtTx-xY?-l)qOT?ip%tj6)X!z^z(IMJ5PM^eA{_FA7$^uP3|N7)<|L~ z%KH<{lBDhLgSwNHMF6*UY_zqTHMmwqY&9rGbZLgP!>g6KHsipz<3&q#qc&jT)MENt z#&aBvdxzs9i>@WF*bil)Eh%+bdkWVCS_LlMJjHep;<+`1pCr9)UD;>y174t<%RAk3 z5fEDI8shE3z>5%nk&bKIj_*7q0Excp?jI#b-<^`mBcOD#^Es}U6bvhT7!KjECx#dU zMJjh>nYDxW{rOz$<}Z9NNI8TN#P0VcR#A2%iN&`NpQg=oSzG}SrB00OCTlJfi45%# zwha&2Wqr#J`G)?~laQb~xe0H!r%p1Y8Uuv*4P4cac*h&?x`nOw+esONC+&Z?{pUc) zMs?(`D9MJH4Sz*ReudzEh2S>X=)Xd6n^o|y5Zph8;2ciMH~zo^K&&@vx8c~^rpos7 z7FVT2agN4z-8z=(@;s?Bo$`>G3>f;6MEj9+`jL~$U0lyh^6I1;RrrL5Byy8^LoA#! zo4M+xorj8l^nlswj+GBBdXPZ;dm;+*qFkCXb7u!OSgdh24~--PBUFs#3QbyfGbGH&RF%!C(35{vmbxm(*OK?g||=bU*P4#PpvWm-Bp007q+JULn=DFrCCZ@ zQZ6*3K9TtnSVITVW%;cu@+~)VRXvVcu==*NHyJIk$&}(g&!?Q1 zsWg@PaAdfO<9uJI!hh?Ro;U<4QQ31Uvdz;|fr>>|uk;u|K(ytK?G)a^(=BD_`px{| zKf*u|MREE+lk%^Hw^C~H_JpwSovp6R1a|gl1 zXxd}8CmRph0Q>M#KmH&9H+WQpf;IyNlA(GkbCr>#0q~{$ zMVst0QZgs#h?DcHC#S&@I$e8l`zEXYoj$OsEb5TR$^af=>GtNd*f)q3^bg-XzYCBR zyM#|2`%@s$rv_)}5#E}VWCh+&_%+a9GYafKzn1Q=J^D)-At;^y8Lew*M211CK-Q^* z04u={`8&;an`%@wl9Uwbah9-E8D+pa^Hmp;A4Do+CE=g^w`Dseco$MeHJi+nk~Mmr zd&8n%60Djn&^E8OgoArV^5iF!cS$JuVa}2~$S{3+Zu(M-({(tzaMIs8Tr_kMibK)* z3!gMKUTIn$3BMuN4%9@0{ccbQV&D!LN_CkYXu2A*Jfh=8H|s)xbxcUcqrF;R1L3Hu zS$3Gqb-u9cRU@0rsER#6PQ-xOWp$4KJ|Hx1XO|!>C{qCRaBl4UhOp<5#kAoT>Krr< z7#3SCjb-z1WpgxaH}s}qlp1uE;MHhC_&la!jz}exn^t7Ctwz)j7u|d8%Q7X4xY9qH z7Bt&qXo0Ke^J4`zEzSo%W2Cf>vcft?P1yC^7yA1F&*COF+h$yC^1=!ma%@(t&rit2 zJqxKBg;IP|{m;0D;ZWm%=R&>-wiD|dPYBUexJ3~OkI4ZmV5@84O@p!=H>~M+@!D!X z!qr1Gji_f6De>8NZMwE?dw$)HOoXUy%7^2aTnvox=LK=w9HTv>wUmA zP!q&Fvx?st(<{^p^*7wN{O|-^fcQxKdR_PSG|IwzCoQx_+{rMp+r?jQHX)jiJd!S1 z1ja56zPzE=BR;@A&>9ShpCTbm_Q0r$QA}v<@gCzl2m&F=4S0A;nS`93*-i1w1wi7m z?-arawB%D&lN!1F?TC=f3;q)425+|GLaKOLkNHyzkd{_kFCWXv?;g9}Khty}brrJB z8ss+gHK?o=;QG*XD(7NTp-}AZRDg2*DJYVCvlt!PVh7oK>vUD(ij#vUaIHxtA%*KL z?({|x0D0->F<3ZH>;Y-mJ`_lHSv#3}Ii~c?iL;)xvXROj_4ry3!>xbhwpq8e^_OxJ!jbs zp|)SEU#DkLqa}>WFAGxQUY)m~I_(*--=vjuxzg_}99FVU3~>9hg&hrrkD9!D4J!t9 z0b11}eV@&FC|tg-9#V%k?m6qp@U4*;*u9q|KH5uvD%saIt z>8mFf&xBS_El^Op7>0#ajV@pN|1~a6mgj1cAGGDe( z>rdRCLMr_i+XbLpe<%BUl{*$d34wc*lSqc4>g9aoYn3ifV6rhdTH+%rQMm)t#yR6F zP|bD6x4Ytd!RDXydq;MWgvV#py^C*E0(;FFUt5pTXFikc@Tw2v)p94%cD-)$ z598je5z&@DBnKHu5k?LPJa;6*TNx)cW+wFh(j2XEA%-Wl;H|T_VNHP#%7nBc+WTga zqlLkpi-kH4o|(Y!S6A?U0tz3^oDinLu~mTOq`HDKO~$e9jbx{etP%kv5-PjvZO1s& z_;Ul9iCHcn_!3vRNPIgWI~qMwtU!}CVBv<~J{T=-?{}MNY%zADcdTHc<{DzL1AW2< zWD+6h0%;uMzQFT1g!as=j8obait{5G4E>#HqOo~xH-Xvl&hk%KbH59QoMf1tRS4A{ zx8x!)qDgbzid^c7+y01i$B1P%ER7mWd}sm@6p#IY={Vr+s)5zv(u#v5C7ebQb)N}4 z(>U)uEa5RZA~pY>HigYgr^wZbxW+}k4oXAVF0XmEq(-DyYSc`1K+jCwC4oZjRnu&z zwG7^vlcU39ZDp|VDFJvMM+84P`WoHQyqu1lXv1}Y)>w?V2813cI2{Zg8VY0)RuppY z9b(A;@SY5F*e>G5W)->Ph=2;IhORcoiUMP_s-xC~B=5RB`q$ zD|%~Yzjh6zg3_**p5!{f0yE6tQDRF_89za{u4R^#Q=lWR>j9l*KP28G%y7u@9E{S@ zpwNZVP{7^njZe3B>FoTZZILXTVQuY6g#8i~4qRI;^^vfqpQXBuS@a|5%ZP?+k6;(X zx&WtU(KRU`;_FR+kIu$}rqN>1uUOQiuWU(2%`%qa>Y*s|6@hiLb}?L}I1EP{w%jis z@Td9eA%J}=-<9DGOLzPkRjiTk-CDqs)Qai(Wybg3EN|<5oOML<>$Yi1^rZKxonkTD z%Q=T05?>qP3o33rA;W~GGeU8%$li?7UiuF>EfvMwehRc=qb=_rn{4BQKxE13t!RKm z+Gol-TE@L}HrE1uYKlYe4NTq-$Qid(39N@tX0j2!I~91IMt4(xFmRo$5E}HUS~IGR zZ##UfByXaWx*EaVwd}_`Rv5bhyU-te1b=EIx*;mC7C2*k?$#NfBoY)>pz=A-rgYm8 zH9(szDoq~k`V(tn<@7JHCWXnV8HF226NGdCSo%^weZ9}F?_|fee^hh_0?XC1xJM%d z<3l>NTM-421gexrLwMVcduV934T^^)kiINjS5( zh%7_8rot?BUM!n6c{qOwFp3egI6wGMeC?ZjFN{S;r<3p~v$i%^`^q;)2jfInYqLFg z2}N@_mk>q%!guB3mwm042>I6S07_!)OdhWf*=2~jRT}|tlX!XrZbJW+^~|OU26ARP zI0k_(ZJZn7ujo{c zS179_`!iTvsjzQ2x%C;9TBrO3?5^YxVR&x0VXXCI zvQ2QiD0zq%F$%kcD*B6xS1uZRUkAcb#ZRCMMgRRbI%9Y80oJSQ)631fGs+ACMop!4 zGLPZK4=rE3-qf7oc?g@ScA!Htk3-Js^D?W_=2;zqG+9f+u&yc>)Z&C`#8LRc6F2Q6Q1+r%ttYT)A`U_r@X+;u&l(X>jnmS;bY)Y=I2w3>==%cQ5Omu{ zXH&e7#7h!-BUyOy9H4nLUYi`fyXjoehLM=Bph%)30b%5}88AdX1-ZPb8M#9bA@=q# z?A4x4ZC-;it|VeMiKjamuyj*w>Mh*|=*Xug>SqU`TkloP{7}{J!&>3wW@Qp4IlCCK&=D*%McXsrBVORY0VV&hhZw`8~+Pjg;o|Ehzw%<>gwc_ zkQkx4E*u~QiCSib+NR}wP&c0cZ|cT>6-jTf82sWO_{Bl+ulOwfS8xyj;KS~ATppie zNQ6iVUac;J+zWUuf-m}an^EYm_4|d?;P5Q>jhX|3kX(Zqf)ma9K1F$9nhmY&tmtib; zf5{sh4PoG>3Y+3>Da!(6WQ zV1ukJJQ=Wz$VCX)8AZAetyiadJp(r}n{3@pyav|WVQVHtJl}rjmz(s~?=+%A11*yc&${F3H2`jLZM(QFHFOtcnWwl>Q2fW0Ro8T3bSKhjuRR4( zD|Oo^Z-_d}b03;O1+Mh6%q(Hcc^_`8zInxqx6{Z~$W;VAed2xhdg^U4p|5zbEyJQt z%$4(=dModMUkbg@02O7;ZE7D*pZK%8-plTJG%o3oj2n4L7*-Rubs6!fpNto3$-cgV z8`)Oh}$7DS#l95jwp0a={LQl4Twk4wg z><#)B-#$`uI$4--Uc$x)aw8^qNkr)GgXa)3nU(=3&*5M%) z=2c;;bx8m1dI8yP`Ti0z(l(jF73U|s4SKm8 zM|G-qoD;t_WH=b<;a)dla!+}C%%0;{Erd+#Zk<$ZNTg2NLuV%P#6)&D?DiWAgqOZ+ zEtuJ`CDlM?@b~mBw2}?t4usJ~54c;;sx9p@U&BaSdNfMwZ8`7_tcA)Q5vH))K6>6N ztdWS^0F!`6YPT(Gg5?|Q$C$66a%XIM>q`|>7l&_G2Y)i;PT7>18$e@6rS5Cbqf&I=bDRt$f zhNA^)DGelw`|pNKuK@fk4FZ)XW=VKLI)jd>>OOeGsBeSz%Lph0w3=n_* zcT|XN;jMiTCT^G58KvhUqzBr`tP1Bg*NxBv!!>c;indWwtT3S<$ zeIx?2OOw9`5DmOTh={(;DLF20-v*@IH}KeGow`-3wDWHU?rv-{4!UUAWqvug{E@Z! z$k9uj#W3M*N94J$stxb_CZfD|zU9-)`^LLm;50oNq^f)~vIjJX6%06Y;tf7R-0p4D z1)0JQ5=EC2QgA&YA#_5Ol!;#-!4BT;#OS)5F%!`gB*lLF_*Cy&Oe@b&?$>)P82v)$ zL-i$>WaBRKXP9}<57fShb3-e#5rZn=^04+dN-s=6hbAn!2C_;0e!;fc-KhV#o?=7X zVk70$7RnuGt-9C<60C+u?pVE)?{1Kk%Pg5Dh*DBuQulhT@i+ljI=>ZS8R5GQNk z&Iqe8rP&rugLVaWw;=I26G^jyr`icZX*S&qwx$H=mW`bPsYbwy{*l+_uY-NF&ASEirvjpskfp#boE@W znen5>?CgM|B>(xP_a^-SvIv1&A?=;EU@Wu4P0k#n!{Z8Fu<3VAUHkK{dRqi}k!9Cp z0RaYZlIgp6n$`25_AdhoM3*IREt{(9+16r@HSP7U8H+xU#!!EF_^xKyZ0*Yqj z%|)e*y5>^S;Fq&GmCP0~5$7)`?vN|HRC%!uw8^K&zRd6HJ_}Lzt$~f}PR2Y6&TO8e zUSy$ggf>3XI`HOccVyJF+K@iI~H@PsRl)%_8vczUPHpe z>KFm^71&p&wq_qF2-EMxXl2|cYIY}cEw zD>=ubt>C&Rp4b=Msakor68!fHmLi8)m{>O4e3}#MV?OG|uuUl9$DS?+_kiB}^ZpHM z|A5zN3UnTUf|{`{>ZJFjjQfE4#We3=yQ}l{s&h;CvF)*?E@oFL(Y}nRw?NC%NFfkb z8+!yVweamJ<4*r6)PZKdXgI3{$7ytQNP{Wu;hKrg<%Q`nfcGUKcPlwnY1fcGuV&25 zEs{G$hB4YB#<*_%laiZ5+#u;qj2P|ua@a+&i^(wILx<_P443AeV&CYpzh>V?-MwVK zU&6j7&uRY2A;n9iAtJOuiqWS!_q&N_?1gLWZ&aesF6bn>l z*8$_~pI>B=l6!b+?vY5|+Gs|-Zn1cXNbivnpYZ29H+(c%4v2SPsOW~j`>(8I4|k-U z31qVhtBq!~M6>P8ynV>Mz2@EHTocNKV`1Ejd?H}r_gfl&@a13(|w;? zs^s$}8L4y?p|p-{>+zSEy>?BwtH6&Ej2CHBizMMOzq+`tKV?b&PkZkj6xF)4j{*wn zfPxAlqF_QYC`m;J6axs7bH+dpf=JFNVn#*Mki(F}C_~O5pk!glStSioVE~D@7vMhI zbN2VETVLH@)&1k_s%@37nOSSSq2KPOpMKhl17g4!g*e*HQ|JRVp_9yfab|G7mcJx; zUe2sH-;PKG3YB_J$kN!z=n>96;`vjbU?S{ zfwc?To>))G%zQj~KE}w|v`W2+i>-7Cxa%+M=c*FSG!SHxN~ccZXW=Afhl-uW5D+DDj07| z1*UUppX;owx{hUAI+H}EQT>O{{_F`T79Q3xA=9_i(gdMcDdvO`GawrmP-E$nP0oh~ zW+fR?4d@vXwMGUZ+MTB*RV{g z7)`97xxHGk$lXtLE(^U5y|+;MYPxo+XSrqEK)djiJ&>NhkC(fNse3Zasg9nS>T=X$ zZW=K^6ja5y2Y0{dRN=`P=%M=_$V>d=(Or!x9_wrIbSVUTkU{JKp`^E@p)S9h@~rP{ znuZ&~wVPV@gYnYthLcI=h}w;e6Qx{FUosxsh;tR#VYLviGUaWCy7H7n3s1ItytbhN zhR;@kuNU8RMP@*#z!)2#R&!qFbBk!}5)MzJ^r|IZRuFwlQ3lnWWj-QN!qN4$^0}-G zm9UK5h*{?cY>Iz_@{N~dDQ}Z2H8wZG6Ez6vwd9>QSLsn6g@kQ9(z+KYP|@^K49!Be zDFm#q&zycs_1~O3@N4=Mxb(HKdqN8+ckmS3;k| zT6^J}s#ik};?+Iue{%s&ZrY#s;QUmUODAm3)Hww3c=U-9&)PoGnMqB|xz}IZhLs8O zewFs<;Z7V^wDgO;o8W;X0yf!T)i-z21~~CV1772{LjLA!M0vv}xDqvJHt?3HuiJyY zRBhPql!}2%^GoMQ)#FW%wh*l0kEP}d8%F2@AV_a@J<`Q)gJF1bd2G+-y-lpxd$+>UO7(~LSUDNm6*%~%I_>QC7*b(GAM?2wXKc|bUv%ZIM`55)Uck^zP z05+*Ayg$gbal1<7Z#th3;u_)8V(Px{H|L!$1HMyOJojqDud#riz1tp{;`e`kJ9yXh zyEGlfFo2OM6&)LsLia=+Mnq5FS#raDLr$p=CUK4QL5#ni)&8hmz0N-g3>f2a)Z+QVuoLI6Y?S)ynMkDR8wP9bw zqf#A%bAzsu>r*6F|2>HorEcXTH%KcoB9*NCxndaoqqg#4f^ z2z=iK&0?NVCQ5#cGPIXO*KB{WI7B#cyGfuRmc@|b`pSLc-ZLg4y^4MUaCgES*k zn(<|3EsDi`*P`&DK2|~nKY7XZisgz7=k2ji^ZB-GxVMEUGC-D2^`u6fujHx^*YIH5 zuc;(oeYSX(-=BWyyvR1tZsO>nKwGkX<Q4vpZh!}v7epi*j#4Ai)1M{g^!or7Q0B~S2;tQ)8HVFUg0`J`j7Yf>xmat{S1T@ z+kMDt8$|_^kHg9MZ2R+HGcZt<7kfne(WIG_kA%NI{nz{be)2(e^iJGL>W*d!!(N#XTU{`G0=$f18;n;=W~P z>3)yGf4tvc6Eu^;f-IqjicZj2W9Y^)7%Z;sFdcfRMPUy20qno8yN!_^F^O@H#64>I z-_D5lm#eyr6g=YNb&1aa!R6Y=Gh7k7Cc!XkJ?^?dsL0r-O#44R`M=N1kCD@hR1&|} z=kNLZ>;3*(SnjP4VF@{(=8^|L{37Re@<4r`DA*t}w#`;-wCN20#%=z9i8pi08+ljc4-Or0Y^}LpZ9vHXb}bRe|EXG+M&AALb6Zd3 z1I{jkRppz1x|RiG4pr*Wuzed&@}GZ1S;LQ(r=9!9YX@M)&B()*H`BF$dq21-J>+y% za~UN6=^6p39csK$w$huv`({+J^)_DRV2MyUU#0%(nid^|WRwr&o^HL>-`_?d7k+e5 z?eITd1H}@JEYAkc%{chafkOeef~)7*iGR9gb{WR|K+}1)%}C_$_w&5;e{~YSpjLiV zvm)t0=Cf8|!X{0naH`!-NzYGiO;P9X+Rs*)10Z9o*!qesluS)qKpkZcR0CIIgw55m zYnrh#mOsCLPM@CYE$D`Jj{5eIH%5=vI44r=XP0}B6@K0}9?9OcrR!dRB5#rf^aqup zFz#$WXox<*r(=R-16}lQh6q%)UYe#Z5C-TzBQGuk_?CLB;&FC4 ziuzYMO=&+R$|N zm)P5p$Ip^ko-^`ivwEz&kLp$@eQD>{QuRtC?w!(fdv)YO8v?Q~g`@x?nhml9Kl(TZ zs9wafKn^W!IZs`DHa)w`tSw2I-Mlqfl{|LvwT}4ym#pG_Zui!@`_~R!*tf}%kRx|f zEP#Yw5C6Ww_7Py(kCh)>?Jirn$7l8my^y-lWfX;i{GfPN z*H$?+Nktp5=jT)Wru4wGF@egZ6`v*-ES0vczzFUaq{PZvWNcHbqJ*Ex_$s(R?R)U zpPmgOz}<+feoR$x+{4&(--&qnNGpK;v5+*qr^(4*ym(t1(kuQSb!M`zYtk0+&#iI9 zg+qV!Y^cROaNi{6)zc3wNa$H2!TX#ZMeP%ez9bIxum07VuPOXMCQ`5 zC+=TbXm8eso^>d>%MVG%>n{!tx-;EtiGLaHvG%JC@|?MkUq5lzcOGMN`TCT-CySVI z4bpXip}g3VlSxM&G+n;tF}n&KL?@tBH1VsXXTW;kvwW5cU)mgBR`-t8p&Np(bLyII zg3V{+2Yl1~`pt2RCd*4w$mZ$W~NPw2}6HLOg}BDdvv z5tn(31-Gk$ALcSKYd9$x#wSawmpxVcjvTN<3mu|lgJRiC=3q7c2jgw^t3SSd^Apd` zvmMFz8+QoUb42vr*+tPs;yI!XWG693`eQDVkz#JC*Pb5`F(Ys+*ajk97K~y2s2?G` zSbHm^cvXL-;w2fkv$1pP9f~Eac8Tja@Vm8owtk53?o}3 zFt>8H3$l5W6s4fN-d=xNMMGP;g#Yw5ZV$I};ege$r$5q4A z-TJ2JLZ0czbC4eB5^TKqZDmeIyF*d@9psgtTGcI2mw0@xt)o9j%#b(RuF=|0A*|>( zvlAXnWFd&Nbv01i>c`Yt>LhvVT{PafY8QK$0mcWrN+~q^CXkQL0qwr_%lNFYp0L7V zy22YW?gib0h;J&fjeHvxW5hwgEHrMCI zugV`ycOD(l@;S3~Cx0!G#R}T#Mufi10>j=7+eGTT1O?2=V&D5RD&`Kz5eE&Y^_$9x z{kps0f=H~G1E_qK#36AhlV%t08QHg{yQo6QDO>H%?1EHJ&*PTCc+T;q@wbO+Bc)3u z@si&2j4cy~SAT|e;@^!yQ)in{{GP+-aB=(h8Zb1d?I-Q@yDm76mpo7sXPluZ+jeD{ zk5b(F%(j%_@o2Ii(3sm+h89nARd}(zWUbOA7Q?S^QzQ;&_Iku#F@aakNbcH-RfhL+ zd*e2IIpxJmO+TiTWrB2Y$wp<0EFaGtz=-)D^wT&2^#N1 zMirbl33K)l*Ms%^bI13(HhxhurPPE@;{MBL2d(Ba^ljQs?8M6-i)Ux_W7tv z%louhEUs)}XAwWWi769)eonEY)_=-uVcEBVW#x-{W)jJcyW@VWr#Aau-;bmY`7%#A7b?QEdlkmQJV`wfvOe6(lVD zLR!E#4c-q6=^l9roIBLc?|XA0b2$Ox6DjjSzIR@ouUh?C|JW7VE7!Gc?1f;1HGi9b zBOHt=Tu0FBE3@&!O=e49TVWN%$V0;ape8a9vUGC9bw5!eM~;{Hqz8pf`!}F7Scl#r zGL|F!0oMFE^~Pp(fkU_WL69kJ7jp9MJfu1@8AgTVO9%Uf4AqolD$1k-}C{H)&WdI5g)Z za-V-n4pKr5&tvy<(WNT4wa|JOr3-L+>ysfi_yW)t_H(H&8IEVrmmQip@#y*ePQ>iMSNA&WL}9;3568rgGO+LJ=($yi<(H<}iI`$OQ(8mH7fa{4dq7b@Eii%6rUWdI zS7r2PhFoaqVDbIan^wMKG)B5(U+`L5m$>DQuI%jA5fm?Xc@wZy83AvcPq>PnbDRVN z-oIN)TxD$R?Zu^wE^cNqEQ5j`pnM_XIAgGIY`!j0%l{m4Z^YBwPNPswV3;Vgw>3A= ziY=C|mK0Zyy2TVxIF+mfalCR?SqS(En-%w*FaOh#81d{;KR*2Wu8)ee=-r}@xiTXS z;UM`VmmIS6=pwFIQ6Vh7U!0+Li3Iw&IGr-jwAo z{D#zW_+kB)E3M$i4XhC_bL$=5NuH&dUi`~Qgm=gh20HDA|0zVsiot_IaG@e#?RI)R z`=eAK4zQ8@A2C*H`px*G9Xf99=!OmX_L5ecaFwQ?#kQ7h-1s*x=cjW%@O8{GO6vNt zM>v-2IgeqzGcahu=A@W($zqA^%b_#dlO~kl1v|`D#P5t5r`65F(b|Q$m_~fWpzE6k zyW?zO<-=@3lb8*@2S(!x?fK>jh2Hh0HM)rUbfy=KdXCZE)Xz)f%yhxJTOaT#P>#Q8 zlR1e0sJX0V_B1V9;>*vC)wD8~)<og+pMopXMx6~w2j7aUa;*+XaY9MZhq3*hxW&dgNi!hR4s$Md;PljIbPI(^7vZT2P@woh|YZmAYVXr6S zbZaBBruVsgY^__qQc^H#9vEoxSlh9+0o-0oAfC!^cTo9|54lRUqP#AF?Lv319(xv{ z7R?$g(qnxkCs0TJh0;Kb>@|jBA&U;&i_96N$-LMi2Lk;*Gt0%rAK!Xgz7Pahuci1Q zOvU&Tqr^#|KTQ3Y9gII@8W@I&&)*^M*KG0FATUU;`dd>f?2hT8S*0Z#>SJC@YW<`HSd{8hZ(141Tt!cqnn9|24jhL9D zVsmo07m7jQ3ASX$$0M%=i^OGUfpZtR6D9b+Jile$`IcqdVON{xD0-1G-#Cl@2a!(0 zOfC8!TR+I^)2_dMJx&oaA5ky|@p#8VbUrf>B$je+y(8@u|HU_(igB`oCS3V+A!>rt zemcgxSe#4um9IG5em6}U&f9Sgx@2K2(|ljvU9&^4@AS93N+7+C=%c;znC8YZ(`DB7 z{i3S--4CSX0p#IE3eW|hW9re;x9GKlQrtR6i3`5j-Hy<{$72d zIDM*dH+&-!e`L3OD*uXG%!#ZWc61F!E{0(x7XY?X=YBP>VgNjEzK_io-1S-p_ku^M zv8l^oFfw76c0yETHrbW+eC_0%29Aux5uAK|58yFc$FVQpB*;fj&Ch+|*}sal22OM0 z8}lS;c0dX2%3`xKj@3Ai?l3A6pS!pEHF_w!tHjSx$w&Qsjq`TnR@Pjh6MC70LJw6g zUl8U@J!M0P#R=M~h%?H8}bQaJB{BLANVhF8?3k-xl^*h-B^aFVbw%GX4Z4|5ZZt=f9Vl zLp~v+wqoF)e(+y4Eq_9P|Gg11i2t7qoh#!83mnwyvYbi8P9*RwF~#oc0as8205@%j z3MV0u=S|z+s7C_p(HVT^PAcNLfTW|Ni0I=j;`tDyzf|SY4svb*u8th1fuIG9K?HOY z-e=$jGHdfdWzDypA8&6|(=uhFHGIa}3?gKvaC|&ZEBsl5FwehUn3-XCxPvykQEa)6 z*q(7Or|152-xGJGHW#AGW59|H2~QQb&}q*Eimbf`Zm>7)A@mk~1Dxf~HeCl@dAn!K z2gucI^bT(#_?P~y?IPcPobd?=I0_oSas#w>9)z&EL1byd=!9W5Fcv$3uR1K|3MB-Z z;5eQrN$(m31xOLXdG^hh3jm(1DwEyq-+=u<(j@|U8=#V=U_P=6xRz$OX-2+_0Hr%Z%+IFp~DTVfB-jwl0 z@c`i7JtF$Ry4uj(XS)W1x*{bYMvW1cfPeaC-Rtku%C-o}Dybt&k@RCR{kBK%ofCS= zG274Z!VSA>Q`%&p{vkN>JwRi5UF0(Wg{_A}#c;_XMJ>$&)GYCaftshrvy7>6--RJi z9LW$h;ZM?$ZCC9*wbZKXklii^V6xB&xe*}An)W#aPcgmB0+h^3U*IM7H5!M2&PV}7 z<`m%9M%<}5iL8-Y`y)VU2n0nooWD~=b5^b%RcE(;;J)6g z%NyyDD0;|LC=ncYZ>=1acclQ$8lRAS_25q1^{$0}kCJXj-9agUVOk>gBt(Hqp4A6d z_r+tAhjRLy&ByyoJOcD*QmApoi(jc*lu@MVx_E`}ARw3tjPwLCq?usBYi{lFX6$o> zygQ}L>NfYL7tolg68ZB(^hlWnPhl!9KSX;Sx&>Q&{rHp*w>Toc9wOQbsAx~ImhDJ` ztlQ07UvBvxF+!yF6iI3Z3(x{F*M>`D*I7~?02ZA{n?P)%^+u=GPJsQa4h0eE@vx5C zio^s>cBPvGP@f5SalCZ@&t^x0_fSyTWv>FWpGc|4hGP!lmnACDyDdSUHRqOlcD%s| zEJ!>Q>Lhd`9)#6Oo`?PHU?kfwUOAJei%tP5&Hv!>Beo{tVy!8|kptJTtBxB)w#NK+H*KY$g&Y?J^ zn`6|q-K!FiP>UjG64xTt>rMc)BSiHCy@k5j4+oFVLM4FoxZqBl(DOvFJ64Z%Hu4I2 zo~L^FN>=VWxTcfILsnu`md)oa>Y;2^(@Gt%L_NS&%;Tz`Oi zhnJW6u=37_v&7j$Ia-T$h?eeT{&+fsQ%LVnkXDUOz3u`1Z*|BHSmpci=Y8LI)}PA+ zvpeBOL!@}Wo0OYXR;yZ4Blk&Wv@?F$LpQW4iOH@^c+B(-9OT@KeFK*^(_hj+qT^D1 z)xJsL^So5K^U=eTyS2P(02VX>-Ab>}&#~+6`#4tx()FiEGE3)2!oCIG=M2sT=ukHL zO;;tO{zPCIWm-PjI5aqRD0^wdYB%YYb zh1!>7-D1XKCMcCKKHFpc&@@{m$Evqy{QDwwiS2|MpP@aya2QyYdXk$iD4c8h!an!l z8s#gkuSuE~7&rRu*TC}Xbu~9~P^221#^}ab-vjQygB`1gMes5Kp3@T1TI>qu&mEu$ z6|uxDcR&rpWV*Vn73NF4VWOG9CmJ06p0unst$7eq?nO#sUM&N*J^73~-FiK((+SZB z?D{1zZAeOa&!y9P|59&?K#jeak1mFUjX#vqcKJ!-kY8Ezmw{rSyvr-yLG%m}aZ%fh zRR|1wav!khW~7I1u}OO%pJ+qfBEDs72>F*5gWP>YkU$qnk6G%V-08`ZOaoONJHyJu zj^-*H#9|*^=DtgtdeajK-F13SLktVI>Yr#?X0&rWSS{_X91Bis`1FtiP8uQ3v?ctI`S z%!hjGgQp%^)H2lOYdW6U90w*Cm7aZDzMjGeWqHZm$WkS`Fz2-qyXh|N+_4}hpMxkH z`r++q@5siXT<<*~*X?$1^4_I~k;$xbnkWy%4;*no%3m2^TWHUg7RFIRv!iZ@NC!0+i%Z#pW$*H!)=lc!{O9pJyje z#1%cn?+Ba^Ld_q3CR*BT)UB0&aJvLzu9xrm-2YbXCr^D#=t^SKkbc)kcSy5+uJ)gI z;*C_%SXf=?FBo5gzNX5|;p&VAhL4p8<%A!~Tn;o^*`66W_X{?K&PdT*vrMm2X&u=( zn3_x|W9!*1&%AEzqGVW1Cd1svt)palH?B!RX5T~X+mL0up@RN$673ERaDh_Mvvq=2 zsamK+Hm}yK8Ko-MYks%w^@?q0oHp&u-yGzq2I}w2Sbefq%P1DA<~6A@mTOCnc5d8H zns_+sdr+7_AJcew+!J8<7t6Hn+9Tn&Am`J?l09wRt}gWs0g| zahR`nV;vl1{ryJVZGm^3kEg?DNlwvg=Qbq{scJ2 z=pVeyTT(k0XK0PepqDlg=dz?o-~G9wHX~*aPRImpDwi2SpK2mVf~{I6v`tc0UULOf z)^GE(5is3{t&;-lP4?k%9Qz?EdFKf@>&Kot=G*g{^W5Ea%T5pny;>a?getNvyYq+K zvzQD_I|mTxmkxi-#nCU(KqrqPb%tupnHbB$)s$yz?4awzcdX97K}Qg$=lbKC3lz=t z;+9C`#$9((^W$H3J!Hdn&Y$2W^$l!QFudae&o23J#_u|kXL~uIU#;kaM1b?mr!WFn zutYu~_5MNjH3SICMv9g4IUmsSpnY)a8G5R6k>>js21;}K-MiOTr#%YRTWL}yS)4xB zXDbEAz3i#rb$k{9U@Qp?WyLpIrrhgUz|Z7Q@EwpW18_CAc$uDW@=R=q=JCEIXsCu!fH&yK@`_3FW*y z-+J#J5}vnqfmDZVSrkU+`+odUy5{wMD4m?jZ>9e@y35%)S-&X;g)2Wc1T{DYE)(x1 zyBvk7WitVt31XshaWdq)vAZgRNy{uGlYF+fHqXcaa^sCYYGp+VQc}!y-&@WJ^+9EE zMykt0#!YDog;((2=ba0Gmq&3)9PQ^{ExX3CxYK)^k2I1HGRq4Oq~Ov~T8uF`WsVB%Oy*wO34PtJMYp2bbuD{xqkWe>%1_T5yjl7c-e}q#%A!(BZonDx48^u3WeVR z&f!LZXKVi@AFFU^+1M8s%)RW5sC8zGbX%$}eqsp-4tNY9V`r*2v^f2oz_Ls3>_>~^{L zzVZOlH@(2dd@OAKICT!3I+pn?7qN<~+$-HCu`ewEGKkl-zO@eSRfo7t2GY@9_h5qT zl-)ffS(!8#0oA5fPR7N{yo-n{7THd7rCx|;C5usQVX9X*jltTqKLscuT}XiSDn!6g zn&?G|;k1Xb!OW{FD<7G=d%blCs?p2?T!f}ymXmL;GWrby=Rx1ivG=?*w2S_b0q4bL zs!2$;OXof0fM@Sru*d5>`MtKY6PI&MN8ZCUvx1S`g zi61tg%ut?*pJAT}usjtKv5zCi!V=gz4$3~zstj;<$mC|v7QGTY0+c-!rE!0gGPCU_r+xEAj>CaRJX z^?2!^{INQ%>tat3fQ9alf)p}}wOx-QO9Ra_Ck+S~&6xUhnEh4)Ptt&`R#!Ze$e^Kp zD=B=E(-zYk6T$;A)6M$FitCt{^mWe7{@Y29(Dk0XFbye8H_QgvKbk&P&JIyTanI!q zBzd4(kjOFf9BP{W)%IiZ)=?DHlxLjp4?=XMrC`$x)h z`24bGYpf)#HuNi*gd*XLeaVP&c04-dgD`JB;cbzDeP~rW({+sL1AwH@okcuyM+&Tw zi|Lq&QOmxM;JxRamKH1#&~|({H(=YfF2npCDfw*>g2Hn*p*BFyRC(j;25 zy?Rz5(|Ro6N1_*cY}4g^-lIYVLZ>W!j0a1VsuLT!aOjH_3ass^d59Zdb5n#;U&|_m zPH8=Ut4s$(Q`Exp=YEs;7e`MpHcj3ens<#WaYbN;!c;K~=;eaTryuAGH6#@P3xdTJcW z?++;X-L9&5zqvtFpunYabyINXPgdPP7Jzr{L$|CqKe*-mY<=cm;w^vvyB_ciopf2K zHtV4N{K0>T^8ESl|Gm-12>*BJkY(}T#qj^f#c)Yt`vE>ZVme;2!g*KTZNAJ?lo03N zGm=5lgu+f*4L)02de>e^c}Yd*-9)@PukX8VVzNG+s@Jmc_t3LYcGtA9^;oYs#*<^= zX5JqYZD-QiB%0kOUVD<(mzz)9;OobG6aMm59pF-0tSs&lF>m8RRBIrju4~h=l^yTN z^S8uZRv-UzC-Xz&wH<%irGLqn+1(sS33+ZY@y=)d*Id8lTFiPweoZTeN4c@hvLH3B zzxYjB>*J#-uX<7Mbs8S+((jxZyw}lv&kxV39Ixi`3Xp5f#)weO={{}Hn$fNlU=iKa zydv|u3&1p6Y=h1Q6Bvf0FC1Sw*Er!M^DO_Xn(VlC<15)zKay_0 z^{vWHkKl9GjPS|6zbFzAIIFf~)sz^$+Oppd?}=nVXg8A*;d|Th+E^3oDn)2slnRS)gPv+~yx!f*- zn8W_dHO5X5{zyL3cgQ?-@Rf3~su>VzRQZ<2Psy*9QPCEE23PoqW_3c?{g}zZS-CeP z#s_nKF4LWm&5dl!Fd86D_ly6u{qlQk2&r(|*E`#8Rk0ptbi7}8m|58AR@|x;A^Oc^ z@#RdZr9xmQPD0M%#&`;>{|(-5PoC{0@L$sJN6a={XtW2FB0SWW*F)BN*oa&Ua;#(l-Z-ltjgjZ{Yt=S!dbqi&ULsqD3;AI~ga~l1P zq?+kL+&f%<{>0`SzS-DWEGvsSh4Rci^N*ZG2iJN-wX55Pct@B4-$fXfrU~KzWlaM4 zMvC{CHqO9H7utOx$&>ga2}6$|3X*rbnVFN_ar-%8{T?7)_ML`7s(B#gaXTe^d9gFo zBim~mKOS&~p4x$g7I|J$FM;sjF%=dGP$^ zLyCM&`8D4a)XHDW9bg*TAZwYDCEeeo>(zpAK2Zm}k=#!Q6wzxMN+D^8-G_ueMF5MK zFtWC`P|^(y&yh8K!L0b3A-9p{I>cE3b_MEl70scz-Bc||3m~(xW~^0zn$5Q=&F*Z= zG$_lk~`4CCo$&fpS$|?TqXnZ)sJ5|cI5ZFzJzye z0b=xp;0wqr6Nbn@lFNkp8t#h0x0pfIhQ;%vc~@q7|Qr z^@EJXt$@bK_th*`YMnsF44uyd(UbZ<$8RqQ)qSu9@gatQSLZ;}y|lZHU5HVwr9hO(Gh@a?@lH(n}dK>a+U~T!)1JaDdP~mHvjFc-7C0jz20HyMde=?(B9f)Rg;) z^H6}gQU()VPB^v2c8D)c6I&AV7{c&VRL0lGxvP5JZ`tBPL{ zXqPUe37DlP_R3JpiR$AhQwXoW`=J3DVz%ZZ^N&%|!?Xhm3U(GHfnSCrUWe%z}yqYS%O{ z3r%nLB$zZa|l>-5Cl8v${x|tqZfXB+~2#e z_{X>Egvo>~APaRVN*)<{rMfeQN!2Vw5a->Xm18w2;?9Z|T{U&qa&AN5pkR?_te}=4 z8+^KKwIq;D52_5NlAeI<5zf^0@-pDomPn^X;<})*flo#z#Nk$*w{a&woNUr^MC2B% zAZe#*VO%_n;kJ0VyN$nK-C85r*|K0Vdmi#09k3=siP{Ubz-v{V&l}yyioqXdl3+RP zd(LkOUm8*`9yTz&(S9n_;;sEld9hz{X&-91TJ;v7Y21b;88LW9Oap86HNAoU0n)fm zt;F4}B{h9UPg`BrE&u>)wW+YBTrpN5AEmNlZB&juBsd8ISL<=jFW%3*A7p#9lw1A| zdW8W=J-)DhrnXp9dLn8c1<$14sXM}yubffQfevQ+S%`=gP`s4X*C88xP2gL~RXM#) zbe)XC5Dwb_uWFf1$S={7TtA48Pp`1Ud2aMgRjf5fFk3+FBpA-Kyuvgv%)Ll4f%Uq! znI{&Vf)C>{k-zxkkuGrAlGfY(X-HSEWWm4e@~(ODd)H%;#BZKg7j@X#(b^MEyiNPS%Mi{vPu zhcP-9g0kXHJS^4b!WJSEKwB!5#bf4$sf{WOSyB_| zsjA0p5$c@_*U3$p3i9n-$dydjl*G}x;uPo)H%5a@EFW|KG@D`v<+WR z%`O}wfV93?Ew0qdc~N;ZaB}P^>Z-T3EPrAOqJ<{jF;I3E5sW*LS3>v<+I}W(OA{(; z9?o3@&`@r2X|z27Xr@`fPZ|Vww+%2-+=qt7=bMjxDar`QoMvsInOi{0 z^U?zU10B?njagX3^pga8xeI9pVWf$Ub8l_9z9Vdj=0HlWxlT9`Edkzs|7&(6R3g?m z!s*ncYhIueq{H1spnQk$9qY!lpFL#*;x@qIY8^1yM8l(#Gh3J{B^2MJhn#j}rk3EDlzSGGJs!nHN zw5H{-_j)2MUjxR7+fW2U``{tP(+@Wr#dpeZDeG5e)7&Xs)>7+T|D~tS)HRJ_;TT}$QMIIi;(o}EY)qm zjuT%VxgcWK2j(rW=0))bs>6^7lxtfW~u{weNN}>8VB)X8b-uA zGd%|56yWp|WO(v5)w=FTd#Po|@BSi>CK2#2zhshPJ*8J4EeLhNIO$5oi#!-rDERt} zTZz92dMu`D=U64J)AFNRc7R6d{hT1BT+_Uma)C)-QU$HJ3R8L&k{}2bak|$O<+bcO zOf`c!LhqWMc-zr+2ApEsDfMAj>a zLeC2KdO+gl77^!KyJwbEy_FOCkA+s?Isfs{1;c1JvDJk_AY8XlwQq)hiYHz481CD^ z^2kC^M1w?d9j(Mu1Jw084~bZ4e5&m|(^aZn+X;}}n8>%bedW1<4|z3krNCr&VGKri zG7!)BJ7mk3F)DfOkPDs(*v-23xM+1=3dEYsvectwTV3XR>YNw)n&JOsij2TxTgbB~ zKO{$sRlIFB@iMyirE!|iEt*p+MShJ`iVOu+iYzRwH`HiZbuP6PU%N8i^dZ{LBF&?w zKNbBoxgFeD9Hae{ln4xQxE+hVJY7_5b9 zHkm@?+g+i!^=Fa93);AZCw{q1&SUK(I~ZVzE?|LNL&xK_jPo%F}AZN2P! z@arpUWJdn!8WP_GaDN)#vTwgVtc~dXHllYF5Y+Hb*J=*Q~c`FJAFV5`DmPY#~SOM^kDEnz(Vzr1P z%&lY6uwPT{#@nVMrFW`4x@?#wEE5lLo$pO>n0bCY)Hv&mgdg$0Y^!>=gKU4!b`5L~Zz0v6 zE04@efRg?o63&YlH-v?uj{tLrkC4or2JGnD+mdekHL5*F_!>S&W+35-2bZ&?<`!Z- z5Oq8^onu3QBKHr5yiU64*QA>>jQN!2x*|9ZfER6he9QUrOQ`27H z1=+nEYJQ17=kik21M+%3CvZ%4c3`e$em)hN8*%}o85^R32pl4%(;&Vl9GWnfslG1# zau6OP2ds1##Ne!Bre?=WG3RVz5cXnro0hpIq|162Qwrh}x25W2)*|K1%opq}c*xtJ zOlI0h2?-ah?A4p-F^E3$JaqrA-0+s|tTqrz)cUcR{N569fhN zp{H+on^MU`$w<$O5Tw$L%%Ws<-qrCeqNdY?sRy#?qP+pni-qD8M~+R@va2-?)I zeD1k(<6Dcnx~Tf;7Rhhz?#jRBOO;AveoO*yJBi8UPz#hR5|`d;svGcP~ADGsI{t4W} zbIkSeN-gN0K+(!u-!m0iN4)}W)&%&l_gUNO(p1$nE9+4_^TqYl>L1BLXT!jTV>8nD z*Jux+3c>pnfk2$`BIhNJILc!(bgxH+m+k>l<2m=~gkLa)AK+WLIEiKYB+iecJ$aeS z(+1)veK;_`u&*W76HO1iGWy1G(+Q#s<>mWH{K7uBwB9DXtP!S`jDEAEs1f65nirCe z1<+~A(d{PrlfbF5JNas)v~~4bMgz{oW?>kA5u^e>zun|lxWvUQ(C*a)QdF;p`RAyr z)NumIs3Eb&LALCNmUF^UDe{m&ORh`GEi~tOGg8ti$pfqA058g)k*O7b7(XCM{<>VE zRqU_2W6a~&#TTbI&W(TxLEqm6$8Po=cuJ=W>gcjY0(GI92 z?|@Af)YaqGlWQ{%8@u4B%(1r;*o>03E(rUC8BJ&oo-PfS5X8|x!<)DB+0`87Ks6pr zw#p0lK0wKb%7pc5-tN~BJIiUJG(f)=+`v%BqI5KlNzpqts_H%4BD+WRydw?QDc?dZXjbU8@<<7B?61k>}3 zD0eu(s1!iqRVYmi4NfRsM`mZHs2LKID-kHzsmUJ~7247N{d{i#C@EoC3#`MO9D4Ai#;?O~a zR~LVN3hOn`>w)^N;lLemBn3|863ZhXTiXIPv@g;O)ZPZhaehQKa!|kOhIwldA?JTU zn|jpo%l?C;lh?zQ1^piEne2@_J&LQ?WBaW&PiXdLbyC0~1JmoF6qoANl&B#;N>3fw zKjcjVFa;wCCTPq2c3h6g$yX9C9|A#mO_DP+E^xmW?r$*lk*YKDCVV~+K6 zpIg0gHw4p!zDdc3miks?OKjsQng?9eCbNnjWh&2=#~G!3G;Zi^*AAI>7?;6LeJqtm z+0EF2r7Azx>GDJgBK;m5y`0&NJ9Hl?$z#jUxTR-r<9R7t%a=70XcRhR*5x7N;*bUw zG#hBY7d&_$@_dYalyj{wh|XY$?JL>8yGSwncLr8dddVL{0~c-VsTV2+pDHK#P9Rjo zpj}KFB~KsEfos0WcO=6=Dl-SQ3x^kfCqko6E%JaiQf67q^xOUV*Uf7;fD%*kY!}YE zG!DwPtX^QounEhiM(^g|G*{cn5|w4n*rCm`ju@EUl6rn*;}1i1q5l{4rt)2zakTiYC|=t_yZ&BH2s1 zu0Ox?@6O_rOP9!Bcps!Z43g5Z-NEP{dS|2%+lrO#h%)d$I;ET?!sfl2{inUrVFJEP z6EX}I_UVl~m;-!+27I=0)H^mm9==R1GOy-{hdS}$cRP)I?8cfa5j?%%8-7BbIm|p; z;~071{Ez0F@lmF8p!6qv$va{yTaX#*HLTC`XSMnIm3P_|Ml2={z5Dq_x#(1+Q%Gq}g40o`3%K|#Mh2XYN=@%N z=^u>VaL|fjv_gsFcjZf*rj+6@ntMx~PngSt)4Pw?p@nKv^tx9F#)u5bwOM_R)&kJ& zX4w-hoK5}`HO8A0oyNC<7vuG45y*|=#1q@nLYa-D$=iTTKPnR5*yF(IC}H5(reqy) z^mPrs#!fcxRXa^CI7#1oCv--3M>HjrN=8R^LC&k!LXgs}EcM*vH|(Li4HnILeNH1s z911ZM^(<)TTx@)Zi>j#_h9cg;H1d`DQPRq6h5G zg5Ifam&S?i$u(^;vF#e#X34+}CI4G@>iF<-Ym%M7`BYZI|bYv)EEp8D+&U z46EZFh@)`MtIib*qA`3ywfmCk>3d%d9|)Xtnlfkbd|*qWz(}6;%aHSMNn36CQU!e~ zS_}KrO;d#R()?A!73{7R37|d@lU?Gk_j^=pc0XLzJFD(x6uYY6pdD_Xqia=^GgPc= zn?{i;EIs^ZhirJnwWp;&9CbwdQ6CSPUl{KDe4^AjA-!v(Guhu>!AqP=!MJVgfmTFJ z$D5XrE1ts2{r~YHa*8X^W$yK-?SFgmt#0!n(D^N7sco|%+TVZtAarPZeD&0SJl4)S z=r&hR$PxMbC~o{%DfEaFJ}Kb!$M_;w4C0{^dVF!#pFP--k3FV{Y*@NFreyja screenshot

+ ### Nanopore: ASCIIGenome
@@ -332,37 +373,64 @@ An example MultiQC report generated from a full-sized dataset can be viewed on t # Illumina: Pipeline overview -- [Preprocessing](#illumina-preprocessing) - - [cat](#cat) - Merge re-sequenced FastQ files - - [FastQC](#fastqc) - Raw read QC - - [fastp](#fastp) - Adapter and quality trimming - - [Kraken 2](#kraken-2) - Removal/QC for host reads -- [Variant calling](#illumina-variant-calling) - - [Bowtie 2](#bowtie-2) - Read alignment relative to reference genome - - [SAMtools](#samtools) - Sort, index and generate metrics for alignments - - [iVar trim](#ivar-trim) - Primer sequence removal for amplicon data - - [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking and removal - - [picard CollectMultipleMetrics](#picard-collectmultiplemetrics) - Alignment metrics - - [mosdepth](#mosdepth) - Whole-genome and amplicon coverage metrics - - [iVar variants](#ivar-variants) _||_ [BCFTools call](#bcftools-call) - Variant calling - - [SnpEff and SnpSift](#snpeff-and-snpsift) - Genetic variant annotation and functional effect prediction - - [Freyja](#freyja) - Relative lineage abundance analysis from mixed SARS-CoV-2 samples (typically wastewater) - - [ASCIIGenome](#asciigenome) - Individual variant screenshots with annotation tracks - - [iVar consensus](#ivar-consensus) _||_ [BCFTools and BEDTools](#bcftools-and-bedtools) - Consensus sequence generation - - [QUAST](#quast) - Consensus assessment report - - [Pangolin](#pangolin) - Lineage analysis - - [Nextclade](#nextclade) - Clade assignment, mutation calling and sequence quality checks - - [Variants long table](#variants-long-table) - Collate per-sample information for individual variants, functional effect prediction and lineage analysis -- [De novo assembly](#illumina-de-novo-assembly) - - [Cutadapt](#cutadapt) - Primer trimming for amplicon data - - [SPAdes](#spades) _||_ [Unicycler](#unicycler) _||_ [minia](#minia) - Viral genome assembly - - [BLAST](#blast) - Blast to reference assembly - - [ABACAS](#abacas) - Order contigs according to reference genome - - [PlasmidID](#plasmidid) - Assembly report and visualisation - - [Assembly QUAST](#assembly-quast) - Assembly quality assessment -- [Workflow reporting and genomes](#illumina-workflow-reporting-and-genomes) - - [MultiQC](#multiqc) - Present QC for raw reads, alignment, assembly and variant calling - - [Reference genome files](#reference-genome-files) - Save reference genome indices/files +- [Introduction](#introduction) +- [Nanopore: Pipeline overview](#nanopore-pipeline-overview) + - [Nanopore: Preprocessing](#nanopore-preprocessing) + - [Nanopore: pycoQC](#nanopore-pycoqc) + - [Nanopore: artic guppyplex](#nanopore-artic-guppyplex) + - [Nanopore: NanoPlot](#nanopore-nanoplot) + - [Nanopore: Variant calling](#nanopore-variant-calling) + - [Nanopore: artic minion](#nanopore-artic-minion) + - [Nanopore: Downstream analysis](#nanopore-downstream-analysis) + - [Nanopore: SAMtools](#nanopore-samtools) + - [Nanopore: mosdepth](#nanopore-mosdepth) + - [Nanopore: BCFTools](#nanopore-bcftools) + - [Nanopore: SnpEff and SnpSift](#nanopore-snpeff-and-snpsift) + - [Nanopore: QUAST](#nanopore-quast) + - [Nanopore: Pangolin](#nanopore-pangolin) + - [Nanopore: Nextclade](#nanopore-nextclade) + - [Nanopore: Freyja](#nanopore-freyja) + - [Nanopore: ASCIIGenome](#nanopore-asciigenome) + - [Nanopore: Variants long table](#nanopore-variants-long-table) + - [Nanopore: Workflow reporting](#nanopore-workflow-reporting) + - [Nanopore: MultiQC](#nanopore-multiqc) +- [Illumina: Pipeline overview](#illumina-pipeline-overview) + - [Illumina: Preprocessing](#illumina-preprocessing) + - [cat](#cat) + - [FastQC](#fastqc) + - [fastp](#fastp) + - [Kraken 2](#kraken-2) + - [Illumina: Variant calling](#illumina-variant-calling) + - [Bowtie 2](#bowtie-2) + - [SAMtools](#samtools) + - [iVar trim](#ivar-trim) + - [picard MarkDuplicates](#picard-markduplicates) + - [picard CollectMultipleMetrics](#picard-collectmultiplemetrics) + - [mosdepth](#mosdepth) + - [iVar variants](#ivar-variants) + - [BCFTools call](#bcftools-call) + - [SnpEff and SnpSift](#snpeff-and-snpsift) + - [Freyja](#freyja) + - [ASCIIGenome](#asciigenome) + - [iVar consensus](#ivar-consensus) + - [BCFTools and BEDTools](#bcftools-and-bedtools) + - [QUAST](#quast) + - [Pangolin](#pangolin) + - [Nextclade](#nextclade) + - [Variants long table](#variants-long-table) + - [Illumina: De novo assembly](#illumina-de-novo-assembly) + - [Cutadapt](#cutadapt) + - [SPAdes](#spades) + - [Unicycler](#unicycler) + - [minia](#minia) + - [BLAST](#blast) + - [ABACAS](#abacas) + - [PlasmidID](#plasmidid) + - [Assembly QUAST](#assembly-quast) + - [Illumina: Workflow reporting and genomes](#illumina-workflow-reporting-and-genomes) + - [MultiQC](#multiqc) + - [Reference genome files](#reference-genome-files) +- [Pipeline information](#pipeline-information) ## Illumina: Preprocessing @@ -641,6 +709,8 @@ iVar outputs a tsv format which is not compatible with downstream analysis such [Freyja](https://github.com/andersen-lab/Freyja) is a tool to recover relative lineage abundances from mixed SARS-CoV-2 samples from a sequencing dataset (BAM aligned to the Hu-1 reference). The method uses lineage-determining mutational "barcodes" derived from the [UShER](https://usher-wiki.readthedocs.io/en/latest/#) global phylogenetic tree as a basis set to solve the constrained (unit sum, non-negative) de-mixing problem. +

Freyja screenshot

+ ### ASCIIGenome
From cda40f2ed08ad70ed68901e81ddeeded4a98ce95 Mon Sep 17 00:00:00 2001 From: Joon Klaps <61584065+Joon-Klaps@users.noreply.github.com> Date: Thu, 25 Jan 2024 16:23:08 +0100 Subject: [PATCH 6/7] Weird table of content auto edit undo output.md --- docs/output.md | 166 +++++++++++++++---------------------------------- 1 file changed, 50 insertions(+), 116 deletions(-) diff --git a/docs/output.md b/docs/output.md index 5de294c5..d60ce8c5 100644 --- a/docs/output.md +++ b/docs/output.md @@ -6,64 +6,25 @@ The directories listed below will be created in the results directory after the # Nanopore: Pipeline overview -- [Introduction](#introduction) -- [Nanopore: Pipeline overview](#nanopore-pipeline-overview) - - [Nanopore: Preprocessing](#nanopore-preprocessing) - - [Nanopore: pycoQC](#nanopore-pycoqc) - - [Nanopore: artic guppyplex](#nanopore-artic-guppyplex) - - [Nanopore: NanoPlot](#nanopore-nanoplot) - - [Nanopore: Variant calling](#nanopore-variant-calling) - - [Nanopore: artic minion](#nanopore-artic-minion) - - [Nanopore: Downstream analysis](#nanopore-downstream-analysis) - - [Nanopore: SAMtools](#nanopore-samtools) - - [Nanopore: mosdepth](#nanopore-mosdepth) - - [Nanopore: BCFTools](#nanopore-bcftools) - - [Nanopore: SnpEff and SnpSift](#nanopore-snpeff-and-snpsift) - - [Nanopore: QUAST](#nanopore-quast) - - [Nanopore: Pangolin](#nanopore-pangolin) - - [Nanopore: Nextclade](#nanopore-nextclade) - - [Nanopore: Freyja](#nanopore-freyja) - - [Nanopore: ASCIIGenome](#nanopore-asciigenome) - - [Nanopore: Variants long table](#nanopore-variants-long-table) - - [Nanopore: Workflow reporting](#nanopore-workflow-reporting) - - [Nanopore: MultiQC](#nanopore-multiqc) -- [Illumina: Pipeline overview](#illumina-pipeline-overview) - - [Illumina: Preprocessing](#illumina-preprocessing) - - [cat](#cat) - - [FastQC](#fastqc) - - [fastp](#fastp) - - [Kraken 2](#kraken-2) - - [Illumina: Variant calling](#illumina-variant-calling) - - [Bowtie 2](#bowtie-2) - - [SAMtools](#samtools) - - [iVar trim](#ivar-trim) - - [picard MarkDuplicates](#picard-markduplicates) - - [picard CollectMultipleMetrics](#picard-collectmultiplemetrics) - - [mosdepth](#mosdepth) - - [iVar variants](#ivar-variants) - - [BCFTools call](#bcftools-call) - - [SnpEff and SnpSift](#snpeff-and-snpsift) - - [Freyja](#freyja) - - [ASCIIGenome](#asciigenome) - - [iVar consensus](#ivar-consensus) - - [BCFTools and BEDTools](#bcftools-and-bedtools) - - [QUAST](#quast) - - [Pangolin](#pangolin) - - [Nextclade](#nextclade) - - [Variants long table](#variants-long-table) - - [Illumina: De novo assembly](#illumina-de-novo-assembly) - - [Cutadapt](#cutadapt) - - [SPAdes](#spades) - - [Unicycler](#unicycler) - - [minia](#minia) - - [BLAST](#blast) - - [ABACAS](#abacas) - - [PlasmidID](#plasmidid) - - [Assembly QUAST](#assembly-quast) - - [Illumina: Workflow reporting and genomes](#illumina-workflow-reporting-and-genomes) - - [MultiQC](#multiqc) - - [Reference genome files](#reference-genome-files) -- [Pipeline information](#pipeline-information) +- [Preprocessing](#nanopore-preprocessing) + - [pycoQC](#nanopore-pycoqc) - Sequencing QC + - [artic guppyplex](#nanopore-artic-guppyplex) - Aggregate pre-demultiplexed reads from MinKNOW/Guppy + - [NanoPlot](#nanopore-nanoplot) - Read QC +- [Variant calling](#nanopore-variant-calling) + - [artic minion](#nanopore-artic-minion) - Align reads, call variants and generate consensus sequence +- [Downstream analysis](#nanopore-downstream-analysis) + - [SAMtools](#nanopore-samtools) - Remove unmapped reads and obtain alignment metrics + - [mosdepth](#nanopore-mosdepth) - Genome-wide and amplicon coverage QC plots + - [BCFTools](#nanopore-bcftools) - Variant count metrics + - [SnpEff and SnpSift](#nanopore-snpeff-and-snpsift) - Genetic variant annotation and functional effect prediction + - [QUAST](#nanopore-quast) - Consensus assessment report + - [Pangolin](#nanopore-pangolin) - Lineage analysis + - [Nextclade](#nanopore-nextclade) - Clade assignment, mutation calling and sequence quality checks + - [Freyja](#nanopore-freyja) - Relative lineage abundance analysis from mixed SARS-CoV-2 samples (typically wastewater) + - [ASCIIGenome](#nanopore-asciigenome) - Individual variant screenshots with annotation tracks + - [Variants long table](#nanopore-variants-long-table) - Collate per-sample information for individual variants, functional effect prediction and lineage analysis +- [Workflow reporting](#nanopore-workflow-reporting) + - [MultiQC](#nanopore-multiqc) - Present QC, visualisation and custom reporting for sequencing, raw reads, alignment and variant calling results ## Nanopore: Preprocessing @@ -373,64 +334,37 @@ An example MultiQC report generated from a full-sized dataset can be viewed on t # Illumina: Pipeline overview -- [Introduction](#introduction) -- [Nanopore: Pipeline overview](#nanopore-pipeline-overview) - - [Nanopore: Preprocessing](#nanopore-preprocessing) - - [Nanopore: pycoQC](#nanopore-pycoqc) - - [Nanopore: artic guppyplex](#nanopore-artic-guppyplex) - - [Nanopore: NanoPlot](#nanopore-nanoplot) - - [Nanopore: Variant calling](#nanopore-variant-calling) - - [Nanopore: artic minion](#nanopore-artic-minion) - - [Nanopore: Downstream analysis](#nanopore-downstream-analysis) - - [Nanopore: SAMtools](#nanopore-samtools) - - [Nanopore: mosdepth](#nanopore-mosdepth) - - [Nanopore: BCFTools](#nanopore-bcftools) - - [Nanopore: SnpEff and SnpSift](#nanopore-snpeff-and-snpsift) - - [Nanopore: QUAST](#nanopore-quast) - - [Nanopore: Pangolin](#nanopore-pangolin) - - [Nanopore: Nextclade](#nanopore-nextclade) - - [Nanopore: Freyja](#nanopore-freyja) - - [Nanopore: ASCIIGenome](#nanopore-asciigenome) - - [Nanopore: Variants long table](#nanopore-variants-long-table) - - [Nanopore: Workflow reporting](#nanopore-workflow-reporting) - - [Nanopore: MultiQC](#nanopore-multiqc) -- [Illumina: Pipeline overview](#illumina-pipeline-overview) - - [Illumina: Preprocessing](#illumina-preprocessing) - - [cat](#cat) - - [FastQC](#fastqc) - - [fastp](#fastp) - - [Kraken 2](#kraken-2) - - [Illumina: Variant calling](#illumina-variant-calling) - - [Bowtie 2](#bowtie-2) - - [SAMtools](#samtools) - - [iVar trim](#ivar-trim) - - [picard MarkDuplicates](#picard-markduplicates) - - [picard CollectMultipleMetrics](#picard-collectmultiplemetrics) - - [mosdepth](#mosdepth) - - [iVar variants](#ivar-variants) - - [BCFTools call](#bcftools-call) - - [SnpEff and SnpSift](#snpeff-and-snpsift) - - [Freyja](#freyja) - - [ASCIIGenome](#asciigenome) - - [iVar consensus](#ivar-consensus) - - [BCFTools and BEDTools](#bcftools-and-bedtools) - - [QUAST](#quast) - - [Pangolin](#pangolin) - - [Nextclade](#nextclade) - - [Variants long table](#variants-long-table) - - [Illumina: De novo assembly](#illumina-de-novo-assembly) - - [Cutadapt](#cutadapt) - - [SPAdes](#spades) - - [Unicycler](#unicycler) - - [minia](#minia) - - [BLAST](#blast) - - [ABACAS](#abacas) - - [PlasmidID](#plasmidid) - - [Assembly QUAST](#assembly-quast) - - [Illumina: Workflow reporting and genomes](#illumina-workflow-reporting-and-genomes) - - [MultiQC](#multiqc) - - [Reference genome files](#reference-genome-files) -- [Pipeline information](#pipeline-information) +- [Preprocessing](#illumina-preprocessing) + - [cat](#cat) - Merge re-sequenced FastQ files + - [FastQC](#fastqc) - Raw read QC + - [fastp](#fastp) - Adapter and quality trimming + - [Kraken 2](#kraken-2) - Removal/QC for host reads +- [Variant calling](#illumina-variant-calling) + - [Bowtie 2](#bowtie-2) - Read alignment relative to reference genome + - [SAMtools](#samtools) - Sort, index and generate metrics for alignments + - [iVar trim](#ivar-trim) - Primer sequence removal for amplicon data + - [picard MarkDuplicates](#picard-markduplicates) - Duplicate read marking and removal + - [picard CollectMultipleMetrics](#picard-collectmultiplemetrics) - Alignment metrics + - [mosdepth](#mosdepth) - Whole-genome and amplicon coverage metrics + - [iVar variants](#ivar-variants) _||_ [BCFTools call](#bcftools-call) - Variant calling + - [SnpEff and SnpSift](#snpeff-and-snpsift) - Genetic variant annotation and functional effect prediction + - [Freyja](#freyja) - Relative lineage abundance analysis from mixed SARS-CoV-2 samples (typically wastewater) + - [ASCIIGenome](#asciigenome) - Individual variant screenshots with annotation tracks + - [iVar consensus](#ivar-consensus) _||_ [BCFTools and BEDTools](#bcftools-and-bedtools) - Consensus sequence generation + - [QUAST](#quast) - Consensus assessment report + - [Pangolin](#pangolin) - Lineage analysis + - [Nextclade](#nextclade) - Clade assignment, mutation calling and sequence quality checks + - [Variants long table](#variants-long-table) - Collate per-sample information for individual variants, functional effect prediction and lineage analysis +- [De novo assembly](#illumina-de-novo-assembly) + - [Cutadapt](#cutadapt) - Primer trimming for amplicon data + - [SPAdes](#spades) _||_ [Unicycler](#unicycler) _||_ [minia](#minia) - Viral genome assembly + - [BLAST](#blast) - Blast to reference assembly + - [ABACAS](#abacas) - Order contigs according to reference genome + - [PlasmidID](#plasmidid) - Assembly report and visualisation + - [Assembly QUAST](#assembly-quast) - Assembly quality assessment +- [Workflow reporting and genomes](#illumina-workflow-reporting-and-genomes) + - [MultiQC](#multiqc) - Present QC for raw reads, alignment, assembly and variant calling + - [Reference genome files](#reference-genome-files) - Save reference genome indices/files ## Illumina: Preprocessing From 33e72562a2a231384c6e22b58bcea7649079d980 Mon Sep 17 00:00:00 2001 From: Joon Klaps <61584065+Joon-Klaps@users.noreply.github.com> Date: Thu, 25 Jan 2024 16:25:36 +0100 Subject: [PATCH 7/7] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 274a1e37..6e8dd803 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ Thank you to everyone else that has contributed by reporting bugs, enhancements - [[PR #387](https://github.com/nf-core/viralrecon/pull/387)] - Software closes gracefully when encountering an error - [[PR #395](https://github.com/nf-core/viralrecon/pull/395)] - Remove minia from default assemblers because it is unreliable - [[PR #393](https://github.com/nf-core/viralrecon/pull/393)] - Changed primer set to params -- [[PR [#405](https://github.com/nf-core/viralrecon/issues/405)]] - Including parameter `depthcutoff` to freyja demix and boot +- [[PR #405](https://github.com/nf-core/viralrecon/pull/412)] - Including parameter `depthcutoff` to freyja demix and boot - [[PR #413](https://github.com/nf-core/viralrecon/pull/413)] - Update multiqc module & include freyja in report ### Parameters