Skip to content

Commit

Permalink
Merge pull request #29 from WeichenZhou/master
Browse files Browse the repository at this point in the history
**Ver1.5.1** May.7th.2020
  • Loading branch information
WeichenZhou authored May 8, 2020
2 parents 8010289 + a113fd4 commit a947e2f
Show file tree
Hide file tree
Showing 31 changed files with 4,025 additions and 4,383,447 deletions.
Binary file modified .DS_Store
Binary file not shown.
75 changes: 56 additions & 19 deletions PALMER.v1.4.cpp → PALMER.v1.5.1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,11 @@ using namespace std;
int main(int argc, char *argv[]){

//parameters_start
//std::ios::sync_with_stdio(false);
//std::cin.tie(0);

string T, WD, inputF, output, SP, ref, CHR, ref_fa, cus, cusin, tsd_pass, LL_len, s_cus_seq_len;

string T, WD, inputF, output, SP, ref, CHR, ref_fa, cus, cusin, tsd_pass, LL_len;
//int NUM_threads=30;
int NUM_threads=10;
ifstream file1;
Expand All @@ -42,6 +45,8 @@ int main(int argc, char *argv[]){
int flag_tsd=1;
int help=0;
int L_len=25;
int seq_len=-1;
int flag_cus_seq_len=0;
output="output.txt";
SP="Human";
//T="LINE";
Expand All @@ -51,19 +56,21 @@ int main(int argc, char *argv[]){
string dir;
dir=argv[0];

for(int i=1;i!=argc;i++){
for(int i=1;i!=argc;++i){
if(strncmp(argv[i],"--workdir",9)==0){
WD=argv[i+1];
flag_wd=1;
}
if(strncmp(argv[i],"--chr",5)==0){
CHR=argv[i+1];
}

if(strncmp(argv[i],"--L_len",7)==0){
LL_len=argv[i+1];
int L_len = 6023- std::stoi(LL_len);
//L_len=L_len;
}

if(strncmp(argv[i],"--ref_ver",9)==0){
ref=argv[i+1];
if(ref=="GRCh37") ref_n=37;
Expand Down Expand Up @@ -148,6 +155,16 @@ int main(int argc, char *argv[]){

tsd_pass=argv[i+1];
}
if(strncmp(argv[i],"--len_custom_seq",16)==0){
s_cus_seq_len=argv[i+1];

seq_len = std::stoi(s_cus_seq_len);
//strstream sss;
//sss << string_cus_seq_len;
//sss >> cus_seq_len;
//cus_seq_len=stoi(string_cus_seq_len)
flag_cus_seq_len=1;
}
if(strncmp(argv[i],"--help",6)==0){

help=1;
Expand All @@ -171,7 +188,7 @@ int main(int argc, char *argv[]){
}


if((flag_T==0&&flag_cus==0)||(flag_T==1&&flag_cus==1)||flag_wd==0||flag_inputf==0||ref_n==0||flag_reffa==0||help==1||(flag_T==1&&ref_n==-1&&flag_cusin==0)||(flag_T==2&&flag_cus==0)){
if((flag_T==0&&flag_cus==0)||(flag_T==1&&flag_cus==1)||flag_wd==0||flag_inputf==0||ref_n==0||flag_reffa==0||help==1||(flag_T==1&&ref_n==-1&&flag_cusin==0)||(flag_T==2&&flag_cus==0)||(flag_T==2&&flag_cus==1&&flag_cusin==0)||(flag_T==2&&flag_cus==1&&flag_cusin==1&&flag_tsd==1&flag_cus_seq_len==0)){
if(flag_T==0&&flag_cus==0){
cout<<"***ERROR*** PLEASE ASSIGN A MEI TYPE! LINE/ALU/SVA"<<endl;}
if(flag_T==1&&flag_cus==1){
Expand All @@ -186,10 +203,15 @@ int main(int argc, char *argv[]){
cout<<"***ERROR*** PLEASE ASSIGN A CORRECT REFERENCE version/fasta!"<<endl;}
if(flag_T==1&&ref_n==-1&&flag_cusin==0){
cout<<"***ERROR*** PLEASE ASSIGN A INDEX FILE FOR RUNNING MASKING MODULE ON YOUR MEI CALLING ON OTHER REFERENCE!"<<endl;}
if(flag_T==2&&flag_cus==1&&flag_cusin==0){
cout<<"***ERROR*** PLEASE ASSIGN 'CUSTOMIZED_INDEX' WHILE YOU CHOOSE YOUR CUSTOMIZED TYPE"<<endl;}
if(flag_T==2&&flag_cus==1&&flag_cusin==1&&flag_tsd==1&flag_cus_seq_len==0){
cout<<"***ERROR*** PLEASE ASSIGN 'CUSTOMIZD_SEQUENCE_LENGTH' WHILE YOU ACTIVATE TSD_FINDING FOR YOUR CUSTOMIZED TYPE"<<endl;}

cout<<endl;
cout<<"***WELCOME***"<<endl;
cout<<"***PALMER:Pre-mAsking Long reads for Mobile Element inseRtion***"<<endl;
cout<<"Version: 1.4"<<endl;
cout<<"Version: 1.5"<<endl;
cout<<"Presented by Weichen Zhou @ Mills Lab. Feb.28th.2019"<<endl;
cout<<endl;
cout<<"Usage:"<<endl;
Expand All @@ -198,23 +220,23 @@ int main(int argc, char *argv[]){
cout<<" aligned long-read sequencing BAM file with directory path"<<endl;
cout<<endl;
cout<<"--workdir"<<endl;
cout<<" the user's working directory"<<endl;
cout<<" the user's working directory. Please follow the format /your/woking/directory/ !!don't forget the last '/'!!"<<endl;
cout<<endl;
cout<<"--ref_ver (options: hg19, GRCh37, GRCh38 or other)"<<endl;
cout<<" reference genome used for the aligned file ('other' option for the cusmized genome out of hg19, GRCh37 or GRCh38)"<<endl;
cout<<endl;
cout<<"--ref_fa"<<endl;
cout<<" indexed fasta file of reference genome fasta file with directory path used for the aligned bam file (wrong reference will cause error infromation)"<<endl;
cout<<" indexed fasta file of reference genome fasta file with directory path used for the aligned bam file (wrong reference will cause error information)"<<endl;
cout<<endl;
cout<<"--type (options: LINE, ALU, SVA, or CUSTOMIZED (if you want to setup your costomized sequence))"<<endl;
cout<<" type of MEIs or other kind of insertion to detect"<<endl;
cout<<" type of MEIs or other kind of insertions to detect"<<endl;
cout<<endl;
cout<<"--chr (default: ALL (for whole genome); options: chromosome1, chromosome2, ...chromosomeY)"<<endl;
cout<<" chromosome name for PALMER to run (if running for whole genome, don't need to assign). !!The chromosome names should be consistent with the ones in reference genome version!! e.g. for GRCh37, to run PALMER on chromosome1, the option should be '1', while for GRCh38 it should be 'chr1'"<<endl;
cout<<endl;

cout<<"--custom_seq (default:no input)"<<endl;
cout<<" .fasta file with directory path to customize your insertion finding"<<endl;
cout<<" .fasta file with directory path to customize your insertion finding. e.g. NUMTs, MEIs in other species."<<endl;
cout<<endl;
cout<<"--custom_index (default:no input; if you have both '--ref_ver other' and '--type LINE/ALU/SVA', you must give PALMER a index file (format: \"CHR'\t'START'\t'END'\t'MEI_NAME'\n'\" for each MEI to be masked in each line) for masking module; if you have --custom_seq parameter without --custom_index, PALMER will work without masking step)"<<endl;
cout<<" index file with directory path to mask the genome for your insertion finding"<<endl;
Expand All @@ -223,6 +245,10 @@ int main(int argc, char *argv[]){
cout<<" whether to run TSD motif finding module for your insertion calling"<<endl;
cout<<endl;

cout<<"--len_custom_seq (MUST set up when activate TSD_finding for CUSTOMIZED insertion, otherwise CLOSED)"<<endl;
cout<<" integer value for the length of your customized sequence WITHOUT polyA tact"<<endl;
cout<<endl;

cout<<"--L_len (default: 25bp)"<<endl;
cout<<" the minimum length of putative LINE-1 aligned to L1.3 sequences"<<endl;
cout<<endl;
Expand Down Expand Up @@ -284,6 +310,10 @@ int main(int argc, char *argv[]){
T=cus;
}

//cout<<T<<endl;
//cout<<seq_len<<endl;
//cout<<flag_cus_seq_len<<endl;
//getchar();

if(ref_n==37){

Expand Down Expand Up @@ -383,11 +413,11 @@ int main(int argc, char *argv[]){
int line_chr;
int line_len;
string input_inde;
for(int i=0;!file91.eof();i++){
for(int i=0;!file91.eof();++i){
getline(file91,input_inde);
line_chr=i;
}
for(int i=0;!file92.eof();i++){
for(int i=0;!file92.eof();++i){
getline(file92,input_inde);
line_len=i;
}
Expand All @@ -406,10 +436,10 @@ int main(int argc, char *argv[]){
string chr_inde[line_chr];
int len_inde[line_len];

for(int i=0;i!=line_chr;i++){
for(int i=0;i!=line_chr;++i){
file91>>chr_inde[i];
}
for(int i=0;i!=line_len;i++){
for(int i=0;i!=line_len;++i){
file92>>len_inde[i];
}

Expand All @@ -430,7 +460,7 @@ int main(int argc, char *argv[]){
file93.open(syst_region_index,ios::trunc);

int bin=1000000;
for(int i=0;i!=line_chr;i++){
for(int i=0;i!=line_chr;++i){
int j=i;
int sec;
//last;
Expand Down Expand Up @@ -475,11 +505,11 @@ int main(int argc, char *argv[]){
file2>>input_index;
if(CHR=="ALL"){
line_index=i;
i++;
++i;
}
else if(CHR==input_index){
line_index=i;
i++;
++i;
}
file2>>input_index;
file2>>input_index;
Expand Down Expand Up @@ -521,11 +551,11 @@ int main(int argc, char *argv[]){

}
if(chr_index==1){
i++;
++i;

//getchar();
//****
tube(WD, inputF, chr, start, end, sys_line_region, T, ref_n, direc, ref_fa, flag_tsd, L_len);
tube(WD, inputF, chr, start, end, sys_line_region, T, ref_n, direc, ref_fa, flag_tsd, L_len, seq_len);
}
/*ver1.3
if(chr_index==1){
Expand All @@ -539,7 +569,7 @@ int main(int argc, char *argv[]){
cout<<"Merging step is initiated."<<endl;
//mkdir
/*
for(int i=0;i!=line_chr;i++){
for(int i=0;i!=line_chr;++i){
string WD_chr=WD+chr_inde[i]+"/";
string WD_chr="mkdir "+WD+chr_inde[i]+"/";
Expand Down Expand Up @@ -595,11 +625,18 @@ int main(int argc, char *argv[]){
char *syst_final_tsd = new char[sys_final_tsd.length()+1];
strcpy(syst_final_tsd, sys_final_tsd.c_str());
system(syst_final_tsd);
i++;
++i;
}
}

cout<<"Merging step completed."<<endl;

//colapse for the redundant calls

//kmer



cout<<"Final calls finished."<<endl;
cout<<"Results are in "+WD+output<<endl;

Expand Down
49 changes: 40 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Pre-mAsking Long reads for Mobile Element inseRtion
Required resources:
```
samtools/1.3.1 https://github.com/samtools/samtools
ncbi-blast++/2.4.0 ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
ncbi-blast++/2.10.0 ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
git-lfs
```

Expand Down Expand Up @@ -40,24 +40,27 @@ Usage:
reference genome used for the aligned file ('other' option for the cusmized genome out of hg19, GRCh37 or GRCh38)
--ref_fa
indexed fasta file of reference genome fasta file with directory path used for the aligned bam file (wrong reference will cause error infromation)
indexed fasta file of reference genome fasta file with directory path used for the aligned bam file (wrong reference will cause error information)
--type (options: LINE, ALU, SVA, or CUSTOMIZED (if you want to setup your costomized sequence))
type of MEIs or other kind of insertion to detect
type of MEIs or other kind of insertions to detect
--chr (default: ALL (for whole genome, not recommended); options: chromosome1, chromosome2, ...chromosomeY)
chromosome name for PALMER to run. !!The chromosome names should be consistent with the ones in reference genome version!! e.g. for GRCh37, to run PALMER on chromosome1, the option should be '1', while for GRCh38 it should be 'chr1'
--custom_seq (default:no input)
.fasta file with directory path to customize your insertion finding
.fasta file with directory path to customize your insertion finding. e.g. NUMTs, MEIs in other species.
--custom_index (default:no input; if you have both '--ref_ver other' and '--type LINE/ALU/SVA', you must give PALMER a index file (format: "CHR' 'START' 'END' 'MEI_NAME'
'" for each MEI to be masked in each line) for masking module; if you have --custom_seq parameter without --custom_index, PALMER will work without masking step)
'" for each MEI to be masked in each line) for masking module; if you have --custom_seq parameter without --custom_index, PALMER will work without the masking step)
index file with directory path to mask the genome for your insertion finding
--TSD_finding (Fixed:TRUE for all MEIs ,or default: FALSE for CUSTOMIZED insertion)
whether to run TSD motif finding module for your insertion calling
--len_custom_seq (MUST set up when activate TSD_finding for CUSTOMIZED insertion, otherwise CLOSED)
integer value for the length of your customized sequence WITHOUT polyA tact
--L_len (default: 25bp)
the minimum length of putative LINE-1 aligned to L1.3 sequences
Expand All @@ -67,19 +70,33 @@ Usage:

Examples
```
1) Running PALMER on your aligned bam based on GRCh37 reference genome to call LINE-1 insertions in chromosome3
1) Running PALMER on example bam file under the 'example' folder to call LINE-1 insertions on GRCh38 genome
./PALMER --input $PALMER_Path/example/sample.bam --workdir $DirPath/ --ref_ver GRCh38 --output sample --type LINE --chr 19 --ref_fa $your.reference.file.path/GRCh38.fa
Results (sample_calls.txt & sample_TSD_reads.txt) from example bam file can also be found under the 'example' folder.
```
```
2) Running PALMER on your aligned bam based on GRCh37 reference genome to call LINE-1 insertions in chromosome3
./PALMER --input $DirPath/your.bam.file --workdir $DirPath/ --ref_ver GRCh37 --output your.output.prefix --type LINE --chr 3 --ref_fa $your.reference.file.path/hs37d5.fa
```
```
2) Running PALMER on your aligned bam based on GRCh38 reference genome to call SVA insertions in chromosome3
3) Running PALMER on your aligned bam based on GRCh38 reference genome to call SVA insertions in chromosome3
./PALMER --input $DirPath/your.bam.file --workdir $DirPath/ --ref_ver GRCh38 --output your.output.prefix --type SVA --chr chr3 --ref_fa $your.reference.file.path/GRCh38.fa
```
```
3) Running PALMER on your aligned bam to call Alu insertions in chromosome2a of Champanzee genome
4) Running PALMER on your aligned bam to call Alu insertions in chromosome2a of Champanzee genome
./PALMER --input $DirPath/your.bam.file --workdir $DirPath/ --ref_ver other --output your.output.prefix --type ALU --chr chr2a(chr.name.based.on.your.reference.fa) --ref_fa $your.reference.file.path/your.reference.fa --custom_index reference.Alu.coordinates.in.your.reference.Chimpanzee.genome
```
```
4)
5) Running PALMER on your aligned bam to call NumtS in chromosome5 of Champanzee genome
./PALMER --input $DirPath/your.bam.file --workdir $DirPath/ --ref_ver other --output your.output.prefix --chr chr5 --ref_fa $your.reference.file.path/your.reference.fa --type CUSTOMIZED --custom_seq $your.custom_seq.file.path/Clint.mt --custom_index $your.custom_index.file.path/Chimp_ref_NumtS.bed
```
```
6) Running PALMER on your aligned bam to call LINE-1 insertions in chromosomeX of mice genome
./PALMER --input $DirPath/your.bam.file --workdir $DirPath/ --output your.output.prefix --chr chrX --ref_ver other --ref_fa $your.reference.file.path/your.reference.fa --type CUSTOMIZED --custom_seq $your.custom_seq.file.path/L1MdA_consensus.fa --custom_index $your.custom_index.file.path/mm10_ucsc_repeatmasker_LINE.bed --TSD_finding TRUE --len_custom_seq (int)
```
```
7)
A callset of non-reference L1Hs in HG002, HG003, and HG004 [a Personal Genome Project trio derived from the Genome in a Bottle (GIAB) Consortium] using PALMER is available under:
ftp://ftp-trace.ncbi.nlm.nih.gov/giab/ftp/data/AshkenazimTrio/analysis/PacBio_PALMER_11242017/
```
Expand All @@ -103,6 +120,20 @@ Nucleic Acids Research, 2019, gkz1173, `https://doi.org/10.1093/nar/gkz1173`

## Logs

**Ver1.5.1** May.7th.2020

* Highly optimized the performance of calling customized insertion sequences (non-humman genomes, non-MEIs)!!
* Sample bam file added, example updated, results from sample bam updated!!
* A fatal bug fixed calling L1NE-1 since Ver1.4.1.
* A fatal bug fixed related to the environment of computing clusters and the version of BLASTn. Now require the version ncbi-blast++/2.10.0.
* Minor bugs fixed.

**Ver1.5** May.4th.2020 "MAY THE FORCE BE WITH YOU!"

* Added one more option for the length of customized insertion sequence.
* Optimized the performance for customized insertion sequence finding!
* Minor bugs fixed.

**Ver1.4.1** Nov.14th.2019

* Added one more option for an adjustable length of putative LINE-1 aligned to L1.3 sequences.
Expand Down
Binary file added example/sample.bam
Binary file not shown.
Binary file added example/sample.bam.bai
Binary file not shown.
2 changes: 2 additions & 0 deletions example/sample_TSD_reads.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
cluster_id read_name.info 5'_TSD 3'_TSD Predicted_transD Unique_26mer_at_5'junction Whole_insertion_seq
cluster5_chr19_4879460_4879460_4879460_4879460 SRR3658432.144260_length=32698.5803.6058.2655.2909.4879460.4879460.chr19.+.0.0.0.0.0.0.0 ACAAAA ACAAAA ACAAAAACAAATTAGGCCAGGTGTTGGTGGTACATGTCTGTATCCCAGCACTTGGAGAGGCTGAGGCAAAGGAGAATGCTTGAACCCAGGAGGCAGAGTTCTGCACTCGGCTTGGGCACAAAGGAGACTGTCTCAAAAAAAAAAAGGAAGAATGGTTTGTGGCTTGAATAGTAACAATATGACTAGGTATCACATTCTTGGGCCCTCATTTGAGGCATGACACTGTCTTAAGCCAGTTACCTGCTCATCTCATGTAGTCCAGACAGCAAAACCCTGAGGGAAAGGACGATACACTTACCAACTGCCCAGGAAAACTGGAATCAGAGAGGTTCATGATTTGCCAAGTCACACAGCAACTCACTGCAGAGCCAAGGACTCAAGAAACCAGTTCAACCAAACCGGTGATGGTTAACCACTGTGATTACTCACTATTGCCTTGCGCTAAACTCTGACAGTTGGCTGATAATGAACGACCCCCAGGATGGGAAATGTTGTATGTATGTATGTATGAGTGTATGTAGTAGATGTTTTTTGAGACAGATGTTCTCACTCTGTCGACAAGGGTGGAGTGCAGTTGTGTGATCTACGGCTCACTGCAACCTCCATCTCCCAGGTTCAATCGGATTCCTCCTGGCTCAGTCTCCGATTGCTGGTTACAGGCGCGTGCCACAAGGCTGGCTAATTTCTTAATTTTTAGTAGAGACGGGTTTCGCCATATTGTCCAGGGCTGGTCTCATAACTCCTACCAATTCGATCTGCCTGCATCGCTCCCAAAGTGCTGGGATTAAGCGTGAGCCACGCGCATAACTGTACAGGAGGGGTGGGTTCCTTCTCTCGGCAAGGCCATTCCTGGGAGTACTGAAGAGTGTCTGACAGCAGCATCCCCGGCCCCCACCCCTCCATATTGCCAGGAGCGAAACCCCCAGTCATACAACCACAAATGCCCCAGACATCACCCCATGGGCCACTGAAGACAGACTCACCCGCTGGTTTGAGATCTACACTGTTACAGTATTATACTGCGAGGCCTCTGTGGAGTTAATTTCTGATGGTAAATGCTGATGCTGAGAATCCACTTCTGCATGTTTATTATTATTATTATTATTATTATTGTTTTGACAATGAGGTTGGTACGTCCAGTCTCAGGCTGGAGTCAGGGCGGATCATAGCTGCATCAACCTCAAGCTCCTGGGCTCAAACGATCTGCCAACCTCAGCTTCAGAAGTGCTGAGGATTATAACGATGAGCCATGGCGCCCGGCTCTGCTGTTTTGTTGTTTGGTGTTGTTGTTGTTAATTGTTGTTGTCTTTGGGACAGGGTCTTCTGTCTGCCCAAGGCGTGAATGCCAGTGGCGCCCATCTCTGGCTCACCGGCAACTCACCCCTCCCTGGTTCAGAAATTCTCATGCCTCGCCTCCCAGTAGCTGGGAATCTCTCTCTTTTCCTCCTCCTCACGTGTGTTGAGAGAGATATCCCAGGCACTTGGAGGCCGAGGCAATGAGAATGTGCTTAACCCAGGGCAGGGGGGAAGGTTGCGGTGAGCCAAAATGCGCCACTTGCATTCCAGCCTTGGCAAGACAGCAAGACTCTGTCCCAAACAACCAAACATAAAACAACAACACAACAACA TAAAAATACAAAAATTTATAGGTGGG ATTTATAGGTATAGGTGGGAATTGAAATAGAGACACTGGACACAGGAAGAGAATCATCACACACCCCGGCCTGATACTGGGGAGGGAGGGGGAGGGAATAGCATGGAGCATACCCTAATGTAAATGACGCAGTTAATGGGTGCAGCACACCAACATGGACTGTTATACATATTGTAACAAAACCTCGCACGTTGTGCACATGTACCTAGAATTTAAGTATAATAATAAAAAAAAAAAAGAACTGAAACATTGAGAAAAACAAAAACAAAAACAAATTAGGCCAGGTGTTGGTGGTACATGTCTGTATCCCAGCACTTGGAGAGGCTGAGGCAAAGGAGAATGCTTGAACCCAGGAGGCAGAGTTCTGCACTCGGCTTGGGCACAAAGGAGACTGTCTCAAAAAAAAAAAGGAAGAATGGTTTGTGGCTTGAATAGTAACAATATGACTAGGTATCACATTCTTGGGCCCTCATTTGAGGCATGACACTGTCTTAAGCCAGTTACCTGCTCATCTCATGTAGTCCAGACAGCAAAACCCTGAGGGAAAGGACGATACACTTACCAACTGCCCAGGAAAACTGGAATCAGAGAGGTTCATGATTTGCCAAGTCACACAGCAACTCACTGCAGAGCCAAGGACTCAAGAAACCAGTTCAACCAAACCGGTGATGGTTAACCACTGTGATTACTCACTATTGCCTTGCGCTAAACTCTGACAGTTGGCTGATAATGAACGACCCCCAGGATGGGAAATGTTGTATGTATGTATGTATGAGTGTATGTAGTAGATGTTTTTTGAGACAGATGTTCTCACTCTGTCGACAAGGGTGGAGTGCAGTTGTGTGATCTACGGCTCACTGCAACCTCCATCTCCCAGGTTCAATCGGATTCCTCCTGGCTCAGTCTCCGATTGCTGGTTACAGGCGCGTGCCACAAGGCTGGCTAATTTCTTAATTTTTAGTAGAGACGGGTTTCGCCATATTGTCCAGGGCTGGTCTCATAACTCCTACCAATTCGATCTGCCTGCATCGCTCCCAAAGTGCTGGGATTAAGCGTGAGCCACGCGCATAACTGTACAGGAGGGGTGGGTTCCTTCTCTCGGCAAGGCCATTCCTGGGAGTACTGAAGAGTGTCTGACAGCAGCATCCCCGGCCCCCACCCCTCCATATTGCCAGGAGCGAAACCCCCAGTCATACAACCACAAATGCCCCAGACATCACCCCATGGGCCACTGAAGACAGACTCACCCGCTGGTTTGAGATCTACACTGTTACAGTATTATACTGCGAGGCCTCTGTGGAGTTAATTTCTGATGGTAAATGCTGATGCTGAGAATCCACTTCTGCATGTTTATTATTATTATTATTATTATTATTGTTTTGACAATGAGGTTGGTACGTCCAGTCTCAGGCTGGAGTCAGGGCGGATCATAGCTGCATCAACCTCAAGCTCCTGGGCTCAAACGATCTGCCAACCTCAGCTTCAGAAGTGCTGAGGATTATAACGATGAGCCATGGCGCCCGGCTCTGCTGTTTTGTTGTTTGGTGTTGTTGTTGTTAATTGTTGTTGTCTTTGGGACAGGGTCTTCTGTCTGCCCAAGGCGTGAATGCCAGTGGCGCCCATCTCTGGCTCACCGGCAACTCACCCCTCCCTGGTTCAGAAATTCTCATGCCTCGCCTCCCAGTAGCTGGGAATCTCTCTCTTTTCCTCCTCCTCACGTGTGTTGAGAGAGATATCCCAGGCACTTGGAGGCCGAGGCAATGAGAATGTGCTTAACCCAGGGCAGGGGGGAAGGTTGCGGTGAGCCAAAATGCGCCACTTGCATTCCAGCCTTGGCAAGACAGCAAGACTCTGTCCCAAACAACCAAACATAAAACAACAACACAACAACA
Loading

0 comments on commit a947e2f

Please sign in to comment.