Approach

The genotype of cholinergic nicotinc receptor alpha 4 (chrna4) located on chromosome 20 (chr20: 63,343,310..63,375,471) will be determined.

This process involves 4 broader steps.

A. Process the sequencing files and generate a gatk validated (gatk ValidatesamFile) BAM file

B. Call haplotypes using GATK HaplotypeCaller in GVCF mode (to generate GenotypeVCFs)

C. Combine the GenotypeVCFs files (using gatk CombineGVCFs) and genotype the samples together (using gatk GenotypeGVCFs) or

D. Run gatk GenomicsDBImport on individual GenotypeVCFs together

Machine

Google Cloud Platform (GCP), 4 vCPUs, 15 GB RAM

Google Cloud Platform (GCP), 8 vCPUs, 30 GB RAM

Google Cloud Platform (GCP), 24 vCPUs, 32 GB RAM

AWS: c5.18xlarge (72 vCPUs, 144 GB RAM)

AWS: m5.24xlarge (96 vCPUs, 384 GiB RAM)

Reference

-The genome or a chromosomal region or a gene of interest of three individuals (NA12891, NA12892 and NA12878) will be analyzed.

-The genome sequencing data will be obtained from the 1000 genome project (http://www.internationalgenome.org/1000-genomes-browsers/)

Analysis datasets

Download genome sequencing data for individual NA12891 from the 1000 genome project site

Download genome sequencing data for individual NA12892 from the 1000 genome project site

Download genome sequencing data for individual NA12878 from the 1000 genome project site

Directory content

~/gatk-data-ref$ ls -l


-rw-rw-r-- 1 ubuntu ubuntu 66771360285 Apr 30 15:38 SRR622458_1.fastq.gz
-rw-rw-r-- 1 ubuntu ubuntu 68300205647 Apr 30 15:45 SRR622458_2.fastq.gz

-rw-rw-r-- 1 ubuntu ubuntu 68029335546 Apr 30 15:50 SRR622459_1.fastq.gz
-rw-rw-r-- 1 ubuntu ubuntu 69219443789 Apr 30 15:54 SRR622459_2.fastq.gz

-rw-rw-r-- 1 ubuntu ubuntu  4598249219 Apr 30 15:45 SRR622461_1.fastq.gz
-rw-rw-r-- 1 ubuntu ubuntu  4792383631 Apr 30 15:47 SRR622461_2.fastq.gz

Check analysis datasets

For NA12891

~/gatk-data-ref$ zcat SRR622458_1.fastq.gz | head -n 2

@SRR622458.1 1/1

TGGGATTGGGGTAGGGCTAGGGCTCGGGTTGGGGATAGGGTGAGGGTTTGGGATAGGGGTAGGGTTAGGGTGTTGGCTAGGGTTAGGGCGAGGGCCAGGGC

~/gatk-data-ref$ zcat SRR622458_2.fastq.gz | head -n 2

@SRR622458.1 1/2

ATAACCCTAACCCTAACCCTAACGCTAACCCTAACCCTAACCCTAACCCTAACAATAACCCTAACCCTAACACTAACCTTACCCCTAACCCTAACCCTCAC

For NA12892

~/gatk-data-ref$ zcat SRR622459_1.fastq.gz | head -n 2

@SRR622459.1 1/1

GTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGAGATCGGAAG

~/gatk-data-ref$ zcat SRR622459_2.fastq.gz | head -n 2

@SRR622459.1 1/2

CCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACAGATCGGAAG

For NA12878

~/gatk-data-ref$ zcat SRR622461_1.fastq.gz | head -n 2

@SRR622461.1 1/1

GCTAGGGGTAGGGTTAGGGCTCGGATTAGGGGTGGGATTAGGGTTAGAGGAAGTGATAGCCTTCAGGGTAGGGATCGGGCAAGGAATAGGATTGTGGGTGG

~/gatk-data-ref$ zcat SRR622461_2.fastq.gz | head -n 2

@SRR622461.1 1/2

ATAACCTAAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACTCTATCACTGAACATAAGCCTTACCATACGTTCAAACATACA

Download the reference (fasta, fasta index, dictionary) and BWA index (.alt, .amb, .ann, .bwt, .pac and .sa) files

        ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta .

        ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.dict .

        ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.fai .


 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.alt .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.amb .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.ann .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.bwt .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.pac .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.sa .

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 581712 Jan 6 2016 Homo_sapiens_assembly38.dict

-rw-rw-r– 1 ubuntu ubuntu 3249912778 Jan 5 2016 Homo_sapiens_assembly38.fasta

-rw-rw-r– 1 ubuntu ubuntu 487553 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.alt

-rw-rw-r– 1 ubuntu ubuntu 20199 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.amb

-rw-rw-r– 1 ubuntu ubuntu 455474 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.ann

-rw-rw-r– 1 ubuntu ubuntu 3217347004 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.bwt

-rw-rw-r– 1 ubuntu ubuntu 804336731 Nov 6 23:48 Homo_sapiens_assembly38.fasta.64.pac

-rw-rw-r– 1 ubuntu ubuntu 1608673512 Nov 6 23:48 Homo_sapiens_assembly38.fasta.64.sa

-rw-rw-r– 1 ubuntu ubuntu 160928 Dec 1 2016 Homo_sapiens_assembly38.fasta.fai

A. Produce validated BAM files for the 3 individuals

A1. Generate a validated BAM file for NA12891

Align the sequences to the reference sequence using BWA

Alignment (bwa mem) will lead to a SAM (sequence alignment file) file, that will be converted to a BAM file (samtools view). It will be sorted (i.e., samtools sort) by co-ordinate and indexed (samtools index). Samtools flagstat will produce alignment statistics.

~/gatk-data-ref$ bwa mem -M -t 96 -R ‘@RG:SRR622458:P:illumina:FCC1H7WACXX:NA12891’ Homo_sapiens_assembly38.fasta SRR622458_1.fastq.gz SRR622458_2.fastq.gz | samtools view -Sbh | samtools sort -o SRR622458.bam - && samtools index SRR622458.bam && samtools flagstat SRR622458.bam

…………….

[main] Version: 0.7.17-r1188

…………………………..

[main] Real time: 27098.059 sec; CPU: 1337083.667 sec

[bam_sort_core] merging from 947 files and 1 in-memory blocks…

2448099046 + 0 in total (QC-passed reads + QC-failed reads)
11520983 + 0 secondary
12880297 + 0 supplementary
0 + 0 duplicates
2368472627 + 0 mapped (96.75% : N/A)
2423697766 + 0 paired in sequencing
1211848883 + 0 read1
1211848883 + 0 read2
2258885338 + 0 properly paired (93.20% : N/A)
2317266676 + 0 with itself and mate mapped
26804671 + 0 singletons (1.11% : N/A)
31022454 + 0 with mate mapped to a different chr
17456435 + 0 with mate mapped to a different chr (mapQ>=5)

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 189005777011 May 1 17:46 SRR622458.bam

-rw-rw-r– 1 b0d2647 b0d2647 9777672 May 1 19:12 SRR622458.bam.bai

Validate the Bam File

gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622458.bam -M SUMMARY -O summary-SRR622458

……………

[Fri May 03 21:01:34 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 443.41 minutes.

…………….

Tool returned: 3

~/gatk-data-ref$ cat summary-SRR622458

## HISTOGRAM    java.lang.String

Error Type              Count

ERROR:INVALID_TAG_NM    207087

Fix the INVALID_TAG_NM error

~/gatk-data-ref$ gatk SetNmMdAndUqTags -R Homo_sapiens_assembly38.fasta -I SRR622458.bam -O SRR622458.fxNmMdUqTag.bam

Using GATK jar /home/b0d2647/miniconda3/share/gatk4-4.1.2.0-0/gatk-package-4.1.2.0-local.jar

Validate the ‘SetNmMdAndUqTags’ or presumed fixed BAM file again

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622458.fxNmMdUqTag.bam -M SUMMARY -O summary-SRR622458.fxNmMdUqTag

…………………..

[Sat May 04 11:09:59 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 345.16 minutes.

………….

Tool returned: 0

~/gatk-data-ref$ cat summary-SRR622458.fxNmMdUqTag

No errors found

Mark duplicates

~/gatk-data-ref$ gatk MarkDuplicates -I SRR622458.fxNmMdUqTag.bam -O SRR622458.fxNmMdUqTag.mdup.bam -M SRR622458.fxNmMdUqTag.dupMetrics.txt

………………………

[Sun May 05 04:59:44 UTC 2019] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 684.96 minutes.

…………….

Tool returned: 0

~/gatk-data-ref$ head SRR622458.fxNmMdUqTag.dupMetrics.txt

……………….

LIBRARY UNPAIRED_READS_EXAMINED READ_PAIRS_EXAMINED     SECONDARY_OR_SUPPLEMENTARY_RDS  UNMAPPED_READS  UNPAIRED_READ_DUPLICATES        READ_PAIR_DUPLICATES    READ_PAIR_OPTICAL_DUPLICATES    PERCENT_DUPLICATION  ESTIMATED_LIBRARY_SIZE

P       26804671        1158633338      24401280        79626419        12149656        57133230        0       0.05393 11358780886

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 256414514748 May 4 05:07 SRR622458.fxNmMdUqTag.bam

-rw-rw-r– 1 b0d2647 b0d2647 9791560 May 4 17:18 SRR622458.fxNmMdUqTag.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 4604 May 5 04:59 SRR622458.fxNmMdUqTag.dupMetrics.txt

-rw-rw-r– 1 b0d2647 b0d2647 259148164965 May 5 04:59 SRR622458.fxNmMdUqTag.mdup.bam

Base quality calibration (using gatk BaseReclaibrator and gatk Apply BQSR)

-It takes a long time to calibrate the bases in the entire BAM file.

A2. Generate a validated BAM file for NA12892

Align the fastq sequences to the reference genome using BWA

Alignment (bwa mem) will lead to a SAM (sequence alignment file) file, that will be converted to a BAM file (samtools view).

~/gatk-data-ref$ bwa mem -M -t 96 -R ‘@RG:SRR622459:Q:illumina:FCC1H7WACXX:NA12892’ Homo_sapiens_assembly38.fasta SRR622459_1.fastq.gz SRR622459_2.fastq.gz | samtools view -Sbh -o SRR622459_1.bam

[main] Version: 0.7.17-r1188

………………..

[main] Real time: 22680.497 sec; CPU: 1393622.442 sec

Generate alignment statistics

~/gatk-data-ref$ sambamba flagstat -p SRR622459_1.bam

sambamba 0.6.9 by Artem Tarasov and Pjotr Prins (C) 2012-2019

2467570854 + 0 in total (QC-passed reads + QC-failed reads)

10585005 + 0 secondary

11607447 + 0 supplementary

0 + 0 duplicates

2364732708 + 0 mapped (95.83%:N/A)

2445378402 + 0 paired in sequencing

1222689201 + 0 read1

1222689201 + 0 read2

2254822518 + 0 properly paired (92.21%:N/A)

2313333564 + 0 with itself and mate mapped

29206692 + 0 singletons (1.19%:N/A)

27935066 + 0 with mate mapped to a different chr

16234878 + 0 with mate mapped to a different chr (mapQ>=5)

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 200710884147 May 2 11:47 SRR622459_1.bam

-rw-rw-r– 1 ubuntu ubuntu 192007490886 May 2 13:42 SRR622459_1.sorted.bam

-rw-rw-r– 1 ubuntu ubuntu 9775584 May 2 14:05 SRR622459_1.sorted.bam.bai

Sort and index the BAM file

~/gatk-data-ref$ samtools sort -@ 96 -m 3G SRR622459_1.bam -o SRR622459_1.sorted.bam

[bam_sort_core] merging from 192 files and 96 in-memory blocks…

~/gatk-data-ref$ samtools index -@ 96 SRR622459_1.sorted.bam

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 192007490886 May 2 13:42 SRR622459_1.sorted.bam

-rw-rw-r– 1 ubuntu ubuntu 9775584 May 2 14:05 SRR622459_1.sorted.bam.bai

Validate the BAM file (for GATK analysis)

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.bam -M SUMMARY -O summary-SRR622459_1.sorted

~/gatk-data-ref$ cat summary-SRR622459_1.sorted

## HISTOGRAM    java.lang.String

Error Type                          Count

ERROR:INVALID_TAG_NM            245,444

Fix the error reported above

~/gatk-data-ref$ gatk SetNmMdAndUqTags -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.bam -O SRR622459_1.sorted.NmMdTqTgs.bam

validate the BAM file again and create an index

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.bam -M SUMMARY -O summary-SRR622459_1.sorted.NmMdTqTgs

[Sat May 04 19:07:58 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 331.75 minutes.

…………..

Tool returned: 0

~/gatk-data-ref$ cat summary-SRR622459_1.sorted.NmMdTqTgs

No errors found

~/gatk-data-ref$ samtools index SRR622459_1.sorted.NmMdTqTgs.bam

Mark duplicates and index the BAM file created

~/gatk-data-ref$ nohup gatk MarkDuplicates -I SRR622459_1.sorted.NmMdTqTgs.bam -O SRR622459_1.sorted.NmMdTqTgs.mdup.bam -M SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt >& 59_1.fxNm.log &

~/gatk-data-ref$ tail 59_1.fxNm.log

…………….

[Sun May 05 05:03:29 UTC 2019] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 680.30 minutes.

Runtime.totalMemory()=3481796608

Tool returned: 0

…………..

~/gatk-data-ref$ head SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt

……………


LIBRARY UNPAIRED_READS_EXAMINED READ_PAIRS_EXAMINED     SECONDARY_OR_SUPPLEMENTARY_RDS  UNMAPPED_READS  UNPAIRED_READ_DUPLICATES        READ_PAIR_DUPLICATES    READ_PAIR_OPTICAL_DUPLICATES    PERCENT_DUPLICATION  ESTIMATED_LIBRARY_SIZE

Q       29206692        1156666782      22192452        102838146       14050105        58665347        0       0.056085        11013720153

~/gatk-data-ref$ samtools index SRR622459_1.sorted.NmMdTqTgs.mdup.bam

Additional directory contents

~/gatk-data-ref$ ls -l


-rw-rw-r-- 1 b0d2647 b0d2647       691071 May  5 05:03 59_1.fxNm.log

-rw-rw-r-- 1 b0d2647 b0d2647 260704633123 May  4 10:23 SRR622459_1.sorted.NmMdTqTgs.bam

-rw-rw-r-- 1 b0d2647 b0d2647      9786952 May  4 18:05 SRR622459_1.sorted.NmMdTqTgs.bam.bai

-rw-rw-r-- 1 b0d2647 b0d2647         5565 May  5 05:03 SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt

-rw-rw-r-- 1 b0d2647 b0d2647 263473284570 May  5 05:03 SRR622459_1.sorted.NmMdTqTgs.mdup.bam

-rw-rw-r-- 1 b0d2647 b0d2647      9817616 May  5 09:59 SRR622459_1.sorted.NmMdTqTgs.mdup.bam.bai

-rw-rw-r-- 1 b0d2647 b0d2647           16 May  4 19:07 summary-SRR622459_1.sorted.NmMdTqTgs

Base quality calibration (using gatk BaseReclaibrator and gatk Apply BQSR)

-It takes a long time to calibrate the bases in the entire BAM file.

A3. Generate a validated BAM file for NA12878

Align the fastq sequences to the reference genome using BWA

Alignment (bwa mem) will lead to a SAM (sequence alignment file) file, that will be duplicate marked using samblaster. The sam file will be converted to a BAM file (samtools view). The BAM file will be sorted, indexed and subjected to generate alignment statistics

~/gatk-data-ref$ bwa mem -M -t 72 -R ‘@RG:SRR622461:R:illumina:FCC1H7WACXX:NA12878’ Homo_sapiens_assembly38.fasta SRR622461_1.fastq.gz SRR622461_2.fastq.gz | samblaster -M | samtools view -Sbh | samtools sort -o SRR622461.bam - && samtools index SRR622461.bam && samtools flagstat SRR622461.bam

………………..

samblaster: Version 0.1.24

samblaster: Inputting from stdin

samblaster: Outputting to stdout

[M::bwa_idx_load_from_disk] read 3171 ALT contigs

[M::process] read 7128714 sequences (720000114 bp)…

……….

samblaster: Marked 7066698 of 92459454 (7.64%) read ids as duplicates using 1,464,472k memory in 2M15S(135.165S) CPU seconds and 34M15S(2055S) wall time.

………………….

[main] Version: 0.7.17-r1188

…………………

[main] Real time: 2054.506 sec; CPU: 86258.664 sec

[bam_sort_core] merging from 71 files and 1 in-memory blocks…

186434670 + 0 in total (QC-passed reads + QC-failed reads)

745422 + 0 secondary

770340 + 0 supplementary

14305380 + 0 duplicates

177372458 + 0 mapped (95.14% : N/A)

184918908 + 0 paired in sequencing

92459454 + 0 read1

92459454 + 0 read2

168640536 + 0 properly paired (91.20% : N/A)

173607304 + 0 with itself and mate mapped

2249392 + 0 singletons (1.22% : N/A)

1688796 + 0 with mate mapped to a different chr

819246 + 0 with mate mapped to a different chr (mapQ>=5)

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 12932312543 Apr 30 17:29 SRR622461.bam

-rw-rw-r– 1 ubuntu ubuntu 5679424 Apr 30 17:31 SRR622461.bam.bai

Validate the BAM file

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622461.bam -M SUMMARY -O summary-SRR622461

…………

Tool returned: 3

~/gatk-data-ref$ cat summary-SRR622461

## HISTOGRAM    java.lang.String

Error Type          Count

ERROR:INVALID_TAG_NM    16164

Fix the error noted above

~/gatk-data-ref$ gatk SetNmMdAndUqTags -R Homo_sapiens_assembly38.fasta -I SRR622461.bam -O SRR622461.fxNmMdUqTag.bam

validate the BAM file again and create an index

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622461.fxNmMdUqTag.bam -M SUMMARY -O summary-SRR622461.fxNmMdUqTag

…………..

Tool returned: 0

~/gatk-data-ref$ cat summary-SRR622461.fxNmMdUqTag

No errors found

~/gatk-data-ref$ samtools index SRR622461.fxNmMdUqTag.bam

Mark duplicates and index the BAM file created

~/gatk-data-ref$ nohup gatk MarkDuplicates -I SRR622461.fxNmMdUqTag.bam -O SRR622461.fxNmMdUqTag.mdup.bam -M SRR622461.fxNmMdUqTag.dupMetrics.txt

~/gatk-data-ref$ head SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt

……………


## METRICS CLASS        picard.sam.DuplicationMetrics
LIBRARY UNPAIRED_READS_EXAMINED READ_PAIRS_EXAMINED     SECONDARY_OR_SUPPLEMENTARY_RDS  UNMAPPED_READS  UNPAIRED_READ_DUPLICATES        READ_PAIR_DUPLICATES  READ_PAIR_OPTICAL_DUPLICATES    PERCENT_DUPLICATION     ESTIMATED_LIBRARY_SIZE

R       2249392 86803652        1515762 9062212 635818  7009234 0       0.083331        508154568

~/gatk-data-ref$ samtools index SRR622461.fxNmMdUqTag.mdup.bam

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r-- 1 b0d2647 b0d2647 17553093573 May  6 04:00 SRR622461.fxNmMdUqTag.bam
-rw-rw-r-- 1 b0d2647 b0d2647     8846296 May  6 17:08 SRR622461.fxNmMdUqTag.bam.bai

-rw-rw-r-- 1 b0d2647 b0d2647        3531 May  6 14:42 SRR622461.fxNmMdUqTag.dupMetrics.txt

-rw-rw-r-- 1 b0d2647 b0d2647 17728293924 May  6 14:42 SRR622461.fxNmMdUqTag.mdup.bam
-rw-rw-r-- 1 b0d2647 b0d2647     8959264 May  6 17:08 SRR622461.fxNmMdUqTag.mdup.bam.bai

-rw-rw-r-- 1 b0d2647 b0d2647          16 May  6 04:38 summary-SRR622461.fxNmMdUqTag

B. Haplotype chrna4 gene of the 3 individuals in GVCF mode

B1. Haplotype chrna4 of NA12891

~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622458.fxNmMdUqTag.mdup.bam -L chr20:63343310-63375471 -ERC GVCF -O SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf

B2. Haplotype chrna4 of NA12892

~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr20:63343310-63375471 -ERC GVCF -O SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf

B3. Haplotype chrna4 of NA12878

~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I NA12878/SRR622461.fxNmMdUqTag.mdup.bam -L chr20:63343310-63375471 -ERC GVCF -O SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf

Additional directory contents

~/gatk-data-ref$ ls -l


-rw-rw-r-- 1 b0d2647 b0d2647     855121 May  8 01:01 SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf
-rw-rw-r-- 1 b0d2647 b0d2647     367624 May  8 01:01 SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647     896478 May  8 01:03 SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf
-rw-rw-r-- 1 b0d2647 b0d2647     367628 May  8 01:03 SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647     383500 May  8 01:05 SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf
-rw-rw-r-- 1 b0d2647 b0d2647     367624 May  8 01:05 SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf.idx

C. Combine the GenotypeVCF files and genotype the samples together (using gatk GenotypeGVCFs)

Combine GenotypeVCF files

~/gatk-data-ref$ nohup gatk CombineGVCFs -R Homo_sapiens_assembly38.fasta -V SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf -V SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf -V SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf -O SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.vcf &> combine-58-59-61.fxTgs.mdup.chrna4.g.log &

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 1923713 May 8 01:21 SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.vcf

-rw-rw-r– 1 b0d2647 b0d2647 367632 May 8 01:21 SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.vcf.idx

-rw-rw-r– 1 b0d2647 b0d2647 3654 May 8 01:21 combine-58-59-61.fxTgs.mdup.chrna4.g.log

Genotype the samples together

~/gatk-data-ref$ nohup gatk GenotypeGVCFs -R Homo_sapiens_assembly38.fasta -V SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.vcf -O SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.jointcalls.vcf &> genotypeGVCFs-58-59-61-chrna4.g.jointcalls.log &

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 212392 May 8 01:28 SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.jointcalls.vcf

-rw-rw-r– 1 b0d2647 b0d2647 118109 May 8 01:28 SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.jointcalls.vcf.idx

-rw-rw-r– 1 b0d2647 b0d2647 3065 May 8 01:28 genotypeGVCFs-58-59-61-chrna4.g.jointcalls.log

Generate variant statistics

~/gatk-data-ref$ bcftools stats SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.jointcalls.vcf | less

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.jointcalls.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR6224-58-59-61-fxTgs-mdup.chrna4.g.combine.jointcalls.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key                                  [4]value
SN      0       number of samples:                      3
SN      0       number of records:                      118
SN      0       number of no-ALTs:                      0
SN      0       number of SNPs:                         99
SN      0       number of MNPs:                         0
SN      0       number of indels:                       19
SN      0       number of others:                       0
SN      0       number of multiallelic sites:           3
SN      0       number of multiallelic SNP sites:       2

D. Run GenomicsDBImport on individual GenotypeVCFs together

~/gatk-data-ref$ gatk GenomicsDBImport -V SRR622458.fxNmMdUqTag.mdup.chrna4.g.vcf -V SRR622459_1.fxNmMdUqTag.mdup.chrna4.g.vcf -V SRR622461.fxNmMdUqTag.mdup.chrna4.g.vcf –genomicsdb-workspace-path genomicsDbImport_output -L chr20:63343310-63375471

Additional directory contents

~/gatk-data-ref$ ls -l genomicsDbImport_output/

-rwx—— 1 b0d2647 b0d2647 0 May 8 01:45 __tiledb_workspace.tdb

-rwx—— 1 b0d2647 b0d2647 282 May 8 01:45 callset.json

drwx—— 4 b0d2647 b0d2647 4096 May 8 01:45 ‘chr20$63343310$63375471’

-rwx—— 1 b0d2647 b0d2647 180561 May 8 01:45 vcfheader.vcf

-rwx—— 1 b0d2647 b0d2647 291310 May 8 01:45 vidmap.json

LS0tDQp0aXRsZTogIkdlbm90eXBlIGNob2xpbmVyZ2ljIG5pY290aW5pYyByZWNlcHRvciBhbHBoYSA0IChDSFJOQTQpIGZyb20gbXVsdGlwbGUgaW5kaXZpZHVhbHMiDQphdXRob3I6ICJCaGFnaXJhdGhpIERhc2giDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCiMjIEFwcHJvYWNoDQoNClRoZSBnZW5vdHlwZSBvZiBjaG9saW5lcmdpYyBuaWNvdGluYyByZWNlcHRvciBhbHBoYSA0IChjaHJuYTQpIGxvY2F0ZWQgb24gY2hyb21vc29tZSAyMCAoY2hyMjA6IDYzLDM0MywzMTAuLjYzLDM3NSw0NzEpIHdpbGwgYmUgZGV0ZXJtaW5lZC4NCg0KVGhpcyBwcm9jZXNzIGludm9sdmVzIDQgYnJvYWRlciBzdGVwcy4NCg0KQS4gUHJvY2VzcyB0aGUgc2VxdWVuY2luZyBmaWxlcyBhbmQgZ2VuZXJhdGUgYSBnYXRrIHZhbGlkYXRlZCAoZ2F0ayBWYWxpZGF0ZXNhbUZpbGUpIEJBTSBmaWxlDQoNCkIuIENhbGwgaGFwbG90eXBlcyB1c2luZyBHQVRLIEhhcGxvdHlwZUNhbGxlciBpbiBHVkNGIG1vZGUgKHRvIGdlbmVyYXRlIEdlbm90eXBlVkNGcykNCg0KQy4gQ29tYmluZSB0aGUgR2Vub3R5cGVWQ0ZzIGZpbGVzICAodXNpbmcgZ2F0ayBDb21iaW5lR1ZDRnMpIGFuZCBnZW5vdHlwZSB0aGUgc2FtcGxlcyB0b2dldGhlciAodXNpbmcgZ2F0ayBHZW5vdHlwZUdWQ0ZzKSBvcg0KDQpELiBSdW4gZ2F0ayBHZW5vbWljc0RCSW1wb3J0IG9uIGluZGl2aWR1YWwgR2Vub3R5cGVWQ0ZzIHRvZ2V0aGVyDQoNCg0KDQoNCiMjIE1hY2hpbmUNCg0KR29vZ2xlIENsb3VkIFBsYXRmb3JtIChHQ1ApLCA0IHZDUFVzLCAxNSBHQiBSQU0NCg0KR29vZ2xlIENsb3VkIFBsYXRmb3JtIChHQ1ApLCA4IHZDUFVzLCAzMCBHQiBSQU0NCg0KR29vZ2xlIENsb3VkIFBsYXRmb3JtIChHQ1ApLCAyNCB2Q1BVcywgMzIgR0IgUkFNDQoNCkFXUzogYzUuMTh4bGFyZ2UgKDcyIHZDUFVzLCAxNDQgR0IgUkFNKQ0KDQpBV1M6IG01LjI0eGxhcmdlICg5NiB2Q1BVcywgMzg0IEdpQiBSQU0pDQoNCg0KDQojIyBSZWZlcmVuY2UNCg0KLVRoZSBnZW5vbWUgb3IgYSBjaHJvbW9zb21hbCByZWdpb24gb3IgYSBnZW5lIG9mIGludGVyZXN0IG9mIHRocmVlIGluZGl2aWR1YWxzIChOQTEyODkxLCBOQTEyODkyIGFuZCBOQTEyODc4KSB3aWxsIGJlIGFuYWx5emVkLg0KDQotVGhlIGdlbm9tZSBzZXF1ZW5jaW5nIGRhdGEgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSAxMDAwIGdlbm9tZSBwcm9qZWN0IChodHRwOi8vd3d3LmludGVybmF0aW9uYWxnZW5vbWUub3JnLzEwMDAtZ2Vub21lcy1icm93c2Vycy8pDQoNCg0KDQojIyBBbmFseXNpcyBkYXRhc2V0cw0KDQoNCiMjIyBEb3dubG9hZCBnZW5vbWUgc2VxdWVuY2luZyBkYXRhIGZvciBpbmRpdmlkdWFsIE5BMTI4OTEgZnJvbSB0aGUgMTAwMCBnZW5vbWUgcHJvamVjdCBzaXRlDQoNCg0KDQojIyMjICAgIH4vZ2F0ay1kYXRhLXJlZiQgd2dldCAtYnFjIGZ0cDovL2Z0cC5zcmEuZWJpLmFjLnVrL3ZvbDEvZmFzdHEvU1JSNjIyL1NSUjYyMjQ1OC9TUlI2MjI0NThfMS5mYXN0cS5neg0KDQojIyMjICAgIH4vZ2F0ay1kYXRhLXJlZiQgd2dldCAtYnFjIGZ0cDovL2Z0cC5zcmEuZWJpLmFjLnVrL3ZvbDEvZmFzdHEvU1JSNjIyL1NSUjYyMjQ1OC9TUlI2MjI0NThfMi5mYXN0cS5neg0KDQoNCg0KDQojIyMgRG93bmxvYWQgZ2Vub21lIHNlcXVlbmNpbmcgZGF0YSBmb3IgaW5kaXZpZHVhbCBOQTEyODkyIGZyb20gdGhlIDEwMDAgZ2Vub21lIHByb2plY3Qgc2l0ZQ0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9TUlI2MjIvU1JSNjIyNDU5L1NSUjYyMjQ1OV8xLmZhc3RxLmd6DQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9TUlI2MjIvU1JSNjIyNDU5L1NSUjYyMjQ1OV8yLmZhc3RxLmd6DQoNCg0KDQoNCiMjIyBEb3dubG9hZCBnZW5vbWUgc2VxdWVuY2luZyBkYXRhIGZvciBpbmRpdmlkdWFsIE5BMTI4NzggZnJvbSB0aGUgMTAwMCBnZW5vbWUgcHJvamVjdCBzaXRlDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHdnZXQgLWJxYyBmdHA6Ly9mdHAuc3JhLmViaS5hYy51ay92b2wxL2Zhc3RxL1NSUjYyMi9TUlI2MjI0NjEvU1JSNjIyNDYxXzEuZmFzdHEuZ3oNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgd2dldCAtYnFjIGZ0cDovL2Z0cC5zcmEuZWJpLmFjLnVrL3ZvbDEvZmFzdHEvU1JSNjIyL1NSUjYyMjQ2MS9TUlI2MjI0NjFfMi5mYXN0cS5neg0KDQoNCg0KDQoNCg0KIyMgRGlyZWN0b3J5IGNvbnRlbnQNCg0KIyMjIyAgICAgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQpgYGANCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgNjY3NzEzNjAyODUgQXByIDMwIDE1OjM4IFNSUjYyMjQ1OF8xLmZhc3RxLmd6DQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSA2ODMwMDIwNTY0NyBBcHIgMzAgMTU6NDUgU1JSNjIyNDU4XzIuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgNjgwMjkzMzU1NDYgQXByIDMwIDE1OjUwIFNSUjYyMjQ1OV8xLmZhc3RxLmd6DQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSA2OTIxOTQ0Mzc4OSBBcHIgMzAgMTU6NTQgU1JSNjIyNDU5XzIuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDQ1OTgyNDkyMTkgQXByIDMwIDE1OjQ1IFNSUjYyMjQ2MV8xLmZhc3RxLmd6DQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgNDc5MjM4MzYzMSBBcHIgMzAgMTU6NDcgU1JSNjIyNDYxXzIuZmFzdHEuZ3oNCg0KYGBgDQoNCg0KDQojIyBDaGVjayBhbmFseXNpcyBkYXRhc2V0cw0KDQoNCiMjIyBGb3IgTkExMjg5MQ0KDQoNCiMjIyMgICAgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IFNSUjYyMjQ1OF8xLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQogICAgDQpAU1JSNjIyNDU4LjEgMS8xDQoNClRHR0dBVFRHR0dHVEFHR0dDVEFHR0dDVENHR0dUVEdHR0dBVEFHR0dUR0FHR0dUVFRHR0dBVEFHR0dHVEFHR0dUVEFHR0dUR1RUR0dDVEFHR0dUVEFHR0dDR0FHR0dDQ0FHR0dDDQoNCg0KIyMjIyAgICB+L2dhdGstZGF0YS1yZWYkIHpjYXQgU1JSNjIyNDU4XzIuZmFzdHEuZ3ogfCBoZWFkIC1uIDINCg0KQFNSUjYyMjQ1OC4xIDEvMg0KDQpBVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0dDVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0FBVEFBQ0NDVEFBQ0NDVEFBQ0FDVEFBQ0NUVEFDQ0NDVEFBQ0NDVEFBQ0NDVENBQw0KDQoNCg0KDQoNCg0KIyMjIEZvciBOQTEyODkyDQoNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgemNhdCBTUlI2MjI0NTlfMS5mYXN0cS5neiB8IGhlYWQgLW4gMg0KDQpAU1JSNjIyNDU5LjEgMS8xDQoNCkdUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dUVEFHR0dBR0FUQ0dHQUFHDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHpjYXQgU1JSNjIyNDU5XzIuZmFzdHEuZ3ogfCBoZWFkIC1uIDINCg0KQFNSUjYyMjQ1OS4xIDEvMg0KDQpDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQUdBVENHR0FBRw0KDQoNCg0KDQojIyMgRm9yIE5BMTI4NzgNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgemNhdCBTUlI2MjI0NjFfMS5mYXN0cS5neiB8IGhlYWQgLW4gMg0KDQpAU1JSNjIyNDYxLjEgMS8xDQoNCkdDVEFHR0dHVEFHR0dUVEFHR0dDVENHR0FUVEFHR0dHVEdHR0FUVEFHR0dUVEFHQUdHQUFHVEdBVEFHQ0NUVENBR0dHVEFHR0dBVENHR0dDQUFHR0FBVEFHR0FUVEdUR0dHVEdHDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IFNSUjYyMjQ2MV8yLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQoNCkBTUlI2MjI0NjEuMSAxLzINCg0KQVRBQUNDVEFBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNUQ1RBVENBQ1RHQUFDQVRBQUdDQ1RUQUNDQVRBQ0dUVENBQUFDQVRBQ0ENCg0KDQoNCg0KDQoNCg0KIyMgRG93bmxvYWQgdGhlIHJlZmVyZW5jZSAoZmFzdGEsIGZhc3RhIGluZGV4LCBkaWN0aW9uYXJ5KSBhbmQgQldBIGluZGV4ICguYWx0LCAuYW1iLCAuYW5uLCAuYnd0LCAucGFjIGFuZCAuc2EpIGZpbGVzDQoNCg0KYGBgDQogICAgICAgIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC4NCg0KICAgICAgICB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5kaWN0IC4NCg0KICAgICAgICB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS5mYWkgLg0KDQoNCiB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbHQgLg0KDQogDQogfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW1iIC4NCg0KIA0KIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFubiAuDQoNCiANCiB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5id3QgLg0KDQogDQogfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQucGFjIC4NCg0KIA0KIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LnNhIC4NCg0KYGBgDQoNCg0KDQojIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjICAgICB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICA1ODE3MTIgSmFuICA2ICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmRpY3QNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDMyNDk5MTI3NzggSmFuICA1ICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgNDg3NTUzIE5vdiAgNiAyMzo0NyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgMjAxOTkgTm92ICA2IDIzOjQ3IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFtYg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDQ1NTQ3NCBOb3YgIDYgMjM6NDcgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW5uDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAzMjE3MzQ3MDA0IE5vdiAgNiAyMzo0NyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5id3QNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICA4MDQzMzY3MzEgTm92ICA2IDIzOjQ4IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LnBhYw0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMTYwODY3MzUxMiBOb3YgIDYgMjM6NDggSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuc2ENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAxNjA5MjggRGVjICAxICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLmZhaQ0KDQoNCg0KDQojIyBBLiBQcm9kdWNlIHZhbGlkYXRlZCBCQU0gZmlsZXMgZm9yIHRoZSAzIGluZGl2aWR1YWxzDQoNCg0KYGBgDQpBMS4gR2VuZXJhdGUgYSB2YWxpZGF0ZWQgQkFNIGZpbGUgZm9yIE5BMTI4OTENCg0KYGBgDQoNCg0KDQojIyBBbGlnbiB0aGUgc2VxdWVuY2VzIHRvIHRoZSByZWZlcmVuY2Ugc2VxdWVuY2UgdXNpbmcgQldBIA0KDQpBbGlnbm1lbnQgKGJ3YSBtZW0pIHdpbGwgbGVhZCB0byBhIFNBTSAoc2VxdWVuY2UgYWxpZ25tZW50IGZpbGUpIGZpbGUsIHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBCQU0gZmlsZSAoc2FtdG9vbHMgdmlldykuIEl0IHdpbGwgYmUgc29ydGVkIChpLmUuLCBzYW10b29scyBzb3J0KSBieSBjby1vcmRpbmF0ZSBhbmQgaW5kZXhlZCAoc2FtdG9vbHMgaW5kZXgpLiBTYW10b29scyBmbGFnc3RhdCB3aWxsIHByb2R1Y2UgYWxpZ25tZW50IHN0YXRpc3RpY3MuDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBid2EgbWVtIC1NIC10IDk2IC1SICdAUkdcdElEOlNSUjYyMjQ1OFx0TEI6UFx0UEw6aWxsdW1pbmFcdFBVOkZDQzFIN1dBQ1hYXHRTTTpOQTEyODkxJyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSBTUlI2MjI0NThfMS5mYXN0cS5neiBTUlI2MjI0NThfMi5mYXN0cS5neiB8IHNhbXRvb2xzIHZpZXcgLVNiaCB8IHNhbXRvb2xzIHNvcnQgLW8gU1JSNjIyNDU4LmJhbSAtICYmIHNhbXRvb2xzIGluZGV4IFNSUjYyMjQ1OC5iYW0gJiYgc2FtdG9vbHMgZmxhZ3N0YXQgU1JSNjIyNDU4LmJhbQ0KDQouLi4uLi4uLi4uLi4uLi4uDQoNClttYWluXSBWZXJzaW9uOiAwLjcuMTctcjExODgNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KW21haW5dIFJlYWwgdGltZTogMjcwOTguMDU5IHNlYzsgQ1BVOiAxMzM3MDgzLjY2NyBzZWMNCg0KW2JhbV9zb3J0X2NvcmVdIG1lcmdpbmcgZnJvbSA5NDcgZmlsZXMgYW5kIDEgaW4tbWVtb3J5IGJsb2Nrcy4uLg0KDQoNCmBgYA0KMjQ0ODA5OTA0NiArIDAgaW4gdG90YWwgKFFDLXBhc3NlZCByZWFkcyArIFFDLWZhaWxlZCByZWFkcykNCjExNTIwOTgzICsgMCBzZWNvbmRhcnkNCjEyODgwMjk3ICsgMCBzdXBwbGVtZW50YXJ5DQowICsgMCBkdXBsaWNhdGVzDQoyMzY4NDcyNjI3ICsgMCBtYXBwZWQgKDk2Ljc1JSA6IE4vQSkNCjI0MjM2OTc3NjYgKyAwIHBhaXJlZCBpbiBzZXF1ZW5jaW5nDQoxMjExODQ4ODgzICsgMCByZWFkMQ0KMTIxMTg0ODg4MyArIDAgcmVhZDINCjIyNTg4ODUzMzggKyAwIHByb3Blcmx5IHBhaXJlZCAoOTMuMjAlIDogTi9BKQ0KMjMxNzI2NjY3NiArIDAgd2l0aCBpdHNlbGYgYW5kIG1hdGUgbWFwcGVkDQoyNjgwNDY3MSArIDAgc2luZ2xldG9ucyAoMS4xMSUgOiBOL0EpDQozMTAyMjQ1NCArIDAgd2l0aCBtYXRlIG1hcHBlZCB0byBhIGRpZmZlcmVudCBjaHINCjE3NDU2NDM1ICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNociAobWFwUT49NSkNCg0KYGBgDQoNCg0KDQojIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjICAgICB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxODkwMDU3NzcwMTEgTWF5ICAxIDE3OjQ2IFNSUjYyMjQ1OC5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDk3Nzc2NzIgTWF5ICAxIDE5OjEyIFNSUjYyMjQ1OC5iYW0uYmFpDQoNCg0KDQojIyBWYWxpZGF0ZSB0aGUgQmFtIEZpbGUgDQoNCiMjIyMgICAgICBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTguYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeS1TUlI2MjI0NTgNCg0KDQouLi4uLi4uLi4uLi4uLi4NCg0KW0ZyaSBNYXkgMDMgMjE6MDE6MzQgVVRDIDIwMTldIHBpY2FyZC5zYW0uVmFsaWRhdGVTYW1GaWxlIGRvbmUuIEVsYXBzZWQgdGltZTogNDQzLjQxIG1pbnV0ZXMuDQoNCi4uLi4uLi4uLi4uLi4uLi4NCg0KVG9vbCByZXR1cm5lZDogMw0KDQojIyMjICAgICB+L2dhdGstZGF0YS1yZWYkIGNhdCBzdW1tYXJ5LVNSUjYyMjQ1OA0KDQpgYGANCiMjIEhJU1RPR1JBTSAgICBqYXZhLmxhbmcuU3RyaW5nDQoNCkVycm9yIFR5cGUgICAgICAgICAgICAgIENvdW50DQoNCkVSUk9SOklOVkFMSURfVEFHX05NICAgIDIwNzA4Nw0KDQpgYGANCg0KDQoNCiMjIEZpeCB0aGUgSU5WQUxJRF9UQUdfTk0gZXJyb3INCg0KDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBTZXRObU1kQW5kVXFUYWdzIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OC5iYW0gLU8gU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbQ0KDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQoNCg0KIyMgVmFsaWRhdGUgdGhlICdTZXRObU1kQW5kVXFUYWdzJyBvciBwcmVzdW1lZCBmaXhlZCBCQU0gZmlsZSBhZ2Fpbg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTguZnhObU1kVXFUYWcuYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeS1TUlI2MjI0NTguZnhObU1kVXFUYWcNCg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpbU2F0IE1heSAwNCAxMTowOTo1OSBVVEMgMjAxOV0gcGljYXJkLnNhbS5WYWxpZGF0ZVNhbUZpbGUgZG9uZS4gRWxhcHNlZCB0aW1lOiAzNDUuMTYgbWludXRlcy4NCg0KLi4uLi4uLi4uLi4uLg0KDQoNClRvb2wgcmV0dXJuZWQ6IDANCg0KDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnktU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnIA0KDQpObyBlcnJvcnMgZm91bmQNCg0KDQoNCg0KIyMgTWFyayBkdXBsaWNhdGVzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIE1hcmtEdXBsaWNhdGVzIC1JIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5iYW0gLU8gU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAuYmFtIC1NIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5kdXBNZXRyaWNzLnR4dA0KDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoNCltTdW4gTWF5IDA1IDA0OjU5OjQ0IFVUQyAyMDE5XSBwaWNhcmQuc2FtLm1hcmtkdXBsaWNhdGVzLk1hcmtEdXBsaWNhdGVzIGRvbmUuIEVsYXBzZWQgdGltZTogNjg0Ljk2IG1pbnV0ZXMuDQoNCi4uLi4uLi4uLi4uLi4uLi4NCg0KVG9vbCByZXR1cm5lZDogMA0KDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgaGVhZCBTUlI2MjI0NTguZnhObU1kVXFUYWcuZHVwTWV0cmljcy50eHQgDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQpgYGANCkxJQlJBUlkgVU5QQUlSRURfUkVBRFNfRVhBTUlORUQgUkVBRF9QQUlSU19FWEFNSU5FRCAgICAgU0VDT05EQVJZX09SX1NVUFBMRU1FTlRBUllfUkRTICBVTk1BUFBFRF9SRUFEUyAgVU5QQUlSRURfUkVBRF9EVVBMSUNBVEVTICAgICAgICBSRUFEX1BBSVJfRFVQTElDQVRFUyAgICBSRUFEX1BBSVJfT1BUSUNBTF9EVVBMSUNBVEVTICAgIFBFUkNFTlRfRFVQTElDQVRJT04gIEVTVElNQVRFRF9MSUJSQVJZX1NJWkUNCg0KUCAgICAgICAyNjgwNDY3MSAgICAgICAgMTE1ODYzMzMzOCAgICAgIDI0NDAxMjgwICAgICAgICA3OTYyNjQxOSAgICAgICAgMTIxNDk2NTYgICAgICAgIDU3MTMzMjMwICAgICAgICAwICAgICAgIDAuMDUzOTMgMTEzNTg3ODA4ODYNCg0KYGBgDQoNCg0KIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAgICAgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI1NjQxNDUxNDc0OCBNYXkgIDQgMDU6MDcgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgOTc5MTU2MCBNYXkgIDQgMTc6MTggU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgIDQ2MDQgTWF5ICA1IDA0OjU5IFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5kdXBNZXRyaWNzLnR4dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI1OTE0ODE2NDk2NSBNYXkgIDUgMDQ6NTkgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAuYmFtDQoNCg0KIyMgQmFzZSBxdWFsaXR5IGNhbGlicmF0aW9uICh1c2luZyBnYXRrIEJhc2VSZWNsYWlicmF0b3IgYW5kIGdhdGsgQXBwbHkgQlFTUikNCg0KLUl0IHRha2VzIGEgbG9uZyB0aW1lIHRvIGNhbGlicmF0ZSB0aGUgYmFzZXMgaW4gdGhlIGVudGlyZSBCQU0gZmlsZS4NCg0KLSBXZSB3aWxsLCBoZW5jZSwgcmVjYWxpYnJhdGUgdGhlIGJhc2VzIG9ubHkgaW4gY2hyb21vc29tZSAyMCBhbmQgY2FsbCB2YXJpYW50cyBpbiAoZ2VuZXMgb3IgcmVnaW9ucyBpbikgY2hyb21vc29tZSAyMC4gDQoNCg0KDQoNCg0KYGBgDQpBMi4gR2VuZXJhdGUgYSB2YWxpZGF0ZWQgQkFNIGZpbGUgZm9yIE5BMTI4OTINCg0KYGBgDQoNCg0KIyMgQWxpZ24gdGhlIGZhc3RxIHNlcXVlbmNlcyB0byB0aGUgcmVmZXJlbmNlIGdlbm9tZSB1c2luZyBCV0EgDQoNCkFsaWdubWVudCAoYndhIG1lbSkgd2lsbCBsZWFkIHRvIGEgU0FNIChzZXF1ZW5jZSBhbGlnbm1lbnQgZmlsZSkgZmlsZSwgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEJBTSBmaWxlIChzYW10b29scyB2aWV3KS4NCg0KDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgYndhIG1lbSAtTSAtdCA5NiAtUiAnQFJHXHRJRDpTUlI2MjI0NTlcdExCOlFcdFBMOmlsbHVtaW5hXHRQVTpGQ0MxSDdXQUNYWFx0U006TkExMjg5MicgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgU1JSNjIyNDU5XzEuZmFzdHEuZ3ogU1JSNjIyNDU5XzIuZmFzdHEuZ3ogfCBzYW10b29scyB2aWV3IC1TYmggLW8gU1JSNjIyNDU5XzEuYmFtDQoNCg0KW21haW5dIFZlcnNpb246IDAuNy4xNy1yMTE4OA0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpbbWFpbl0gUmVhbCB0aW1lOiAyMjY4MC40OTcgc2VjOyBDUFU6IDEzOTM2MjIuNDQyIHNlYw0KDQoNCg0KIyMgR2VuZXJhdGUgYWxpZ25tZW50IHN0YXRpc3RpY3MNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBzYW1iYW1iYSBmbGFnc3RhdCAtcCBTUlI2MjI0NTlfMS5iYW0gDQoNCg0Kc2FtYmFtYmEgMC42LjkgYnkgQXJ0ZW0gVGFyYXNvdiBhbmQgUGpvdHIgUHJpbnMgKEMpIDIwMTItMjAxOQ0KDQoNCmBgYA0KMjQ2NzU3MDg1NCArIDAgaW4gdG90YWwgKFFDLXBhc3NlZCByZWFkcyArIFFDLWZhaWxlZCByZWFkcykNCg0KMTA1ODUwMDUgKyAwIHNlY29uZGFyeQ0KDQoxMTYwNzQ0NyArIDAgc3VwcGxlbWVudGFyeQ0KDQowICsgMCBkdXBsaWNhdGVzDQoNCjIzNjQ3MzI3MDggKyAwIG1hcHBlZCAoOTUuODMlOk4vQSkNCg0KMjQ0NTM3ODQwMiArIDAgcGFpcmVkIGluIHNlcXVlbmNpbmcNCg0KMTIyMjY4OTIwMSArIDAgcmVhZDENCg0KMTIyMjY4OTIwMSArIDAgcmVhZDINCg0KMjI1NDgyMjUxOCArIDAgcHJvcGVybHkgcGFpcmVkICg5Mi4yMSU6Ti9BKQ0KDQoyMzEzMzMzNTY0ICsgMCB3aXRoIGl0c2VsZiBhbmQgbWF0ZSBtYXBwZWQNCg0KMjkyMDY2OTIgKyAwIHNpbmdsZXRvbnMgKDEuMTklOk4vQSkNCg0KMjc5MzUwNjYgKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyDQoNCjE2MjM0ODc4ICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNociAobWFwUT49NSkNCg0KYGBgDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDIwMDcxMDg4NDE0NyBNYXkgIDIgMTE6NDcgU1JSNjIyNDU5XzEuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE5MjAwNzQ5MDg4NiBNYXkgIDIgMTM6NDIgU1JSNjIyNDU5XzEuc29ydGVkLmJhbQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDk3NzU1ODQgTWF5ICAyIDE0OjA1IFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0uYmFpDQoNCg0KDQoNCiMjIFNvcnQgYW5kIGluZGV4IHRoZSBCQU0gZmlsZQ0KDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBzb3J0IC1AIDk2IC1tIDNHIFNSUjYyMjQ1OV8xLmJhbSAtbyBTUlI2MjI0NTlfMS5zb3J0ZWQuYmFtIA0KDQpbYmFtX3NvcnRfY29yZV0gbWVyZ2luZyBmcm9tIDE5MiBmaWxlcyBhbmQgOTYgaW4tbWVtb3J5IGJsb2Nrcy4uLg0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IC1AIDk2IFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0NCg0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE5MjAwNzQ5MDg4NiBNYXkgIDIgMTM6NDIgU1JSNjIyNDU5XzEuc29ydGVkLmJhbQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDk3NzU1ODQgTWF5ICAyIDE0OjA1IFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0uYmFpDQoNCg0KDQoNCiMjIFZhbGlkYXRlIHRoZSBCQU0gZmlsZSAoZm9yIEdBVEsgYW5hbHlzaXMpDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeS1TUlI2MjI0NTlfMS5zb3J0ZWQNCg0KDQojIyMgIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkDQoNCmBgYA0KIyMgSElTVE9HUkFNCWphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgVHlwZQkgICAgICAgICAgICAgICAgICAgICAgICBDb3VudA0KDQpFUlJPUjpJTlZBTElEX1RBR19OTQkgICAgICAgIDI0NSw0NDQNCg0KYGBgDQoNCg0KDQojIyBGaXggdGhlIGVycm9yIHJlcG9ydGVkIGFib3ZlDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFNldE5tTWRBbmRVcVRhZ3MgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLmJhbSAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbQ0KDQoNCg0KIyMgdmFsaWRhdGUgdGhlIEJBTSBmaWxlIGFnYWluIGFuZCBjcmVhdGUgYW4gaW5kZXgNCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbSAtTSBTVU1NQVJZIC1PIHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncw0KDQoNCltTYXQgTWF5IDA0IDE5OjA3OjU4IFVUQyAyMDE5XSBwaWNhcmQuc2FtLlZhbGlkYXRlU2FtRmlsZSBkb25lLiBFbGFwc2VkIHRpbWU6IDMzMS43NSBtaW51dGVzLg0KDQouLi4uLi4uLi4uLi4uLg0KDQpUb29sIHJldHVybmVkOiAwDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGNhdCBzdW1tYXJ5LVNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MgDQoNCk5vIGVycm9ycyBmb3VuZA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBpbmRleCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbQ0KDQoNCg0KDQojIyBNYXJrIGR1cGxpY2F0ZXMgYW5kIGluZGV4IHRoZSBCQU0gZmlsZSBjcmVhdGVkDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIG5vaHVwIGdhdGsgTWFya0R1cGxpY2F0ZXMgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5iYW0gLU8gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtTSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmR1cE1ldHJpY3MudHh0ID4mIDU5XzEuZnhObS5sb2cgJg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgdGFpbCA1OV8xLmZ4Tm0ubG9nIA0KDQouLi4uLi4uLi4uLi4uLi4uDQoNCltTdW4gTWF5IDA1IDA1OjAzOjI5IFVUQyAyMDE5XSBwaWNhcmQuc2FtLm1hcmtkdXBsaWNhdGVzLk1hcmtEdXBsaWNhdGVzIGRvbmUuIEVsYXBzZWQgdGltZTogNjgwLjMwIG1pbnV0ZXMuDQoNClJ1bnRpbWUudG90YWxNZW1vcnkoKT0zNDgxNzk2NjA4DQoNClRvb2wgcmV0dXJuZWQ6IDANCg0KLi4uLi4uLi4uLi4uLi4NCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBoZWFkIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuZHVwTWV0cmljcy50eHQgDQoNCi4uLi4uLi4uLi4uLi4uLg0KDQpgYGANCg0KTElCUkFSWSBVTlBBSVJFRF9SRUFEU19FWEFNSU5FRCBSRUFEX1BBSVJTX0VYQU1JTkVEICAgICBTRUNPTkRBUllfT1JfU1VQUExFTUVOVEFSWV9SRFMgIFVOTUFQUEVEX1JFQURTICBVTlBBSVJFRF9SRUFEX0RVUExJQ0FURVMgICAgICAgIFJFQURfUEFJUl9EVVBMSUNBVEVTICAgIFJFQURfUEFJUl9PUFRJQ0FMX0RVUExJQ0FURVMgICAgUEVSQ0VOVF9EVVBMSUNBVElPTiAgRVNUSU1BVEVEX0xJQlJBUllfU0laRQ0KDQpRICAgICAgIDI5MjA2NjkyICAgICAgICAxMTU2NjY2NzgyICAgICAgMjIxOTI0NTIgICAgICAgIDEwMjgzODE0NiAgICAgICAxNDA1MDEwNSAgICAgICAgNTg2NjUzNDcgICAgICAgIDAgICAgICAgMC4wNTYwODUgICAgICAgIDExMDEzNzIwMTUzDQoNCmBgYA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBpbmRleCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtDQoNCg0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCmBgYA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDY5MTA3MSBNYXkgIDUgMDU6MDMgNTlfMS5meE5tLmxvZw0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI2MDcwNDYzMzEyMyBNYXkgIDQgMTA6MjMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDk3ODY5NTIgTWF5ICA0IDE4OjA1IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuYmFtLmJhaQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICAgNTU2NSBNYXkgIDUgMDU6MDMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5kdXBNZXRyaWNzLnR4dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI2MzQ3MzI4NDU3MCBNYXkgIDUgMDU6MDMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgOTgxNzYxNiBNYXkgIDUgMDk6NTkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgICAgMTYgTWF5ICA0IDE5OjA3IHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncw0KDQpgYGANCg0KDQoNCiMjIEJhc2UgcXVhbGl0eSBjYWxpYnJhdGlvbiAodXNpbmcgZ2F0ayBCYXNlUmVjbGFpYnJhdG9yIGFuZCBnYXRrIEFwcGx5IEJRU1IpDQoNCi1JdCB0YWtlcyBhIGxvbmcgdGltZSB0byBjYWxpYnJhdGUgdGhlIGJhc2VzIGluIHRoZSBlbnRpcmUgQkFNIGZpbGUuDQoNCi0gV2Ugd2lsbCwgaGVuY2UsIHJlY2FsaWJyYXRlIHRoZSBiYXNlcyBvbmx5IGluIGNocm9tb3NvbWUgMjAgYW5kIGNhbGwgdmFyaWFudHMgaW4gKGdlbmVzIG9yIHJlZ2lvbnMgaW4pIGNocm9tb3NvbWUgMjAuIA0KDQoNCg0KDQoNCg0KYGBgDQpBMy4gR2VuZXJhdGUgYSB2YWxpZGF0ZWQgQkFNIGZpbGUgZm9yIE5BMTI4NzgNCg0KYGBgDQoNCg0KIyMgQWxpZ24gdGhlIGZhc3RxIHNlcXVlbmNlcyB0byB0aGUgcmVmZXJlbmNlIGdlbm9tZSB1c2luZyBCV0EgDQoNCkFsaWdubWVudCAoYndhIG1lbSkgd2lsbCBsZWFkIHRvIGEgU0FNIChzZXF1ZW5jZSBhbGlnbm1lbnQgZmlsZSkgZmlsZSwgdGhhdCB3aWxsIGJlIGR1cGxpY2F0ZSBtYXJrZWQgdXNpbmcgc2FtYmxhc3Rlci4gVGhlIHNhbSBmaWxlIHdpbGwgYmUgY29udmVydGVkIHRvIGEgQkFNIGZpbGUgKHNhbXRvb2xzIHZpZXcpLiBUaGUgQkFNIGZpbGUgd2lsbCBiZSBzb3J0ZWQsIGluZGV4ZWQgYW5kIHN1YmplY3RlZCB0byBnZW5lcmF0ZSBhbGlnbm1lbnQgc3RhdGlzdGljcw0KDQoNCiMjIyMjIH4vZ2F0ay1kYXRhLXJlZiQgYndhIG1lbSAtTSAtdCA3MiAtUiAnQFJHXHRJRDpTUlI2MjI0NjFcdExCOlJcdFBMOmlsbHVtaW5hXHRQVTpGQ0MxSDdXQUNYWFx0U006TkExMjg3OCcgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgU1JSNjIyNDYxXzEuZmFzdHEuZ3ogU1JSNjIyNDYxXzIuZmFzdHEuZ3ogfCBzYW1ibGFzdGVyIC1NIHwgc2FtdG9vbHMgdmlldyAtU2JoIHwgc2FtdG9vbHMgc29ydCAtbyBTUlI2MjI0NjEuYmFtIC0gJiYgc2FtdG9vbHMgaW5kZXggU1JSNjIyNDYxLmJhbSAmJiBzYW10b29scyBmbGFnc3RhdCBTUlI2MjI0NjEuYmFtDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCnNhbWJsYXN0ZXI6IFZlcnNpb24gMC4xLjI0DQoNCnNhbWJsYXN0ZXI6IElucHV0dGluZyBmcm9tIHN0ZGluDQoNCnNhbWJsYXN0ZXI6IE91dHB1dHRpbmcgdG8gc3Rkb3V0DQoNCltNOjpid2FfaWR4X2xvYWRfZnJvbV9kaXNrXSByZWFkIDMxNzEgQUxUIGNvbnRpZ3MNCg0KW006OnByb2Nlc3NdIHJlYWQgNzEyODcxNCBzZXF1ZW5jZXMgKDcyMDAwMDExNCBicCkuLi4NCg0KDQouLi4uLi4uLi4uDQoNCnNhbWJsYXN0ZXI6IE1hcmtlZCA3MDY2Njk4IG9mIDkyNDU5NDU0ICg3LjY0JSkgcmVhZCBpZHMgYXMgZHVwbGljYXRlcyB1c2luZyAxLDQ2NCw0NzJrIG1lbW9yeSBpbiAyTTE1UygxMzUuMTY1UykgQ1BVIHNlY29uZHMgYW5kIDM0TTE1UygyMDU1Uykgd2FsbCB0aW1lLg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNClttYWluXSBWZXJzaW9uOiAwLjcuMTctcjExODgNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNClttYWluXSBSZWFsIHRpbWU6IDIwNTQuNTA2IHNlYzsgQ1BVOiA4NjI1OC42NjQgc2VjDQoNCltiYW1fc29ydF9jb3JlXSBtZXJnaW5nIGZyb20gNzEgZmlsZXMgYW5kIDEgaW4tbWVtb3J5IGJsb2Nrcy4uLg0KDQoNCg0KYGBgDQoxODY0MzQ2NzAgKyAwIGluIHRvdGFsIChRQy1wYXNzZWQgcmVhZHMgKyBRQy1mYWlsZWQgcmVhZHMpDQoNCjc0NTQyMiArIDAgc2Vjb25kYXJ5DQoNCjc3MDM0MCArIDAgc3VwcGxlbWVudGFyeQ0KDQoxNDMwNTM4MCArIDAgZHVwbGljYXRlcw0KDQoxNzczNzI0NTggKyAwIG1hcHBlZCAoOTUuMTQlIDogTi9BKQ0KDQoxODQ5MTg5MDggKyAwIHBhaXJlZCBpbiBzZXF1ZW5jaW5nDQoNCjkyNDU5NDU0ICsgMCByZWFkMQ0KDQo5MjQ1OTQ1NCArIDAgcmVhZDINCg0KMTY4NjQwNTM2ICsgMCBwcm9wZXJseSBwYWlyZWQgKDkxLjIwJSA6IE4vQSkNCg0KMTczNjA3MzA0ICsgMCB3aXRoIGl0c2VsZiBhbmQgbWF0ZSBtYXBwZWQNCg0KMjI0OTM5MiArIDAgc2luZ2xldG9ucyAoMS4yMiUgOiBOL0EpDQoNCjE2ODg3OTYgKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyDQoNCjgxOTI0NiArIDAgd2l0aCBtYXRlIG1hcHBlZCB0byBhIGRpZmZlcmVudCBjaHIgKG1hcFE+PTUpDQoNCmBgYA0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDEyOTMyMzEyNTQzIEFwciAzMCAxNzoyOSBTUlI2MjI0NjEuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICA1Njc5NDI0IEFwciAzMCAxNzozMSBTUlI2MjI0NjEuYmFtLmJhaQ0KDQoNCg0KIyMgVmFsaWRhdGUgdGhlIEJBTSBmaWxlDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NjEuYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeS1TUlI2MjI0NjENCg0KDQouLi4uLi4uLi4uLi4NCg0KVG9vbCByZXR1cm5lZDogMw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBjYXQgc3VtbWFyeS1TUlI2MjI0NjEgDQoNCmBgYA0KIyMgSElTVE9HUkFNCWphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgVHlwZQkgICAgICAgIENvdW50DQoNCkVSUk9SOklOVkFMSURfVEFHX05NCTE2MTY0DQoNCmBgYA0KDQoNCg0KIyMgRml4IHRoZSBlcnJvciBub3RlZCBhYm92ZQ0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgU2V0Tm1NZEFuZFVxVGFncyAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NjEuYmFtIC1PIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5iYW0NCg0KDQoNCiMjIHZhbGlkYXRlIHRoZSBCQU0gZmlsZSBhZ2FpbiBhbmQgY3JlYXRlIGFuIGluZGV4DQoNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBWYWxpZGF0ZVNhbUZpbGUgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmJhbSAtTSBTVU1NQVJZIC1PIHN1bW1hcnktU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnDQoNCg0KLi4uLi4uLi4uLi4uLi4NCg0KVG9vbCByZXR1cm5lZDogMA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBjYXQgc3VtbWFyeS1TUlI2MjI0NjEuZnhObU1kVXFUYWcNCg0KTm8gZXJyb3JzIGZvdW5kDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5iYW0NCg0KDQoNCg0KIyMgTWFyayBkdXBsaWNhdGVzIGFuZCBpbmRleCB0aGUgQkFNIGZpbGUgY3JlYXRlZA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBub2h1cCBnYXRrIE1hcmtEdXBsaWNhdGVzIC1JIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5iYW0gLU8gU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuYmFtIC1NIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5kdXBNZXRyaWNzLnR4dA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBoZWFkIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuZHVwTWV0cmljcy50eHQgDQoNCi4uLi4uLi4uLi4uLi4uLg0KDQpgYGANCg0KIyMgTUVUUklDUyBDTEFTUyAgICAgICAgcGljYXJkLnNhbS5EdXBsaWNhdGlvbk1ldHJpY3MNCkxJQlJBUlkgVU5QQUlSRURfUkVBRFNfRVhBTUlORUQgUkVBRF9QQUlSU19FWEFNSU5FRCAgICAgU0VDT05EQVJZX09SX1NVUFBMRU1FTlRBUllfUkRTICBVTk1BUFBFRF9SRUFEUyAgVU5QQUlSRURfUkVBRF9EVVBMSUNBVEVTICAgICAgICBSRUFEX1BBSVJfRFVQTElDQVRFUyAgUkVBRF9QQUlSX09QVElDQUxfRFVQTElDQVRFUyAgICBQRVJDRU5UX0RVUExJQ0FUSU9OICAgICBFU1RJTUFURURfTElCUkFSWV9TSVpFDQoNClIgICAgICAgMjI0OTM5MiA4NjgwMzY1MiAgICAgICAgMTUxNTc2MiA5MDYyMjEyIDYzNTgxOCAgNzAwOTIzNCAwICAgICAgIDAuMDgzMzMxICAgICAgICA1MDgxNTQ1NjgNCg0KYGBgDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmJhbQ0KDQoNCg0KDQojIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCmBgYA0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxNzU1MzA5MzU3MyBNYXkgIDYgMDQ6MDAgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmJhbQ0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgODg0NjI5NiBNYXkgIDYgMTc6MDggU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgMzUzMSBNYXkgIDYgMTQ6NDIgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmR1cE1ldHJpY3MudHh0DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgMTc3MjgyOTM5MjQgTWF5ICA2IDE0OjQyIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmJhbQ0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgODk1OTI2NCBNYXkgIDYgMTc6MDggU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuYmFtLmJhaQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICAgIDE2IE1heSAgNiAwNDozOCBzdW1tYXJ5LVNSUjYyMjQ2MS5meE5tTWRVcVRhZw0KDQoNCmBgYA0KDQoNCg0KIyMgQi4gSGFwbG90eXBlIGNocm5hNCBnZW5lIG9mIHRoZSAzIGluZGl2aWR1YWxzIGluIEdWQ0YgbW9kZQ0KDQpgYGANCkIxLiBIYXBsb3R5cGUgY2hybmE0IG9mIE5BMTI4OTENCg0KYGBgDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgSGFwbG90eXBlQ2FsbGVyIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5tZHVwLmJhbSAtTCBjaHIyMDo2MzM0MzMxMC02MzM3NTQ3MSAtRVJDIEdWQ0YgLU8gU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmIA0KDQoNCg0KYGBgDQpCMi4gSGFwbG90eXBlIGNocm5hNCBvZiBOQTEyODkyDQoNCmBgYA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1MIGNocjIwOjYzMzQzMzEwLTYzMzc1NDcxIC1FUkMgR1ZDRiAtTyBTUlI2MjI0NTlfMS5meE5tTWRVcVRhZy5tZHVwLmNocm5hNC5nLnZjZiANCg0KDQpgYGANCkIzLiBIYXBsb3R5cGUgY2hybmE0IG9mIE5BMTI4NzgNCg0KYGBgDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBOQTEyODc4L1NSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmJhbSAtTCBjaHIyMDo2MzM0MzMxMC02MzM3NTQ3MSAtRVJDIEdWQ0YgLU8gU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmDQoNCg0KDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCmBgYA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICA4NTUxMjEgTWF5ICA4IDAxOjAxIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5tZHVwLmNocm5hNC5nLnZjZg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgMzY3NjI0IE1heSAgOCAwMTowMSBTUlI2MjI0NTguZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDg5NjQ3OCBNYXkgIDggMDE6MDMgU1JSNjIyNDU5XzEuZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDM2NzYyOCBNYXkgIDggMDE6MDMgU1JSNjIyNDU5XzEuZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDM4MzUwMCBNYXkgIDggMDE6MDUgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAzNjc2MjQgTWF5ICA4IDAxOjA1IFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmNocm5hNC5nLnZjZi5pZHgNCg0KYGBgDQoNCg0KIyMgQy4gQ29tYmluZSB0aGUgR2Vub3R5cGVWQ0YgZmlsZXMgYW5kIGdlbm90eXBlIHRoZSBzYW1wbGVzIHRvZ2V0aGVyICh1c2luZyBnYXRrIEdlbm90eXBlR1ZDRnMpDQoNCg0KIyMjIENvbWJpbmUgIEdlbm90eXBlVkNGIGZpbGVzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBub2h1cCBnYXRrIENvbWJpbmVHVkNGcyAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtViBTUlI2MjI0NTguZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YgLVYgU1JSNjIyNDU5XzEuZnhObU1kVXFUYWcubWR1cC5jaHJuYTQuZy52Y2YgLVYgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmIC1PIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLnZjZiAmPiBjb21iaW5lLTU4LTU5LTYxLmZ4VGdzLm1kdXAuY2hybmE0LmcubG9nICYNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDE5MjM3MTMgTWF5ICA4IDAxOjIxIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLnZjZg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAzNjc2MzIgTWF5ICA4IDAxOjIxIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAzNjU0IE1heSAgOCAwMToyMSBjb21iaW5lLTU4LTU5LTYxLmZ4VGdzLm1kdXAuY2hybmE0LmcubG9nDQoNCg0KDQoNCiMjIyBHZW5vdHlwZSB0aGUgc2FtcGxlcyB0b2dldGhlcg0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIG5vaHVwIGdhdGsgR2Vub3R5cGVHVkNGcyAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtViBTUlI2MjI0LTU4LTU5LTYxLWZ4VGdzLW1kdXAuY2hybmE0LmcuY29tYmluZS52Y2YgLU8gU1JSNjIyNC01OC01OS02MS1meFRncy1tZHVwLmNocm5hNC5nLmNvbWJpbmUuam9pbnRjYWxscy52Y2YgJj4gZ2Vub3R5cGVHVkNGcy01OC01OS02MS1jaHJuYTQuZy5qb2ludGNhbGxzLmxvZyAmDQoNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgIDIxMjM5MiBNYXkgIDggMDE6MjggU1JSNjIyNC01OC01OS02MS1meFRncy1tZHVwLmNocm5hNC5nLmNvbWJpbmUuam9pbnRjYWxscy52Y2YNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgMTE4MTA5IE1heSAgOCAwMToyOCBTUlI2MjI0LTU4LTU5LTYxLWZ4VGdzLW1kdXAuY2hybmE0LmcuY29tYmluZS5qb2ludGNhbGxzLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAzMDY1IE1heSAgOCAwMToyOCBnZW5vdHlwZUdWQ0ZzLTU4LTU5LTYxLWNocm5hNC5nLmpvaW50Y2FsbHMubG9nDQoNCg0KIyMjIEdlbmVyYXRlIHZhcmlhbnQgc3RhdGlzdGljcw0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGJjZnRvb2xzIHN0YXRzIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLmpvaW50Y2FsbHMudmNmIHwgbGVzcw0KDQpgYGANCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KIyBUaGUgY29tbWFuZCBsaW5lIHdhczogYmNmdG9vbHMgc3RhdHMgIFNSUjYyMjQtNTgtNTktNjEtZnhUZ3MtbWR1cC5jaHJuYTQuZy5jb21iaW5lLmpvaW50Y2FsbHMudmNmDQojDQojIERlZmluaXRpb24gb2Ygc2V0czoNCiMgSUQgICAgWzJdaWQgICBbM110YWItc2VwYXJhdGVkIGZpbGUgbmFtZXMNCklEICAgICAgMCAgICAgICBTUlI2MjI0LTU4LTU5LTYxLWZ4VGdzLW1kdXAuY2hybmE0LmcuY29tYmluZS5qb2ludGNhbGxzLnZjZg0KIyBTTiwgU3VtbWFyeSBudW1iZXJzOg0KIyAgIG51bWJlciBvZiByZWNvcmRzICAgLi4gbnVtYmVyIG9mIGRhdGEgcm93cyBpbiB0aGUgVkNGDQojICAgbnVtYmVyIG9mIG5vLUFMVHMgICAuLiByZWZlcmVuY2Utb25seSBzaXRlcywgQUxUIGlzIGVpdGhlciAiLiIgb3IgaWRlbnRpY2FsIHRvIFJFRg0KIyAgIG51bWJlciBvZiBTTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIFNOUA0KIyAgIG51bWJlciBvZiBNTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIE1OUCwgc3VjaCBhcyBDQz5UVA0KIyAgIG51bWJlciBvZiBpbmRlbHMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhbiBpbmRlbA0KIyAgIG51bWJlciBvZiBvdGhlcnMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBvdGhlciB0eXBlLCBmb3IgZXhhbXBsZSBhIHN5bWJvbGljIGFsbGVsZSBvcg0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wbGV4IHN1YnN0aXR1dGlvbiwgc3VjaCBhcyBBQ1Q+VENHQQ0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXMgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMNCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlcyAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzLCBhbGwgU05Qcw0KIyANCiMgICBOb3RlIHRoYXQgcm93cyBjb250YWluaW5nIG11bHRpcGxlIHR5cGVzIHdpbGwgYmUgY291bnRlZCBtdWx0aXBsZSB0aW1lcywgaW4gZWFjaA0KIyAgIGNvdW50ZXIuIEZvciBleGFtcGxlLCBhIHJvdyB3aXRoIGEgU05QIGFuZCBhbiBpbmRlbCBpbmNyZW1lbnRzIGJvdGggdGhlIFNOUCBhbmQNCiMgICB0aGUgaW5kZWwgY291bnRlci4NCiMgDQojIFNOICAgIFsyXWlkICAgWzNda2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XXZhbHVlDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXM6ICAgICAgICAgICAgICAgICAgICAgIDMNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAgICAgICAgICAgICAgICAgMTE4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgICAgICAgICAgICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgU05QczogICAgICAgICAgICAgICAgICAgICAgICAgOTkNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogICAgICAgICAgICAgICAgICAgICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgICAgICAgICAgICAgICAgICAxOQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBvdGhlcnM6ICAgICAgICAgICAgICAgICAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczogICAgICAgICAgIDMNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlczogICAgICAgMg0KDQpgYGANCg0KDQoNCiMjIEQuIFJ1biBHZW5vbWljc0RCSW1wb3J0IG9uIGluZGl2aWR1YWwgR2Vub3R5cGVWQ0ZzIHRvZ2V0aGVyDQoNCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIEdlbm9taWNzREJJbXBvcnQgLVYgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmIC1WIFNSUjYyMjQ1OV8xLmZ4Tm1NZFVxVGFnLm1kdXAuY2hybmE0LmcudmNmIC1WIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmNocm5hNC5nLnZjZiAtLWdlbm9taWNzZGItd29ya3NwYWNlLXBhdGggZ2Vub21pY3NEYkltcG9ydF9vdXRwdXQgLUwgY2hyMjA6NjMzNDMzMTAtNjMzNzU0NzENCg0KDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sIGdlbm9taWNzRGJJbXBvcnRfb3V0cHV0Lw0KDQotcnd4LS0tLS0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgMCBNYXkgIDggMDE6NDUgIF9fdGlsZWRiX3dvcmtzcGFjZS50ZGINCg0KLXJ3eC0tLS0tLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAyODIgTWF5ICA4IDAxOjQ1ICBjYWxsc2V0Lmpzb24NCg0KZHJ3eC0tLS0tLSA0IGIwZDI2NDcgYjBkMjY0NyAgIDQwOTYgTWF5ICA4IDAxOjQ1ICdjaHIyMCQ2MzM0MzMxMCQ2MzM3NTQ3MScNCg0KLXJ3eC0tLS0tLSAxIGIwZDI2NDcgYjBkMjY0NyAxODA1NjEgTWF5ICA4IDAxOjQ1ICB2Y2ZoZWFkZXIudmNmDQoNCi1yd3gtLS0tLS0gMSBiMGQyNjQ3IGIwZDI2NDcgMjkxMzEwIE1heSAgOCAwMTo0NSAgdmlkbWFwLmpzb24NCg0KDQoNCg==