Approach

De novo mutations in cholinergic nicotinc receptor alpha 4 (chrna4) gene located on chromosome 20 (chr20: 63,343,310..63,375,471) of a progeny (NA12878) will be determined using the genomic information of parents (NA12891-Father and NA12892-Mother). This process needs a ped file as shown below.

This process involves 4 broader steps.

A. Process the sequencing files and generate base recalibrated BAM files

B. Call haplotypes using GATK HaplotypeCaller and recalibrate variants if applicable

C. Calculate genotype posterior likelihoods for given panel data and check for de novo mutation (in SNPs and INDELs)

D. Annotate variants (SNPs and INDELs)

E. Predict variant effect

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      160928 Dec  1  2016 Homo_sapiens_assembly38.fasta.fai


-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

Download the reference SNP and indel files (from a google or aws s3 bucket)


~/gatk-data-ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.dbsnp138.vcf dbsnp138.vcf

~/gatk-data-ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.dbsnp138.vcf.idx dbsnp138.vcf.idx

~/gatk-data-ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.known_indels.vcf.gz hg38.known_indels.vcf.gz

~/gatk-data-ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.known_indels.vcf.gz.tbi hg38.known_indels.vcf.gz.tbi
 
~/gatk-data-ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz gold_standard.indels.hg38.vcf.gz

~/gatk-data-ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Mills_and_1000G_gold_standard.indels.hg38.vcf.gz.tbi gold_standard.indels.hg38.vcf.gz.tbi

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r-- 1 b0d2647 b0d2647  10950827213 May  6 02:45 dbsnp138.vcf

-rw-rw-r-- 1 b0d2647 b0d2647     12480412 May  6 02:46 dbsnp138.vcf.idx


-rw-rw-r-- 1 b0d2647 b0d2647     20685880 May  6 02:48 gold_standard.indels.hg38.vcf.gz

-rw-rw-r-- 1 b0d2647 b0d2647      1500013 May  6 02:49 gold_standard.indels.hg38.vcf.gz.tbi


-rw-rw-r-- 1 b0d2647 b0d2647     61692306 May  6 02:46 hg38.known_indels.vcf.gz

-rw-rw-r-- 1 b0d2647 b0d2647      1567886 May  6 02:47 hg38.known_indels.vcf.gz.tbi

A. Produce base recalibrated BAM files for the 3 individuals (both parents and a progeny)

NA12891-Father

NA12892-Mother

NA12878-Daughter (progeny)

A1. Generate a base recalibrated 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-data-ref$ 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

Recalibrate the bases in the BAM file using known reference SNPs and indels

Generate a recalibration table using known SNPs and indels

~/gatk-data-ref$ gatk BaseRecalibrator -R Homo_sapiens_assembly38.fasta -I SRR622458.fxNmMdUqTag.mdup.bam –known-sites dbsnp138.vcf –known-sites gold_standard.indels.hg38.vcf.gz –known-sites hg38.known_indels.vcf.gz -O SRR622458.fxNmM dUqTag.mdup.chrall.recal.table

05:17:58.920 INFO BaseRecalibrator - Writing recalibration report…

05:18:00.356 INFO BaseRecalibrator - …done!

05:18:00.356 INFO BaseRecalibrator - Shutting down engine

[May 7, 2019 5:18:00 AM UTC] org.broadinstitute.hellbender.tools.walkers.bqsr.BaseRecalibrator done. Elapsed time: 888.11 minutes.

Runtime.totalMemory()=675807232

Tool returned: 2,100,435,052

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

Apply the recalibration data to the BAM file

~/gatk-data-ref$ gatk ApplyBQSR -R Homo_sapiens_assembly38.fasta -I SRR622458.fxNmMdUqTag.mdup.bam –bqsr-recal-file SRR622458.fxNmMdUqTag.mdup.chrall.recal.table -O SRR622458.fxNmMdUqTag.mdup.rcal.bam

………………………..

01:41:21.287 INFO ProgressMeter - Traversal complete. Processed 2448099046 total reads in 971.3 minutes.

01:41:21.338 INFO ApplyBQSR - Shutting down engine

[May 8, 2019 1:41:21 AM UTC] org.broadinstitute.hellbender.tools.walkers.bqsr.ApplyBQSR done. Elapsed time: 971.33 minutes.

Runtime.totalMemory()=177209344

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

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r-- 1 b0d2647 b0d2647       862101 May  7 05:18 SRR622458.fxNmMdUqTag.mdup.chrall.recal.table



-rw-rw-r-- 1 b0d2647 b0d2647      9843088 May  8 01:41 SRR622458.fxNmMdUqTag.mdup.rcal.bai
-rw-rw-r-- 1 b0d2647 b0d2647 249336008342 May  8 01:41 SRR622458.fxNmMdUqTag.mdup.rcal.bam

A2. Generate a base recalibrated 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

Recalibrate the bases in the BAM file using known reference SNPs and indels

Generate a recalibration table using known SNPs and indels

~/gatk-data-ref$ gatk BaseRecalibrator -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam –known-sites dbsnp138.vcf –known-sites gold_standard.indels.hg38.vcf.gz –known-sites hg38.known_indels.vcf.gz -O SRR622459_1.sorted.NmMdTqTgs.mdup.chrall.recal.table

…………………

05:59:20.762 INFO BaseRecalibrator - Writing recalibration report…

05:59:21.815 INFO BaseRecalibrator - …done!

05:59:21.815 INFO BaseRecalibrator - Shutting down engine

[May 7, 2019 5:59:21 AM UTC] org.broadinstitute.hellbender.tools.walkers.bqsr.BaseRecalibrator done. Elapsed time: 889.98 minutes.

Runtime.totalMemory()=918028288

Tool returned: 2100022215

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

…………………..

Apply the recalibration data to the BAM file

~/gatk-data-ref$ gatk ApplyBQSR -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam –bqsr-recal-file SRR622459_1.sorted.NmMdTqTgs.mdup.chrall.recal.table -O SRR622459_1.sorted.NmMdTqTgs.mdup.recal.bam

01:27:37.393 INFO ProgressMeter - unmapped 952.2 2467258000 2591020.3

01:27:41.426 INFO ApplyBQSR - No reads filtered by: WellformedReadFilter

01:27:41.427 INFO ProgressMeter - unmapped 952.3 2467570854 2591166.0

01:27:41.428 INFO ProgressMeter - Traversal complete. Processed 2467570854 total reads in 952.3 minutes.

01:27:41.491 INFO ApplyBQSR - Shutting down engine

[May 8, 2019 1:27:41 AM UTC] org.broadinstitute.hellbender.tools.walkers.bqsr.ApplyBQSR done. Elapsed time: 952.33 minutes.

Runtime.totalMemory()=1529348096

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

…………………

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r-- 1 b0d2647 b0d2647       862101 May  7 05:59 SRR622459_1.sorted.NmMdTqTgs.mdup.chrall.recal.table

-rw-rw-r-- 1 b0d2647 b0d2647      9857240 May  8 01:27 SRR622459_1.sorted.NmMdTqTgs.mdup.recal.bai
-rw-rw-r-- 1 b0d2647 b0d2647 247018319690 May  8 01:27 SRR622459_1.sorted.NmMdTqTgs.mdup.recal.bam

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

Recalibrate the bases in the BAM file using known reference SNPs and indels

Generate a recalibration table using known SNPs and indels

~/gatk-data-ref$ gatk BaseRecalibrator -R Homo_sapiens_assembly38.fasta -I SRR622461.fxNmMdUqTag.mdup.bam –known-sites dbsnp138.vcf –known-sites gold_standard.indels.hg38.vcf.gz –known-sites hg38.known_indels.vcf.gz -O SRR622461.fxNmMdUqTag.mdup.chrall.recal.table

16:58:10.698 INFO BaseRecalibrator - Writing recalibration report…

16:58:12.531 INFO BaseRecalibrator - …done!

16:58:12.531 INFO BaseRecalibrator - Shutting down engine

[May 6, 2019 4:58:12 PM UTC] org.broadinstitute.hellbender.tools.walkers.bqsr.BaseRecalibrator done. Elapsed time: 128.13 minutes.

Runtime.totalMemory()=2802843648

Tool returned: 153117281

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

………………….

Apply the recalibration data to the BAM file

~/gatk-data-ref$ gatk ApplyBQSR -R Homo_sapiens_assembly38.fasta -I SRR622461.fxNmMdUqTag.mdup.bam –bqsr-recal-file SRR622461.fxNmMdUqTag.mdup.chrall.recal.table -O SRR622461.fxNmMdUqTag.mdup.recal.bam

00:05:53.874 INFO ProgressMeter - unmapped 75.6 186417000 2466147.6

00:05:54.072 INFO ApplyBQSR - No reads filtered by: WellformedReadFilter

00:05:54.072 INFO ProgressMeter - unmapped 75.6 186434670 2466273.1

00:05:54.073 INFO ProgressMeter - Traversal complete. Processed 186434670 total reads in 75.6 minutes.

00:05:54.124 INFO ApplyBQSR - Shutting down engine

[May 7, 2019 12:05:54 AM UTC] org.broadinstitute.hellbender.tools.walkers.bqsr.ApplyBQSR done. Elapsed time: 75.62 minutes.

Runtime.totalMemory()=394788864

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

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      854355 May  6 16:58 SRR622461.fxNmMdUqTag.mdup.chrall.recal.table

-rw-rw-r-- 1 b0d2647 b0d2647     9188048 May  7 00:05 SRR622461.fxNmMdUqTag.mdup.recal.bai
-rw-rw-r-- 1 b0d2647 b0d2647 20573738839 May  7 00:05 SRR622461.fxNmMdUqTag.mdup.recal.bam

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

B. Joint genotyping samples for detecting variants in chrna4 gene (chr20:63343310-63375471) using the three base recalibrated BAM files

Run gatk haplotypecaller

~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622458.fxNmMdUqTag.mdup.rcal.bam -I SRR622459_1.sorted.NmMdTqTgs.mdup.recal.bam -I SRR622461.fxNmMdUqTag.mdup.recal.bam -L chr20:63343310-63375471 -O SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.vcf

Additional directory contents

~/gatk-data-ref$ ls -l


-rw-rw-r-- 1 b0d2647 b0d2647      124 May  8 03:25 NA128-78-91-92.ped

-rw-rw-r-- 1 b0d2647 b0d2647   205909 May  8 02:26 SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.vcf
-rw-rw-r-- 1 b0d2647 b0d2647   118100 May  8 02:26 SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.vcf.idx

Generate variant statistics

$ bcftools stats SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.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.recal.chrna4.jcalls.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.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:                      117
SN      0       number of no-ALTs:                      0
SN      0       number of SNPs:                         97
SN      0       number of MNPs:                         0
SN      0       number of indels:                       20
SN      0       number of others:                       0
SN      0       number of multiallelic sites:           3
SN      0       number of multiallelic SNP sites:       2

C. Calculate genotype posterior likelihoods for given panel data

This run needs a ped file whose structure is shown below:

~/gatk-data-ref$ cat NA128-78-91-92.ped

FamID   IndID   PatID   MatID   Sex     Phenotype

CEUTrio NA12891 0       0       1       0

CEUTrio NA12892 0       0       2       0

CEUTrio NA12878 NA12891 NA12892 2       0

~/gatk-data-ref$ gatk CalculateGenotypePosteriors -R Homo_sapiens_assembly38.fasta -V SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.vcf -ped NA128-78-91-92.ped -O SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.genoPosteriors.vcf

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r-- 1 b0d2647 b0d2647   214598 May  8 03:29 SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.genoPosteriors.vcf

-rw-rw-r-- 1 b0d2647 b0d2647   118115 May  8 03:29 SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.genoPosteriors.vcf.idx

Generate variant statistics

~/gatk-data-ref$ bcftools stats SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.genoPosteriors.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.recal.chrna4.jcalls.genoPosteriors.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.genoPosteriors.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:                      117

SN      0       number of no-ALTs:                      0

SN      0       number of SNPs:                         97

SN      0       number of MNPs:                         0

SN      0       number of indels:                       20

SN      0       number of others:                       0

SN      0       number of multiallelic sites:           3

SN      0       number of multiallelic SNP sites:       2

C1. Check the presence of possible de nove SNP

Select SNPs

~/gatk-data-ref$ gatk SelectVariants -R Homo_sapiens_assembly38.fasta -V SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.genoPosteriors.vcf –select-type-to-include SNP -O SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.gP.selctSNP.vcf

18:05:28.024 INFO ProgressMeter - Traversal complete. Processed 97 total variants in 0.0 minutes.

Hard filter SNPs (instead of Variant Recalibration)

~/gatk-data-ref $ gatk VariantFiltration -R Homo_sapiens_assembly38.fasta -V SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.gP.selctSNP.vcf -filter “QD < 2.0 || FS > 60.0 || MQ < 40.0 ||MQRankSum < -12.5 || ReadPosRankSum < -8.0” –filter-name ‘Broad’ -O SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.gP.selctSNP.BroadFiltered.vcf

18:16:54.657 INFO ProgressMeter - Traversal complete. Processed 97 total variants in 0.0 minutes.

Annotate possible De Novo SNPs

~/gatk-data-ref$ gatk VariantAnnotator -R Homo_sapiens_assembly38.fasta -V SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.gP.selctSNP.BroadFiltered.vcf -A PossibleDeNovo -ped NA128-78-91-92.ped -O SRR6224-58-59-61.chrna4.PossibleDeNovoSNP.vcf

…………

18:40:22.548 INFO PedReader - Phenotype is other? true

18:40:22.696 INFO ProgressMeter - unmapped 0.0 97 24978.5

~/gatk-data-ref $ cat SRR6224-58-59-61.chrna4.PossibleDeNovoSNP.vcf | grep “DeNovo”

##INFO=<ID=hiConfDeNovo,Number=1,Type=String,Description="High confidence possible de novo mutation (GQ >= 20 for all trio members)=[comma-delimited list of child samples]">

##INFO=<ID=loConfDeNovo,Number=1,Type=String,Description="Low confidence possible de novo mutation (GQ >= 10 for child, GQ > 0 for parents)=[comma-delimited list of child samples]">

C2. Check for the presence of possible de nove INDELs

Select indels

~/gatk-data-ref $ gatk SelectVariants -R Homo_sapiens_assembly38.fasta -V SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.genoPosteriors.vcf –select-type-to-include INDEL -O SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.gP.selctINDEL.vcf

18:07:49.372 INFO ProgressMeter - Traversal complete. Processed 20 total variants in 0.0 minutes.

Hard filter indels (instead of Variant Recalibration)

~/gatk-data-ref $ gatk VariantFiltration -R Homo_sapiens_assembly38.fasta -V SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.gP.selctINDEL.vcf -filter “QD < 2.0 || FS > 200.0 || ReadPosRankSum < -20.0” –filter-name ‘Broad’ -O SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.gP.selctINDEL.BroadFiltered.vcf

18:28:37.031 INFO ProgressMeter - Traversal complete. Processed 20 total variants in 0.0 minutes.

Annotate indels for presence of possible De Novos

gatk VariantAnnotator -R Homo_sapiens_assembly38.fasta -V SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.gP.selctINDEL.vcf -A PossibleDeNovo -ped NA128-78-91-92.ped -O SRR6224-58-59-61.chrna4.PossibleDeNovoINDEL.vcf

~/gatk-data-ref $ cat SRR6224-58-59-61.chrna4.PossibleDeNovoINDEL.vcf | grep “DeNovo”

##INFO=<ID=hiConfDeNovo,Number=1,Type=String,Description="High confidence possible de novo mutation (GQ >= 20 for all trio members)=[comma-delimited list of child samples]">

##INFO=<ID=loConfDeNovo,Number=1,Type=String,Description="Low confidence possible de novo mutation (GQ >= 10 for child, GQ > 0 for parents)=[comma-delimited list of child samples]">

D. Variant annotation

D1. INDEL annotation and tabulation

Annotate variants using dbsnp variants

~/gatk-data-ref $ bcftools annotate -c ID -Oz -a dbsnp138.vcf.gz SRR6224-58-59-61.chrna4.INDEL.vcf.gz -o SRR6224-58-59-61.chrna4.INDEL.annot.vcf.gz

Make a table of variants (with selected parameters)

~/gatk-data-ref $ gatk VariantsToTable -V SRR6224-58-59-61.chrna4.INDEL.annot.vcf.gz -F CHROM -F POS -F ID -F REF -F ALT -F TYPE -O SRR6224-58-59-61.chrna4.INDEL.annotWoGF.table

00:20:44.479 WARN VariantsToTable - Allele-specific fields will only be split if splitting multi-allelic variants is specified (--split-multi- allelic or -SMA

………….

00:20:44.515 INFO ProgressMeter - Traversal complete. Processed 20 total variants in 0.0 minutes. …………..

~/gatk-data-ref $ cat SRR6224-58-59-61.chrna4.INDEL.annotWoGF.table

CHROM   POS             ID              REF                             ALT                             TYPE
chr20   63344477        rs11480478      A                               AT                              INDEL
chr20   63344494        rs11480479      C                               CA                              INDEL
chr20   63353961        .               C                               CGGTCCTGGGGGGTCTGT              INDEL
chr20   63356992        rs71197409      C                               CGACCACATCGCCATG                INDEL
chr20   63357155        rs147641999     GTCTCCACAGGACCACATTCCCACAGGACCACAACCCACAGGACCACA  G             INDEL
chr20   63357288        rs377681750     ACAGGACCTCATCCCCT               A                               INDEL
chr20   63357664        rs3838009       CG                              C                               INDEL
chr20   63358946        rs11483065      T                               TC                              INDEL
chr20   63359022        rs59320601      CT                              C                               INDEL
chr20   63359045        rs11472833      G                               GGA                             INDEL
chr20   63359051        rs11478664      AT                              A                               INDEL
chr20   63359866        rs67528285      GCT                             G                               INDEL
chr20   63359884        rs11472697      T       TGCGC                                                   INDEL
chr20   63359903        .               G       GTGTGTGTGTGCCGGGCGTGCGC,GTGTGTGTGTGTGTGCCGGGCGTGCGC     INDEL
chr20   63359905        .               G       GTGTGTGTGTGTGCCGGGCGTGCGC                               INDEL
chr20   63361431        .               G       GGGAGGGGGAGGAGGGGGAGCAGTGGAGGGGGGAGAAGAGGAGGGGGGAGGA    INDEL
chr20   63362320        rs5842418       G       GC                                                      INDEL
chr20   63367151        rs61330515      CT      C                                                       INDEL
chr20   63367164        rs35621466      TG      T                                                       INDEL
chr20   63369500        rs141840462     CAG     C                                                       INDEL

D2. SNP annotation and tabulation

Annotate SNPs using dbSNP database

~/gatk-data-ref $ bcftools annotate -c ID -Ov -a dbsnp138.vcf SRR6224-58-59-61.fxTgs.mdup.recal.chrna4.jcalls.gP.selctSNP.BroadFiltered.vcf > SRR6224-58-59-61.chrna4.annot.vcf

Make a table of the SNP data (with selected paramaters)

~/gatk-data-ref $ gatk VariantsToTable -V SRR6224-58-59-61.chrna4.SNP.annot.vcf.gz -F CHROM -F POS -F ID -F REF -F ALT -F TYPE -GF AD -O SRR6224-58-59-61.chrna4.SNP.annot.table

……………

23:49:09.135 INFO ProgressMeter - Traversal complete. Processed 97 total variants in 0.0 minutes.

…………..

~/gatk-data-ref $ head -n 97 SRR6224-58-59-61.chrna4.SNP.annot.table

CHROM   POS             ID              REF     ALT     TYPE    NA12878.AD      NA12891.AD      NA12892.AD
chr20   63346204        rs2236196       G       A       SNP     0,6             0,47            22,33
chr20   63347172        rs6090380       T       C       SNP     0,2             0,19            16,10
chr20   63347748        rs3787137       G       A       SNP     1,2             22,0            13,21
chr20   63347872        rs3787138       G       A       SNP     0,4             1,24            22,26
chr20   63348208        rs6062439       G       C       SNP     0,2             0,16            15,12
chr20   63348271        rs45486392      T       C       SNP     5,0             24,16           37,0
chr20   63348441        rs6062899       G       A       SNP     0,6             0,32            14,17
chr20   63348773        rs6062900       C       T       SNP     0,4             0,28            11,16
chr20   63348909        rs6062901       G       A       SNP     NA              0,29            6,9
chr20   63349639        rs3827020       T       C       SNP     1,0             0,18            30,0
chr20   63349752        rs1044397       C       T       SNP     NA              19,0            10,16
chr20   63349782        rs1044396       G       A       SNP     NA              19,0            12,18
chr20   63350184        rs2229960       A       G       SNP     0,1             0,33            14,12
chr20   63350202        rs2229959       C       A       SNP     0,2             0,37            13,13
chr20   63350733        rs1044394       A       G       SNP     0,2             0,35            13,18
chr20   63350772        rs1044393       A       G       SNP     0,3             0,33            18,14
chr20   63351340        rs6011772       C       T       SNP     0,5             0,40            21,20
chr20   63351529        rs4809541       C       T       SNP     0,3             0,37            14,19
chr20   63351871        rs6090382       T       C       SNP     0,3             0,21            9,14
chr20   63351959        rs45577639      G       A       SNP     1,2             0,20            23,0
chr20   63352162        rs6011774       C       T       SNP     0,3             29,0            13,14
chr20   63352404        rs6011776       C       T       SNP     0,5             0,24            13,7
chr20   63352965        rs6011779       C       T       SNP     0,1             0,27            13,19
chr20   63353656        rs114300953     G       A       SNP     1,0             1,4             9,0
chr20   63353875        rs74213202      A       T       SNP     0,0             3,3             5,4
chr20   63353888        rs74201270      C       G       SNP     1,0             3,2             5,3
chr20   63353902        rs79514729      G       A       SNP     NA              1,1             5,1
chr20   63353971        rs74177996      A       G       SNP     NA              0,9             5,7
chr20   63354009        rs75898014      G       T       SNP     NA              7,4             13,0
chr20   63356709        rs2273504       G       A       SNP     1,0             0,24            11,0
chr20   63357030        rs13036436      G       A       SNP     0,1             0,54            16,22
chr20   63357043        rs13042047      C       T       SNP     0,1             0,52            20,24
chr20   63357047        rs13040031      A       T       SNP     0,1             0,54            20,27
chr20   63357061        rs12479680      A       G       SNP     0,1             0,52            22,23
chr20   63358149        rs6010918       A       G       SNP     0,3             0,30            21,16
chr20   63359026        rs60207571      T       C       SNP     0,2             0,37            0,31
chr20   63359068        rs6011786       C       A       SNP     0,2             0,37            0,35
chr20   63359069        rs6011787       T       C       SNP     0,2             0,37            0,36
chr20   63359522        rs6090384       T       C       SNP     0,1             0,27            13,22
chr20   63359789        rs3818204       G       A       SNP     NA              0,21            25,0
chr20   63359895        rs6011789       T       C       SNP     0,4             0,14            10,5
chr20   63359949        rs45457196      A       C       SNP     0,3             0,22            1,26
chr20   63360368        rs6090385       C       A       SNP     1,3             24,0            0,40
chr20   63360653        rs11697662      C       T       SNP     0,3             0,16            0,31
chr20   63360933        rs11698563      A       C       SNP     1,0             8,0             0,8
chr20   63361195        rs6090387       G       C       SNP     NA              1,2             0,3
chr20   63361453        rs58134915      T       A       SNP     0,1             0,13            0,12
chr20   63361486        rs13043186      A       G       SNP     2,1             22,0            0,19
chr20   63361542        rs12624510      G       A       SNP     0,1             15,7            18,0
chr20   63361854        rs6122429       C       T       SNP     1,2             14,9            40,0
chr20   63361875        rs12625596      A       C,G     SNP     0,0,1           0,27,0          0,0,42
chr20   63362033        rs13044526      G       A       SNP     0,1             12,15           0,21
chr20   63362289        rs45474898      C       T       SNP     2,0             15,16           26,0
chr20   63362349        rs750263        T       C       SNP     0,2             0,30            0,22
chr20   63362361        rs13040954      C       G       SNP     2,0             8,18            22,0
chr20   63362406        rs911044        C       T       SNP     0,1             0,35            0,36
chr20   63362415        rs750264        C       A,G     SNP     0,0,2           0,13,18         0,0,31
chr20   63362438        rs7261696       A       G       SNP     2,0             15,18           39,0
chr20   63362590        rs2093107       A       G       SNP     2,0             12,14           0,20
chr20   63362601        rs7267689       G       C       SNP     2,0             14,15           21,0
chr20   63362912        rs755203        G       A       SNP     2,2             45,0            0,51
chr20   63363313        rs3810471       C       T       SNP     3,5             37,0            0,47
chr20   63363870        rs11086163      G       C       SNP     6,0             17,23           47,0
chr20   63363970        rs6011794       C       T       SNP     0,1             0,33            0,19
chr20   63365354        rs910895        A       G       SNP     0,1             13,14           0,27
chr20   63365549        rs7267923       A       G       SNP     2,6             40,0            0,35
chr20   63365935        rs6011796       C       T       SNP     0,1             0,26            0,37
chr20   63366209        rs4990923       A       G       SNP     NA              1,5             2,3
chr20   63366229        rs2314696       A       G       SNP     0,1             1,15            0,18
chr20   63366549        rs62206949      T       G       SNP     5,0             22,23           36,1
chr20   63366616        rs11696339      G       A       SNP     2,0             17,21           0,38
chr20   63366732        rs62206950      A       G       SNP     0,3             0,21            0,32
chr20   63366800        rs62206951      C       T       SNP     1,0             16,13           22,0
chr20   63366822        rs72629023      G       T       SNP     1,0             13,17           26,0
chr20   63367091        rs6062905       T       C       SNP     0,2             0,17            0,25
chr20   63367956        rs6089899       G       A       SNP     NA              23,0            0,21
chr20   63368317        rs4809295       T       C       SNP     NA              0,30            0,32
chr20   63368417        rs6122430       G       A       SNP     2,3             14,17           34,0
chr20   63368803        rs911045        A       G       SNP     0,5             0,47            0,46
chr20   63368850        rs735501        T       C       SNP     4,0             25,30           53,0
chr20   63369260        rs911046        T       C       SNP     0,6             0,61            0,48
chr20   63369496        rs11086164      C       T       SNP     1,0             32,36           53,0
chr20   63370049        .               G       A       SNP     3,0             26,0            12,18
chr20   63370155        rs6010919       C       A       SNP     1,0             11,23           28,0
chr20   63370156        rs6010920       G       A       SNP     1,0             11,23           28,0
chr20   63370194        rs1107953       C       T       SNP     NA              28,19           0,28
chr20   63370757        rs4809549       G       C       SNP     NA              15,29           0,30
chr20   63372095        rs60367095      A       T       SNP     NA              18,23           31,0
chr20   63372140        rs57619853      T       C       SNP     1,0             17,21           28,0
chr20   63373587        rs34555947      G       A       SNP     1,0             21,0            11,15
chr20   63373634        rs34638379      C       A       SNP     2,0             27,0            17,20
chr20   63373693        rs34668034      C       T       SNP     2,0             26,0            22,20
chr20   63374106        rs35318934      G       C       SNP     NA              36,0            13,16
chr20   63374286        rs6089900       C       G       SNP     5,0             34,0            19,16
chr20   63374536        rs7266872       G       A       SNP     3,0             16,17           51,0

E. Predict the effect of variation using ENSEMBL Variant Effect Predictor (VEP)

https://useast.ensembl.org/info/docs/tools/vep/index.html

Prepare the table for VEP loading

~/gatk-data-ref $ awk ‘{print$1,$2,“.”,$4,$5}’ SRR6224-58-59-61.chrna4.SNP.annot.table > SRR6224-58-59-61.chrna4.SNP.annot_3.table

~/gatk-data-ref $ head SRR6224-58-59-61.chrna4.SNP.annot_3.table

CHROM POS       . REF   ALT

chr20 63346204 . G      A
chr20 63347172 . T      C
chr20 63347748 . G      A
chr20 63347872 . G      A
chr20 63348208 . G      C
chr20 63348271 . T      C
chr20 63348441 . G      A
chr20 63348773 . C      T
chr20 63348909 . G      A

Copy and paste the above variant data to VEP or load a properly structured VCF file into VEP

VEP output snippet

vep_output

vep_output

Download the data from the VEP browser as a txt or other format and analyze as needed

chrna4.snp <-read.table("91-92-78-chrna-snp.txt")
head(chrna4.snp)
chrna4.snp <-read.table("91-92-78-chrna-snp.txt")
str(chrna4.snp)
'data.frame':   1094 obs. of  38 variables:
 $ V1 : Factor w/ 1 level ".": 1 1 1 1 1 1 1 1 1 1 ...
 $ V2 : Factor w/ 95 levels "20:63346204-63346204",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ V3 : Factor w/ 4 levels "A","C","G","T": 1 1 1 1 1 1 1 1 1 1 ...
 $ V4 : Factor w/ 13 levels "3_prime_UTR_variant",..: 1 9 5 5 1 5 5 5 9 5 ...
 $ V5 : Factor w/ 2 levels "LOW","MODIFIER": 2 2 2 2 2 2 2 2 2 2 ...
 $ V6 : Factor w/ 3 levels "-","AL121827.1",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ V7 : Factor w/ 3 levels "-","ENSG00000101204",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ V8 : Factor w/ 2 levels "RegulatoryFeature",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ V9 : Factor w/ 37 levels "ENSR00000657632",..: 17 19 20 23 24 26 29 30 31 35 ...
 $ V10: Factor w/ 10 levels "antisense","CTCF_binding_site",..: 9 6 6 4 9 4 6 10 10 6 ...
 $ V11: Factor w/ 14 levels "-","1/1","1/6",..: 12 10 1 1 14 1 1 1 2 1 ...
 $ V12: Factor w/ 18 levels "-","1/1","1/2",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ V13: Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
 $ V14: Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
 $ V15: Factor w/ 72 levels "-","1009","110",..: 42 46 1 1 45 1 1 1 60 1 ...
 $ V16: Factor w/ 13 levels "-","1014","1209",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ V17: Factor w/ 13 levels "-","142","155",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ V18: Factor w/ 6 levels "-","A","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ V19: Factor w/ 6 levels "-","agC/agT",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ V20: Factor w/ 95 levels "rs1044393","rs1044394",..: 24 24 24 24 24 24 24 24 24 24 ...
 $ V21: Factor w/ 521 levels "-","1000","1002",..: 1 1 354 354 1 354 422 309 1 425 ...
 $ V22: Factor w/ 3 levels "-","-1","1": 2 2 2 2 2 2 2 2 2 2 ...
 $ V23: Factor w/ 2 levels "-","cds_start_NF": 1 1 1 2 1 1 1 1 1 1 ...
 $ V24: Factor w/ 3 levels "-","Clone_based_ensembl_gene",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ V25: Factor w/ 2 levels "-","HGNC:1958": 2 2 2 2 2 2 2 2 2 2 ...
 $ V26: Factor w/ 6 levels "-","1","2","3",..: 2 2 2 6 6 2 5 1 1 6 ...
 $ V27: Factor w/ 2 levels "-","P1": 2 1 1 1 1 1 1 1 1 1 ...
 $ V28: Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
 $ V29: Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
 $ V30: Factor w/ 69 levels "-","0.0010","0.0110",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ V31: Factor w/ 4 levels "-","benign","benign,protective",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ V32: Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
 $ V33: Factor w/ 3 levels "-","0,1","1": 2 2 2 2 2 2 2 2 2 2 ...
 $ V34: Factor w/ 26 levels "-","15154117,26102342",..: 22 22 22 22 22 22 22 22 22 22 ...
 $ V35: Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
 $ V36: Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
 $ V37: Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
 $ V38: Factor w/ 1 level "-": 1 1 1 1 1 1 1 1 1 1 ...
LS0tDQp0aXRsZTogIkRlIG5vdm8gdmFyaWFudCBkaXNjb3ZlcnkgaW4gY2hvbGluZXJnaWMgbmljb3RpbmljIHJlY2VwdG9yIGFscGhhIDQgKGNocm5hNCkgZ2VuZSBvZiBhbiBpbmRpdmlkdWFsIg0KYXV0aG9yOiAiQmhhZ2lyYXRoaSBEYXNoIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMgQXBwcm9hY2gNCg0KRGUgbm92byBtdXRhdGlvbnMgaW4gY2hvbGluZXJnaWMgbmljb3RpbmMgcmVjZXB0b3IgYWxwaGEgNCAoY2hybmE0KSBnZW5lIGxvY2F0ZWQgb24gY2hyb21vc29tZSAyMCAoY2hyMjA6IDYzLDM0MywzMTAuLjYzLDM3NSw0NzEpIG9mIGEgcHJvZ2VueSAoTkExMjg3OCkgd2lsbCBiZSBkZXRlcm1pbmVkIHVzaW5nIHRoZSBnZW5vbWljIGluZm9ybWF0aW9uIG9mIHBhcmVudHMgKE5BMTI4OTEtRmF0aGVyIGFuZCBOQTEyODkyLU1vdGhlcikuIFRoaXMgcHJvY2VzcyBuZWVkcyBhIHBlZCBmaWxlIGFzIHNob3duIGJlbG93Lg0KDQoNCg0KVGhpcyBwcm9jZXNzIGludm9sdmVzIDQgYnJvYWRlciBzdGVwcy4NCg0KQS4gUHJvY2VzcyB0aGUgc2VxdWVuY2luZyBmaWxlcyBhbmQgZ2VuZXJhdGUgYmFzZSByZWNhbGlicmF0ZWQgQkFNIGZpbGVzDQoNCkIuIENhbGwgaGFwbG90eXBlcyB1c2luZyBHQVRLIEhhcGxvdHlwZUNhbGxlciBhbmQgcmVjYWxpYnJhdGUgdmFyaWFudHMgaWYgYXBwbGljYWJsZQ0KDQpDLiBDYWxjdWxhdGUgZ2Vub3R5cGUgcG9zdGVyaW9yIGxpa2VsaWhvb2RzIGZvciBnaXZlbiBwYW5lbCBkYXRhIGFuZCBjaGVjayBmb3IgZGUgbm92byBtdXRhdGlvbiAoaW4gU05QcyBhbmQgSU5ERUxzKQ0KDQpELiBBbm5vdGF0ZSB2YXJpYW50cyAoU05QcyBhbmQgSU5ERUxzKQ0KDQpFLiBQcmVkaWN0IHZhcmlhbnQgZWZmZWN0DQoNCg0KDQoNCg0KIyMgTWFjaGluZQ0KDQpHb29nbGUgQ2xvdWQgUGxhdGZvcm0gKEdDUCksIDQgdkNQVXMsIDE1IEdCIFJBTQ0KDQpHb29nbGUgQ2xvdWQgUGxhdGZvcm0gKEdDUCksIDggdkNQVXMsIDMwIEdCIFJBTQ0KDQpHb29nbGUgQ2xvdWQgUGxhdGZvcm0gKEdDUCksIDI0IHZDUFVzLCAzMiBHQiBSQU0NCg0KQVdTOiBjNS4xOHhsYXJnZSAoNzIgdkNQVXMsIDE0NCBHQiBSQU0pDQoNCkFXUzogbTUuMjR4bGFyZ2UgKDk2IHZDUFVzLCAzODQgR2lCIFJBTSkNCg0KDQoNCiMjIFJlZmVyZW5jZQ0KDQotVGhlIGdlbm9tZSBvciBhIGNocm9tb3NvbWFsIHJlZ2lvbiBvciBhIGdlbmUgb2YgaW50ZXJlc3Qgb2YgdGhyZWUgaW5kaXZpZHVhbHMgKE5BMTI4OTEsIE5BMTI4OTIgYW5kIE5BMTI4NzgpIHdpbGwgYmUgYW5hbHl6ZWQuDQoNCi1UaGUgZ2Vub21lIHNlcXVlbmNpbmcgZGF0YSB3aWxsIGJlIG9idGFpbmVkIGZyb20gdGhlIDEwMDAgZ2Vub21lIHByb2plY3QgKGh0dHA6Ly93d3cuaW50ZXJuYXRpb25hbGdlbm9tZS5vcmcvMTAwMC1nZW5vbWVzLWJyb3dzZXJzLykNCg0KDQoNCiMjIEFuYWx5c2lzIGRhdGFzZXRzDQoNCg0KIyMjIERvd25sb2FkIGdlbm9tZSBzZXF1ZW5jaW5nIGRhdGEgZm9yIGluZGl2aWR1YWwgTkExMjg5MSBmcm9tIHRoZSAxMDAwIGdlbm9tZSBwcm9qZWN0IHNpdGUNCg0KDQoNCiMjIyMgICAgfi9nYXRrLWRhdGEtcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9TUlI2MjIvU1JSNjIyNDU4L1NSUjYyMjQ1OF8xLmZhc3RxLmd6DQoNCiMjIyMgICAgfi9nYXRrLWRhdGEtcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9TUlI2MjIvU1JSNjIyNDU4L1NSUjYyMjQ1OF8yLmZhc3RxLmd6DQoNCg0KDQoNCiMjIyBEb3dubG9hZCBnZW5vbWUgc2VxdWVuY2luZyBkYXRhIGZvciBpbmRpdmlkdWFsIE5BMTI4OTIgZnJvbSB0aGUgMTAwMCBnZW5vbWUgcHJvamVjdCBzaXRlDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHdnZXQgLWJxYyBmdHA6Ly9mdHAuc3JhLmViaS5hYy51ay92b2wxL2Zhc3RxL1NSUjYyMi9TUlI2MjI0NTkvU1JSNjIyNDU5XzEuZmFzdHEuZ3oNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHdnZXQgLWJxYyBmdHA6Ly9mdHAuc3JhLmViaS5hYy51ay92b2wxL2Zhc3RxL1NSUjYyMi9TUlI2MjI0NTkvU1JSNjIyNDU5XzIuZmFzdHEuZ3oNCg0KDQoNCg0KIyMjIERvd25sb2FkIGdlbm9tZSBzZXF1ZW5jaW5nIGRhdGEgZm9yIGluZGl2aWR1YWwgTkExMjg3OCBmcm9tIHRoZSAxMDAwIGdlbm9tZSBwcm9qZWN0IHNpdGUNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgd2dldCAtYnFjIGZ0cDovL2Z0cC5zcmEuZWJpLmFjLnVrL3ZvbDEvZmFzdHEvU1JSNjIyL1NSUjYyMjQ2MS9TUlI2MjI0NjFfMS5mYXN0cS5neg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9TUlI2MjIvU1JSNjIyNDYxL1NSUjYyMjQ2MV8yLmZhc3RxLmd6DQoNCg0KDQoNCg0KDQojIyBEaXJlY3RvcnkgY29udGVudA0KDQojIyMjICAgICB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCmBgYA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSA2Njc3MTM2MDI4NSBBcHIgMzAgMTU6MzggU1JSNjIyNDU4XzEuZmFzdHEuZ3oNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDY4MzAwMjA1NjQ3IEFwciAzMCAxNTo0NSBTUlI2MjI0NThfMi5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSA2ODAyOTMzNTU0NiBBcHIgMzAgMTU6NTAgU1JSNjIyNDU5XzEuZmFzdHEuZ3oNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDY5MjE5NDQzNzg5IEFwciAzMCAxNTo1NCBTUlI2MjI0NTlfMi5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgNDU5ODI0OTIxOSBBcHIgMzAgMTU6NDUgU1JSNjIyNDYxXzEuZmFzdHEuZ3oNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICA0NzkyMzgzNjMxIEFwciAzMCAxNTo0NyBTUlI2MjI0NjFfMi5mYXN0cS5neg0KDQpgYGANCg0KDQoNCiMjIENoZWNrIGFuYWx5c2lzIGRhdGFzZXRzDQoNCg0KIyMjIEZvciBOQTEyODkxDQoNCg0KIyMjIyAgICB+L2dhdGstZGF0YS1yZWYkIHpjYXQgU1JSNjIyNDU4XzEuZmFzdHEuZ3ogfCBoZWFkIC1uIDINCiAgICANCkBTUlI2MjI0NTguMSAxLzENCg0KVEdHR0FUVEdHR0dUQUdHR0NUQUdHR0NUQ0dHR1RUR0dHR0FUQUdHR1RHQUdHR1RUVEdHR0FUQUdHR0dUQUdHR1RUQUdHR1RHVFRHR0NUQUdHR1RUQUdHR0NHQUdHR0NDQUdHR0MNCg0KDQojIyMjICAgIH4vZ2F0ay1kYXRhLXJlZiQgemNhdCBTUlI2MjI0NThfMi5mYXN0cS5neiB8IGhlYWQgLW4gMg0KDQpAU1JSNjIyNDU4LjEgMS8yDQoNCkFUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDR0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQ0NUQUFDQUFUQUFDQ0NUQUFDQ0NUQUFDQUNUQUFDQ1RUQUNDQ0NUQUFDQ0NUQUFDQ0NUQ0FDDQoNCg0KDQoNCg0KDQojIyMgRm9yIE5BMTI4OTINCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IFNSUjYyMjQ1OV8xLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQoNCkBTUlI2MjI0NTkuMSAxLzENCg0KR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR0FHQVRDR0dBQUcNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgemNhdCBTUlI2MjI0NTlfMi5mYXN0cS5neiB8IGhlYWQgLW4gMg0KDQpAU1JSNjIyNDU5LjEgMS8yDQoNCkNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNBR0FUQ0dHQUFHDQoNCg0KDQoNCiMjIyBGb3IgTkExMjg3OA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IFNSUjYyMjQ2MV8xLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQoNCkBTUlI2MjI0NjEuMSAxLzENCg0KR0NUQUdHR0dUQUdHR1RUQUdHR0NUQ0dHQVRUQUdHR0dUR0dHQVRUQUdHR1RUQUdBR0dBQUdUR0FUQUdDQ1RUQ0FHR0dUQUdHR0FUQ0dHR0NBQUdHQUFUQUdHQVRUR1RHR0dUR0cNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHpjYXQgU1JSNjIyNDYxXzIuZmFzdHEuZ3ogfCBoZWFkIC1uIDINCg0KQFNSUjYyMjQ2MS4xIDEvMg0KDQpBVEFBQ0NUQUFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ0NDVEFBQ1RDVEFUQ0FDVEdBQUNBVEFBR0NDVFRBQ0NBVEFDR1RUQ0FBQUNBVEFDQQ0KDQoNCg0KDQoNCg0KDQojIyBEb3dubG9hZCB0aGUgcmVmZXJlbmNlIChmYXN0YSwgZmFzdGEgaW5kZXgsIGRpY3Rpb25hcnkpIGFuZCBCV0EgaW5kZXggKC5hbHQsIC5hbWIsIC5hbm4sIC5id3QsIC5wYWMgYW5kIC5zYSkgZmlsZXMNCg0KDQpgYGANCiAgICAgICAgfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLg0KDQogICAgICAgIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmRpY3QgLg0KDQogICAgICAgIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLmZhaSAuDQoNCg0KIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFsdCAuDQoNCiANCiB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbWIgLg0KDQogDQogfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW5uIC4NCg0KIA0KIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmJ3dCAuDQoNCiANCiB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5wYWMgLg0KDQogDQogfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuc2EgLg0KDQpgYGANCg0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KYGBgDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDU4MTcxMiBKYW4gIDYgIDIwMTYgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZGljdA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMzI0OTkxMjc3OCBKYW4gIDUgIDIwMTYgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAxNjA5MjggRGVjICAxICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLmZhaQ0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgNDg3NTUzIE5vdiAgNiAyMzo0NyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgMjAxOTkgTm92ICA2IDIzOjQ3IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFtYg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDQ1NTQ3NCBOb3YgIDYgMjM6NDcgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW5uDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAzMjE3MzQ3MDA0IE5vdiAgNiAyMzo0NyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5id3QNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICA4MDQzMzY3MzEgTm92ICA2IDIzOjQ4IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LnBhYw0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMTYwODY3MzUxMiBOb3YgIDYgMjM6NDggSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuc2ENCg0KDQpgYGANCg0KDQoNCg0KIyMgRG93bmxvYWQgdGhlIHJlZmVyZW5jZSBTTlAgYW5kIGluZGVsIGZpbGVzIChmcm9tIGEgZ29vZ2xlIG9yIGF3cyBzMyBidWNrZXQpDQoNCg0KDQpgYGANCg0Kfi9nYXRrLWRhdGEtcmVmJCBnc3V0aWwgY3AgZ3M6Ly9nZW5vbWljcy1wdWJsaWMtZGF0YS9yZXNvdXJjZXMvYnJvYWQvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5kYnNucDEzOC52Y2YgZGJzbnAxMzgudmNmDQoNCn4vZ2F0ay1kYXRhLXJlZiQgZ3N1dGlsIGNwIGdzOi8vZ2Vub21pY3MtcHVibGljLWRhdGEvcmVzb3VyY2VzL2Jyb2FkL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZGJzbnAxMzgudmNmLmlkeCBkYnNucDEzOC52Y2YuaWR4DQoNCn4vZ2F0ay1kYXRhLXJlZiQgZ3N1dGlsIGNwIGdzOi8vZ2Vub21pY3MtcHVibGljLWRhdGEvcmVzb3VyY2VzL2Jyb2FkL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5Mzgua25vd25faW5kZWxzLnZjZi5neiBoZzM4Lmtub3duX2luZGVscy52Y2YuZ3oNCg0Kfi9nYXRrLWRhdGEtcmVmJCBnc3V0aWwgY3AgZ3M6Ly9nZW5vbWljcy1wdWJsaWMtZGF0YS9yZXNvdXJjZXMvYnJvYWQvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5rbm93bl9pbmRlbHMudmNmLmd6LnRiaSBoZzM4Lmtub3duX2luZGVscy52Y2YuZ3oudGJpDQogDQp+L2dhdGstZGF0YS1yZWYkIGdzdXRpbCBjcCBnczovL2dlbm9taWNzLXB1YmxpYy1kYXRhL3Jlc291cmNlcy9icm9hZC9oZzM4L3YwL01pbGxzX2FuZF8xMDAwR19nb2xkX3N0YW5kYXJkLmluZGVscy5oZzM4LnZjZi5neiBnb2xkX3N0YW5kYXJkLmluZGVscy5oZzM4LnZjZi5neg0KDQp+L2dhdGstZGF0YS1yZWYkIGdzdXRpbCBjcCBnczovL2dlbm9taWNzLXB1YmxpYy1kYXRhL3Jlc291cmNlcy9icm9hZC9oZzM4L3YwL01pbGxzX2FuZF8xMDAwR19nb2xkX3N0YW5kYXJkLmluZGVscy5oZzM4LnZjZi5nei50YmkgZ29sZF9zdGFuZGFyZC5pbmRlbHMuaGczOC52Y2YuZ3oudGJpDQoNCmBgYA0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCmBgYA0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgMTA5NTA4MjcyMTMgTWF5ICA2IDAyOjQ1IGRic25wMTM4LnZjZg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAxMjQ4MDQxMiBNYXkgIDYgMDI6NDYgZGJzbnAxMzgudmNmLmlkeA0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDIwNjg1ODgwIE1heSAgNiAwMjo0OCBnb2xkX3N0YW5kYXJkLmluZGVscy5oZzM4LnZjZi5neg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgMTUwMDAxMyBNYXkgIDYgMDI6NDkgZ29sZF9zdGFuZGFyZC5pbmRlbHMuaGczOC52Y2YuZ3oudGJpDQoNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgNjE2OTIzMDYgTWF5ICA2IDAyOjQ2IGhnMzgua25vd25faW5kZWxzLnZjZi5neg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgMTU2Nzg4NiBNYXkgIDYgMDI6NDcgaGczOC5rbm93bl9pbmRlbHMudmNmLmd6LnRiaQ0KDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCiMgQS4gUHJvZHVjZSBiYXNlIHJlY2FsaWJyYXRlZCBCQU0gZmlsZXMgZm9yIHRoZSAzIGluZGl2aWR1YWxzIChib3RoIHBhcmVudHMgYW5kIGEgcHJvZ2VueSkNCg0KDQpOQTEyODkxLUZhdGhlcg0KDQpOQTEyODkyLU1vdGhlcg0KDQpOQTEyODc4LURhdWdodGVyIChwcm9nZW55KQ0KDQoNCiMjIEExLiBHZW5lcmF0ZSBhIGJhc2UgcmVjYWxpYnJhdGVkIEJBTSBmaWxlIGZvciBOQTEyODkxDQoNCg0KDQoNCiMjIyBBbGlnbiB0aGUgc2VxdWVuY2VzIHRvIHRoZSByZWZlcmVuY2Ugc2VxdWVuY2UgdXNpbmcgQldBIA0KDQpBbGlnbm1lbnQgKGJ3YSBtZW0pIHdpbGwgbGVhZCB0byBhIFNBTSAoc2VxdWVuY2UgYWxpZ25tZW50IGZpbGUpIGZpbGUsIHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBCQU0gZmlsZSAoc2FtdG9vbHMgdmlldykuIEl0IHdpbGwgYmUgc29ydGVkIChpLmUuLCBzYW10b29scyBzb3J0KSBieSBjby1vcmRpbmF0ZSBhbmQgaW5kZXhlZCAoc2FtdG9vbHMgaW5kZXgpLiBTYW10b29scyBmbGFnc3RhdCB3aWxsIHByb2R1Y2UgYWxpZ25tZW50IHN0YXRpc3RpY3MuDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBid2EgbWVtIC1NIC10IDk2IC1SICdAUkdcdElEOlNSUjYyMjQ1OFx0TEI6UFx0UEw6aWxsdW1pbmFcdFBVOkZDQzFIN1dBQ1hYXHRTTTpOQTEyODkxJyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSBTUlI2MjI0NThfMS5mYXN0cS5neiBTUlI2MjI0NThfMi5mYXN0cS5neiB8IHNhbXRvb2xzIHZpZXcgLVNiaCB8IHNhbXRvb2xzIHNvcnQgLW8gU1JSNjIyNDU4LmJhbSAtICYmIHNhbXRvb2xzIGluZGV4IFNSUjYyMjQ1OC5iYW0gJiYgc2FtdG9vbHMgZmxhZ3N0YXQgU1JSNjIyNDU4LmJhbQ0KDQouLi4uLi4uLi4uLi4uLi4uDQoNClttYWluXSBWZXJzaW9uOiAwLjcuMTctcjExODgNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KW21haW5dIFJlYWwgdGltZTogMjcwOTguMDU5IHNlYzsgQ1BVOiAxMzM3MDgzLjY2NyBzZWMNCg0KW2JhbV9zb3J0X2NvcmVdIG1lcmdpbmcgZnJvbSA5NDcgZmlsZXMgYW5kIDEgaW4tbWVtb3J5IGJsb2Nrcy4uLg0KDQoNCmBgYA0KMjQ0ODA5OTA0NiArIDAgaW4gdG90YWwgKFFDLXBhc3NlZCByZWFkcyArIFFDLWZhaWxlZCByZWFkcykNCjExNTIwOTgzICsgMCBzZWNvbmRhcnkNCjEyODgwMjk3ICsgMCBzdXBwbGVtZW50YXJ5DQowICsgMCBkdXBsaWNhdGVzDQoyMzY4NDcyNjI3ICsgMCBtYXBwZWQgKDk2Ljc1JSA6IE4vQSkNCjI0MjM2OTc3NjYgKyAwIHBhaXJlZCBpbiBzZXF1ZW5jaW5nDQoxMjExODQ4ODgzICsgMCByZWFkMQ0KMTIxMTg0ODg4MyArIDAgcmVhZDINCjIyNTg4ODUzMzggKyAwIHByb3Blcmx5IHBhaXJlZCAoOTMuMjAlIDogTi9BKQ0KMjMxNzI2NjY3NiArIDAgd2l0aCBpdHNlbGYgYW5kIG1hdGUgbWFwcGVkDQoyNjgwNDY3MSArIDAgc2luZ2xldG9ucyAoMS4xMSUgOiBOL0EpDQozMTAyMjQ1NCArIDAgd2l0aCBtYXRlIG1hcHBlZCB0byBhIGRpZmZlcmVudCBjaHINCjE3NDU2NDM1ICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNociAobWFwUT49NSkNCg0KYGBgDQoNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAgICAgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgMTg5MDA1Nzc3MDExIE1heSAgMSAxNzo0NiBTUlI2MjI0NTguYmFtDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICA5Nzc3NjcyIE1heSAgMSAxOToxMiBTUlI2MjI0NTguYmFtLmJhaQ0KDQoNCg0KIyMjIFZhbGlkYXRlIHRoZSBCYW0gRmlsZSANCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgVmFsaWRhdGVTYW1GaWxlIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OC5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5LVNSUjYyMjQ1OA0KDQoNCi4uLi4uLi4uLi4uLi4uLg0KDQpbRnJpIE1heSAwMyAyMTowMTozNCBVVEMgMjAxOV0gcGljYXJkLnNhbS5WYWxpZGF0ZVNhbUZpbGUgZG9uZS4gRWxhcHNlZCB0aW1lOiA0NDMuNDEgbWludXRlcy4NCg0KLi4uLi4uLi4uLi4uLi4uLg0KDQpUb29sIHJldHVybmVkOiAzDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnktU1JSNjIyNDU4DQoNCmBgYA0KIyMgSElTVE9HUkFNICAgIGphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgVHlwZSAgICAgICAgICAgICAgQ291bnQNCg0KRVJST1I6SU5WQUxJRF9UQUdfTk0gICAgMjA3MDg3DQoNCmBgYA0KDQoNCg0KIyMjIEZpeCB0aGUgSU5WQUxJRF9UQUdfTk0gZXJyb3INCg0KDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBTZXRObU1kQW5kVXFUYWdzIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OC5iYW0gLU8gU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbQ0KDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQoNCg0KIyMjIFZhbGlkYXRlIHRoZSAnU2V0Tm1NZEFuZFVxVGFncycgb3IgcHJlc3VtZWQgZml4ZWQgQkFNIGZpbGUgYWdhaW4NCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBWYWxpZGF0ZVNhbUZpbGUgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbSAtTSBTVU1NQVJZIC1PIHN1bW1hcnktU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnDQoNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KW1NhdCBNYXkgMDQgMTE6MDk6NTkgVVRDIDIwMTldIHBpY2FyZC5zYW0uVmFsaWRhdGVTYW1GaWxlIGRvbmUuIEVsYXBzZWQgdGltZTogMzQ1LjE2IG1pbnV0ZXMuDQoNCi4uLi4uLi4uLi4uLi4NCg0KDQpUb29sIHJldHVybmVkOiAwDQoNCg0KDQojIyMjICAgICB+L2dhdGstZGF0YS1yZWYkIGNhdCBzdW1tYXJ5LVNSUjYyMjQ1OC5meE5tTWRVcVRhZyANCg0KTm8gZXJyb3JzIGZvdW5kDQoNCg0KDQoNCiMjIyBNYXJrIGR1cGxpY2F0ZXMNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgTWFya0R1cGxpY2F0ZXMgLUkgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbSAtTyBTUlI2MjI0NTguZnhObU1kVXFUYWcubWR1cC5iYW0gLU0gU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmR1cE1ldHJpY3MudHh0DQoNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCg0KW1N1biBNYXkgMDUgMDQ6NTk6NDQgVVRDIDIwMTldIHBpY2FyZC5zYW0ubWFya2R1cGxpY2F0ZXMuTWFya0R1cGxpY2F0ZXMgZG9uZS4gRWxhcHNlZCB0aW1lOiA2ODQuOTYgbWludXRlcy4NCg0KLi4uLi4uLi4uLi4uLi4uLg0KDQpUb29sIHJldHVybmVkOiAwDQoNCg0KIyMjIyAgICAgfi9nYXRrLWRhdGEtcmVmJCBoZWFkIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5kdXBNZXRyaWNzLnR4dCANCg0KLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoNCmBgYA0KTElCUkFSWSBVTlBBSVJFRF9SRUFEU19FWEFNSU5FRCBSRUFEX1BBSVJTX0VYQU1JTkVEICAgICBTRUNPTkRBUllfT1JfU1VQUExFTUVOVEFSWV9SRFMgIFVOTUFQUEVEX1JFQURTICBVTlBBSVJFRF9SRUFEX0RVUExJQ0FURVMgICAgICAgIFJFQURfUEFJUl9EVVBMSUNBVEVTICAgIFJFQURfUEFJUl9PUFRJQ0FMX0RVUExJQ0FURVMgICAgUEVSQ0VOVF9EVVBMSUNBVElPTiAgRVNUSU1BVEVEX0xJQlJBUllfU0laRQ0KDQpQICAgICAgIDI2ODA0NjcxICAgICAgICAxMTU4NjMzMzM4ICAgICAgMjQ0MDEyODAgICAgICAgIDc5NjI2NDE5ICAgICAgICAxMjE0OTY1NiAgICAgICAgNTcxMzMyMzAgICAgICAgIDAgICAgICAgMC4wNTM5MyAxMTM1ODc4MDg4Ng0KDQpgYGANCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAgICAgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI1NjQxNDUxNDc0OCBNYXkgIDQgMDU6MDcgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgOTc5MTU2MCBNYXkgIDQgMTc6MTggU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgIDQ2MDQgTWF5ICA1IDA0OjU5IFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5kdXBNZXRyaWNzLnR4dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI1OTE0ODE2NDk2NSBNYXkgIDUgMDQ6NTkgU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAuYmFtDQoNCg0KDQojIyMgUmVjYWxpYnJhdGUgdGhlIGJhc2VzIGluIHRoZSBCQU0gZmlsZSB1c2luZyBrbm93biByZWZlcmVuY2UgU05QcyBhbmQgaW5kZWxzDQoNCg0KDQojIyMgR2VuZXJhdGUgYSByZWNhbGlicmF0aW9uIHRhYmxlIHVzaW5nIGtub3duIFNOUHMgYW5kIGluZGVscyANCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBCYXNlUmVjYWxpYnJhdG9yIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5tZHVwLmJhbSAtLWtub3duLXNpdGVzIGRic25wMTM4LnZjZiAtLWtub3duLXNpdGVzIGdvbGRfc3RhbmRhcmQuaW5kZWxzLmhnMzgudmNmLmd6IC0ta25vd24tc2l0ZXMgaGczOC5rbm93bl9pbmRlbHMudmNmLmd6IC1PIFNSUjYyMjQ1OC5meE5tTSBkVXFUYWcubWR1cC5jaHJhbGwucmVjYWwudGFibGUNCg0KDQoNCg0KDQoNCjA1OjE3OjU4LjkyMCBJTkZPICBCYXNlUmVjYWxpYnJhdG9yIC0gV3JpdGluZyByZWNhbGlicmF0aW9uIHJlcG9ydC4uLg0KDQowNToxODowMC4zNTYgSU5GTyAgQmFzZVJlY2FsaWJyYXRvciAtIC4uLmRvbmUhDQoNCjA1OjE4OjAwLjM1NiBJTkZPICBCYXNlUmVjYWxpYnJhdG9yIC0gU2h1dHRpbmcgZG93biBlbmdpbmUNCg0KW01heSA3LCAyMDE5IDU6MTg6MDAgQU0gVVRDXSBvcmcuYnJvYWRpbnN0aXR1dGUuaGVsbGJlbmRlci50b29scy53YWxrZXJzLmJxc3IuQmFzZVJlY2FsaWJyYXRvciBkb25lLiBFbGFwc2VkIHRpbWU6IDg4OC4xMSBtaW51dGVzLg0KDQpSdW50aW1lLnRvdGFsTWVtb3J5KCk9Njc1ODA3MjMyDQoNClRvb2wgcmV0dXJuZWQ6IDIsMTAwLDQzNSwwNTINCg0KVXNpbmcgR0FUSyBqYXIgL2hvbWUvYjBkMjY0Ny9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4yLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjIuMC1sb2NhbC5qYXINCg0KDQoNCg0KDQojIyMgQXBwbHkgdGhlIHJlY2FsaWJyYXRpb24gZGF0YSB0byB0aGUgQkFNIGZpbGUNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgQXBwbHlCUVNSIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5tZHVwLmJhbSAtLWJxc3ItcmVjYWwtZmlsZSBTUlI2MjI0NTguZnhObU1kVXFUYWcubWR1cC5jaHJhbGwucmVjYWwudGFibGUgLU8gU1JSNjIyNDU4LmZ4Tm1NZFVxVGFnLm1kdXAucmNhbC5iYW0NCg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoNCjAxOjQxOjIxLjI4NyBJTkZPICBQcm9ncmVzc01ldGVyIC0gVHJhdmVyc2FsIGNvbXBsZXRlLiBQcm9jZXNzZWQgMjQ0ODA5OTA0NiB0b3RhbCByZWFkcyBpbiA5NzEuMyBtaW51dGVzLg0KDQowMTo0MToyMS4zMzggSU5GTyAgQXBwbHlCUVNSIC0gU2h1dHRpbmcgZG93biBlbmdpbmUNCg0KW01heSA4LCAyMDE5IDE6NDE6MjEgQU0gVVRDXSBvcmcuYnJvYWRpbnN0aXR1dGUuaGVsbGJlbmRlci50b29scy53YWxrZXJzLmJxc3IuQXBwbHlCUVNSIGRvbmUuIEVsYXBzZWQgdGltZTogOTcxLjMzIG1pbnV0ZXMuDQoNClJ1bnRpbWUudG90YWxNZW1vcnkoKT0xNzcyMDkzNDQNCg0KVXNpbmcgR0FUSyBqYXIgL2hvbWUvYjBkMjY0Ny9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4yLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjIuMC1sb2NhbC5qYXINCg0KDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQpgYGANCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgODYyMTAxIE1heSAgNyAwNToxOCBTUlI2MjI0NTguZnhObU1kVXFUYWcubWR1cC5jaHJhbGwucmVjYWwudGFibGUNCg0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICA5ODQzMDg4IE1heSAgOCAwMTo0MSBTUlI2MjI0NTguZnhObU1kVXFUYWcubWR1cC5yY2FsLmJhaQ0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAyNDkzMzYwMDgzNDIgTWF5ICA4IDAxOjQxIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5tZHVwLnJjYWwuYmFtDQoNCmBgYA0KDQoNCg0KDQoNCiMjIEEyLiBHZW5lcmF0ZSBhIGJhc2UgcmVjYWxpYnJhdGVkIEJBTSBmaWxlIGZvciBOQTEyODkyDQoNCg0KDQojIyMgQWxpZ24gdGhlIGZhc3RxIHNlcXVlbmNlcyB0byB0aGUgcmVmZXJlbmNlIGdlbm9tZSB1c2luZyBCV0EgDQoNCkFsaWdubWVudCAoYndhIG1lbSkgd2lsbCBsZWFkIHRvIGEgU0FNIChzZXF1ZW5jZSBhbGlnbm1lbnQgZmlsZSkgZmlsZSwgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEJBTSBmaWxlIChzYW10b29scyB2aWV3KS4NCg0KDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgYndhIG1lbSAtTSAtdCA5NiAtUiAnQFJHXHRJRDpTUlI2MjI0NTlcdExCOlFcdFBMOmlsbHVtaW5hXHRQVTpGQ0MxSDdXQUNYWFx0U006TkExMjg5MicgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgU1JSNjIyNDU5XzEuZmFzdHEuZ3ogU1JSNjIyNDU5XzIuZmFzdHEuZ3ogfCBzYW10b29scyB2aWV3IC1TYmggLW8gU1JSNjIyNDU5XzEuYmFtDQoNCg0KW21haW5dIFZlcnNpb246IDAuNy4xNy1yMTE4OA0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpbbWFpbl0gUmVhbCB0aW1lOiAyMjY4MC40OTcgc2VjOyBDUFU6IDEzOTM2MjIuNDQyIHNlYw0KDQoNCg0KIyMjIEdlbmVyYXRlIGFsaWdubWVudCBzdGF0aXN0aWNzDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgc2FtYmFtYmEgZmxhZ3N0YXQgLXAgU1JSNjIyNDU5XzEuYmFtIA0KDQoNCnNhbWJhbWJhIDAuNi45IGJ5IEFydGVtIFRhcmFzb3YgYW5kIFBqb3RyIFByaW5zIChDKSAyMDEyLTIwMTkNCg0KDQpgYGANCjI0Njc1NzA4NTQgKyAwIGluIHRvdGFsIChRQy1wYXNzZWQgcmVhZHMgKyBRQy1mYWlsZWQgcmVhZHMpDQoNCjEwNTg1MDA1ICsgMCBzZWNvbmRhcnkNCg0KMTE2MDc0NDcgKyAwIHN1cHBsZW1lbnRhcnkNCg0KMCArIDAgZHVwbGljYXRlcw0KDQoyMzY0NzMyNzA4ICsgMCBtYXBwZWQgKDk1LjgzJTpOL0EpDQoNCjI0NDUzNzg0MDIgKyAwIHBhaXJlZCBpbiBzZXF1ZW5jaW5nDQoNCjEyMjI2ODkyMDEgKyAwIHJlYWQxDQoNCjEyMjI2ODkyMDEgKyAwIHJlYWQyDQoNCjIyNTQ4MjI1MTggKyAwIHByb3Blcmx5IHBhaXJlZCAoOTIuMjElOk4vQSkNCg0KMjMxMzMzMzU2NCArIDAgd2l0aCBpdHNlbGYgYW5kIG1hdGUgbWFwcGVkDQoNCjI5MjA2NjkyICsgMCBzaW5nbGV0b25zICgxLjE5JTpOL0EpDQoNCjI3OTM1MDY2ICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNocg0KDQoxNjIzNDg3OCArIDAgd2l0aCBtYXRlIG1hcHBlZCB0byBhIGRpZmZlcmVudCBjaHIgKG1hcFE+PTUpDQoNCmBgYA0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMjAwNzEwODg0MTQ3IE1heSAgMiAxMTo0NyBTUlI2MjI0NTlfMS5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTkyMDA3NDkwODg2IE1heSAgMiAxMzo0MiBTUlI2MjI0NTlfMS5zb3J0ZWQuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgOTc3NTU4NCBNYXkgIDIgMTQ6MDUgU1JSNjIyNDU5XzEuc29ydGVkLmJhbS5iYWkNCg0KDQoNCg0KIyMjIFNvcnQgYW5kIGluZGV4IHRoZSBCQU0gZmlsZQ0KDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBzb3J0IC1AIDk2IC1tIDNHIFNSUjYyMjQ1OV8xLmJhbSAtbyBTUlI2MjI0NTlfMS5zb3J0ZWQuYmFtIA0KDQpbYmFtX3NvcnRfY29yZV0gbWVyZ2luZyBmcm9tIDE5MiBmaWxlcyBhbmQgOTYgaW4tbWVtb3J5IGJsb2Nrcy4uLg0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IC1AIDk2IFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0NCg0KDQoNCiMjIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxOTIwMDc0OTA4ODYgTWF5ICAyIDEzOjQyIFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICA5Nzc1NTg0IE1heSAgMiAxNDowNSBTUlI2MjI0NTlfMS5zb3J0ZWQuYmFtLmJhaQ0KDQoNCg0KDQojIyMgVmFsaWRhdGUgdGhlIEJBTSBmaWxlIChmb3IgR0FUSyBhbmFseXNpcykNCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIGdhdGsgVmFsaWRhdGVTYW1GaWxlIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5LVNSUjYyMjQ1OV8xLnNvcnRlZA0KDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkDQoNCmBgYA0KIyMgSElTVE9HUkFNCWphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgVHlwZQkgICAgICAgICAgICAgICAgICAgICAgICBDb3VudA0KDQpFUlJPUjpJTlZBTElEX1RBR19OTQkgICAgICAgIDI0NSw0NDQNCg0KYGBgDQoNCg0KDQojIyMgRml4IHRoZSBlcnJvciByZXBvcnRlZCBhYm92ZQ0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBTZXRObU1kQW5kVXFUYWdzIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0gLU8gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5iYW0NCg0KDQoNCiMjIyB2YWxpZGF0ZSB0aGUgQkFNIGZpbGUgYWdhaW4gYW5kIGNyZWF0ZSBhbiBpbmRleA0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgVmFsaWRhdGVTYW1GaWxlIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeS1TUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzDQoNCg0KW1NhdCBNYXkgMDQgMTk6MDc6NTggVVRDIDIwMTldIHBpY2FyZC5zYW0uVmFsaWRhdGVTYW1GaWxlIGRvbmUuIEVsYXBzZWQgdGltZTogMzMxLjc1IG1pbnV0ZXMuDQoNCi4uLi4uLi4uLi4uLi4uDQoNClRvb2wgcmV0dXJuZWQ6IDANCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncyANCg0KTm8gZXJyb3JzIGZvdW5kDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuYmFtDQoNCg0KDQoNCiMjIyBNYXJrIGR1cGxpY2F0ZXMgYW5kIGluZGV4IHRoZSBCQU0gZmlsZSBjcmVhdGVkDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIG5vaHVwIGdhdGsgTWFya0R1cGxpY2F0ZXMgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5iYW0gLU8gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtTSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmR1cE1ldHJpY3MudHh0ID4mIDU5XzEuZnhObS5sb2cgJg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgdGFpbCA1OV8xLmZ4Tm0ubG9nIA0KDQouLi4uLi4uLi4uLi4uLi4uDQoNCltTdW4gTWF5IDA1IDA1OjAzOjI5IFVUQyAyMDE5XSBwaWNhcmQuc2FtLm1hcmtkdXBsaWNhdGVzLk1hcmtEdXBsaWNhdGVzIGRvbmUuIEVsYXBzZWQgdGltZTogNjgwLjMwIG1pbnV0ZXMuDQoNClJ1bnRpbWUudG90YWxNZW1vcnkoKT0zNDgxNzk2NjA4DQoNClRvb2wgcmV0dXJuZWQ6IDANCg0KLi4uLi4uLi4uLi4uLi4NCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBoZWFkIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuZHVwTWV0cmljcy50eHQgDQoNCi4uLi4uLi4uLi4uLi4uLg0KDQpgYGANCg0KTElCUkFSWSBVTlBBSVJFRF9SRUFEU19FWEFNSU5FRCBSRUFEX1BBSVJTX0VYQU1JTkVEICAgICBTRUNPTkRBUllfT1JfU1VQUExFTUVOVEFSWV9SRFMgIFVOTUFQUEVEX1JFQURTICBVTlBBSVJFRF9SRUFEX0RVUExJQ0FURVMgICAgICAgIFJFQURfUEFJUl9EVVBMSUNBVEVTICAgIFJFQURfUEFJUl9PUFRJQ0FMX0RVUExJQ0FURVMgICAgUEVSQ0VOVF9EVVBMSUNBVElPTiAgRVNUSU1BVEVEX0xJQlJBUllfU0laRQ0KDQpRICAgICAgIDI5MjA2NjkyICAgICAgICAxMTU2NjY2NzgyICAgICAgMjIxOTI0NTIgICAgICAgIDEwMjgzODE0NiAgICAgICAxNDA1MDEwNSAgICAgICAgNTg2NjUzNDcgICAgICAgIDAgICAgICAgMC4wNTYwODUgICAgICAgIDExMDEzNzIwMTUzDQoNCmBgYA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBpbmRleCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtDQoNCg0KDQoNCiMjIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQpgYGANCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICA2OTEwNzEgTWF5ICA1IDA1OjAzIDU5XzEuZnhObS5sb2cNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAyNjA3MDQ2MzMxMjMgTWF5ICA0IDEwOjIzIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuYmFtDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICA5Nzg2OTUyIE1heSAgNCAxODowNSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgIDU1NjUgTWF5ICA1IDA1OjAzIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuZHVwTWV0cmljcy50eHQNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAyNjM0NzMyODQ1NzAgTWF5ICA1IDA1OjAzIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDk4MTc2MTYgTWF5ICA1IDA5OjU5IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5iYW0uYmFpDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgICAgIDE2IE1heSAgNCAxOTowNyBzdW1tYXJ5LVNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MNCg0KYGBgDQoNCg0KDQoNCiMjIyBSZWNhbGlicmF0ZSB0aGUgYmFzZXMgaW4gdGhlIEJBTSBmaWxlIHVzaW5nIGtub3duIHJlZmVyZW5jZSBTTlBzIGFuZCBpbmRlbHMNCg0KDQoNCiMjIyBHZW5lcmF0ZSBhIHJlY2FsaWJyYXRpb24gdGFibGUgdXNpbmcga25vd24gU05QcyBhbmQgaW5kZWxzIA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIEJhc2VSZWNhbGlicmF0b3IgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtLWtub3duLXNpdGVzIGRic25wMTM4LnZjZiAtLWtub3duLXNpdGVzIGdvbGRfc3RhbmRhcmQuaW5kZWxzLmhnMzgudmNmLmd6IC0ta25vd24tc2l0ZXMgaGczOC5rbm93bl9pbmRlbHMudmNmLmd6IC1PIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5jaHJhbGwucmVjYWwudGFibGUNCg0KDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoNCjA1OjU5OjIwLjc2MiBJTkZPICBCYXNlUmVjYWxpYnJhdG9yIC0gV3JpdGluZyByZWNhbGlicmF0aW9uIHJlcG9ydC4uLg0KDQowNTo1OToyMS44MTUgSU5GTyAgQmFzZVJlY2FsaWJyYXRvciAtIC4uLmRvbmUhDQoNCjA1OjU5OjIxLjgxNSBJTkZPICBCYXNlUmVjYWxpYnJhdG9yIC0gU2h1dHRpbmcgZG93biBlbmdpbmUNCg0KW01heSA3LCAyMDE5IDU6NTk6MjEgQU0gVVRDXSBvcmcuYnJvYWRpbnN0aXR1dGUuaGVsbGJlbmRlci50b29scy53YWxrZXJzLmJxc3IuQmFzZVJlY2FsaWJyYXRvciBkb25lLiBFbGFwc2VkIHRpbWU6IDg4OS45OCBtaW51dGVzLg0KDQpSdW50aW1lLnRvdGFsTWVtb3J5KCk9OTE4MDI4Mjg4DQoNClRvb2wgcmV0dXJuZWQ6IDIxMDAwMjIyMTUNCg0KVXNpbmcgR0FUSyBqYXIgL2hvbWUvYjBkMjY0Ny9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4yLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjIuMC1sb2NhbC5qYXINCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQoNCg0KDQojIyMgQXBwbHkgdGhlIHJlY2FsaWJyYXRpb24gZGF0YSB0byB0aGUgQkFNIGZpbGUNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgQXBwbHlCUVNSIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5iYW0gLS1icXNyLXJlY2FsLWZpbGUgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmNocmFsbC5yZWNhbC50YWJsZSAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAucmVjYWwuYmFtDQoNCg0KDQowMToyNzozNy4zOTMgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICAgICAgIHVubWFwcGVkICAgICAgICAgICAgOTUyLjIgICAgICAgICAgICAyNDY3MjU4MDAwICAgICAgICAyNTkxMDIwLjMNCg0KMDE6Mjc6NDEuNDI2IElORk8gIEFwcGx5QlFTUiAtIE5vIHJlYWRzIGZpbHRlcmVkIGJ5OiBXZWxsZm9ybWVkUmVhZEZpbHRlcg0KDQowMToyNzo0MS40MjcgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICAgICAgIHVubWFwcGVkICAgICAgICAgICAgOTUyLjMgICAgICAgICAgICAyNDY3NTcwODU0ICAgICAgICAyNTkxMTY2LjANCg0KMDE6Mjc6NDEuNDI4IElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCAyNDY3NTcwODU0IHRvdGFsIHJlYWRzIGluIDk1Mi4zIG1pbnV0ZXMuDQoNCjAxOjI3OjQxLjQ5MSBJTkZPICBBcHBseUJRU1IgLSBTaHV0dGluZyBkb3duIGVuZ2luZQ0KDQpbTWF5IDgsIDIwMTkgMToyNzo0MSBBTSBVVENdIG9yZy5icm9hZGluc3RpdHV0ZS5oZWxsYmVuZGVyLnRvb2xzLndhbGtlcnMuYnFzci5BcHBseUJRU1IgZG9uZS4gRWxhcHNlZCB0aW1lOiA5NTIuMzMgbWludXRlcy4NCg0KUnVudGltZS50b3RhbE1lbW9yeSgpPTE1MjkzNDgwOTYNCg0KVXNpbmcgR0FUSyBqYXIgL2hvbWUvYjBkMjY0Ny9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4yLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjIuMC1sb2NhbC5qYXINCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQpgYGANCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgODYyMTAxIE1heSAgNyAwNTo1OSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuY2hyYWxsLnJlY2FsLnRhYmxlDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICA5ODU3MjQwIE1heSAgOCAwMToyNyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAucmVjYWwuYmFpDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI0NzAxODMxOTY5MCBNYXkgIDggMDE6MjcgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnJlY2FsLmJhbQ0KYGBgDQoNCg0KDQoNCiMjIEEzLiBHZW5lcmF0ZSBhIHZhbGlkYXRlZCBCQU0gZmlsZSBmb3IgTkExMjg3OA0KDQoNCg0KIyMjIEFsaWduIHRoZSBmYXN0cSBzZXF1ZW5jZXMgdG8gdGhlIHJlZmVyZW5jZSBnZW5vbWUgdXNpbmcgQldBIA0KDQpBbGlnbm1lbnQgKGJ3YSBtZW0pIHdpbGwgbGVhZCB0byBhIFNBTSAoc2VxdWVuY2UgYWxpZ25tZW50IGZpbGUpIGZpbGUsIHRoYXQgd2lsbCBiZSBkdXBsaWNhdGUgbWFya2VkIHVzaW5nIHNhbWJsYXN0ZXIuIFRoZSBzYW0gZmlsZSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEJBTSBmaWxlIChzYW10b29scyB2aWV3KS4gVGhlIEJBTSBmaWxlIHdpbGwgYmUgc29ydGVkLCBpbmRleGVkIGFuZCBzdWJqZWN0ZWQgdG8gZ2VuZXJhdGUgYWxpZ25tZW50IHN0YXRpc3RpY3MNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgYndhIG1lbSAtTSAtdCA3MiAtUiAnQFJHXHRJRDpTUlI2MjI0NjFcdExCOlJcdFBMOmlsbHVtaW5hXHRQVTpGQ0MxSDdXQUNYWFx0U006TkExMjg3OCcgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgU1JSNjIyNDYxXzEuZmFzdHEuZ3ogU1JSNjIyNDYxXzIuZmFzdHEuZ3ogfCBzYW1ibGFzdGVyIC1NIHwgc2FtdG9vbHMgdmlldyAtU2JoIHwgc2FtdG9vbHMgc29ydCAtbyBTUlI2MjI0NjEuYmFtIC0gJiYgc2FtdG9vbHMgaW5kZXggU1JSNjIyNDYxLmJhbSAmJiBzYW10b29scyBmbGFnc3RhdCBTUlI2MjI0NjEuYmFtDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCnNhbWJsYXN0ZXI6IFZlcnNpb24gMC4xLjI0DQoNCnNhbWJsYXN0ZXI6IElucHV0dGluZyBmcm9tIHN0ZGluDQoNCnNhbWJsYXN0ZXI6IE91dHB1dHRpbmcgdG8gc3Rkb3V0DQoNCltNOjpid2FfaWR4X2xvYWRfZnJvbV9kaXNrXSByZWFkIDMxNzEgQUxUIGNvbnRpZ3MNCg0KW006OnByb2Nlc3NdIHJlYWQgNzEyODcxNCBzZXF1ZW5jZXMgKDcyMDAwMDExNCBicCkuLi4NCg0KDQouLi4uLi4uLi4uDQoNCnNhbWJsYXN0ZXI6IE1hcmtlZCA3MDY2Njk4IG9mIDkyNDU5NDU0ICg3LjY0JSkgcmVhZCBpZHMgYXMgZHVwbGljYXRlcyB1c2luZyAxLDQ2NCw0NzJrIG1lbW9yeSBpbiAyTTE1UygxMzUuMTY1UykgQ1BVIHNlY29uZHMgYW5kIDM0TTE1UygyMDU1Uykgd2FsbCB0aW1lLg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNClttYWluXSBWZXJzaW9uOiAwLjcuMTctcjExODgNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNClttYWluXSBSZWFsIHRpbWU6IDIwNTQuNTA2IHNlYzsgQ1BVOiA4NjI1OC42NjQgc2VjDQoNCltiYW1fc29ydF9jb3JlXSBtZXJnaW5nIGZyb20gNzEgZmlsZXMgYW5kIDEgaW4tbWVtb3J5IGJsb2Nrcy4uLg0KDQoNCg0KYGBgDQoxODY0MzQ2NzAgKyAwIGluIHRvdGFsIChRQy1wYXNzZWQgcmVhZHMgKyBRQy1mYWlsZWQgcmVhZHMpDQoNCjc0NTQyMiArIDAgc2Vjb25kYXJ5DQoNCjc3MDM0MCArIDAgc3VwcGxlbWVudGFyeQ0KDQoxNDMwNTM4MCArIDAgZHVwbGljYXRlcw0KDQoxNzczNzI0NTggKyAwIG1hcHBlZCAoOTUuMTQlIDogTi9BKQ0KDQoxODQ5MTg5MDggKyAwIHBhaXJlZCBpbiBzZXF1ZW5jaW5nDQoNCjkyNDU5NDU0ICsgMCByZWFkMQ0KDQo5MjQ1OTQ1NCArIDAgcmVhZDINCg0KMTY4NjQwNTM2ICsgMCBwcm9wZXJseSBwYWlyZWQgKDkxLjIwJSA6IE4vQSkNCg0KMTczNjA3MzA0ICsgMCB3aXRoIGl0c2VsZiBhbmQgbWF0ZSBtYXBwZWQNCg0KMjI0OTM5MiArIDAgc2luZ2xldG9ucyAoMS4yMiUgOiBOL0EpDQoNCjE2ODg3OTYgKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyDQoNCjgxOTI0NiArIDAgd2l0aCBtYXRlIG1hcHBlZCB0byBhIGRpZmZlcmVudCBjaHIgKG1hcFE+PTUpDQoNCmBgYA0KDQoNCiMjIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxMjkzMjMxMjU0MyBBcHIgMzAgMTc6MjkgU1JSNjIyNDYxLmJhbQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgNTY3OTQyNCBBcHIgMzAgMTc6MzEgU1JSNjIyNDYxLmJhbS5iYWkNCg0KDQoNCiMjIyBWYWxpZGF0ZSB0aGUgQkFNIGZpbGUNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgVmFsaWRhdGVTYW1GaWxlIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ2MS5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5LVNSUjYyMjQ2MQ0KDQoNCi4uLi4uLi4uLi4uLg0KDQpUb29sIHJldHVybmVkOiAzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGNhdCBzdW1tYXJ5LVNSUjYyMjQ2MSANCg0KYGBgDQojIyBISVNUT0dSQU0JamF2YS5sYW5nLlN0cmluZw0KDQpFcnJvciBUeXBlCSAgICAgICAgQ291bnQNCg0KRVJST1I6SU5WQUxJRF9UQUdfTk0JMTYxNjQNCg0KYGBgDQoNCg0KDQojIyMgRml4IHRoZSBlcnJvciBub3RlZCBhYm92ZQ0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgU2V0Tm1NZEFuZFVxVGFncyAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NjEuYmFtIC1PIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5iYW0NCg0KDQoNCiMjIyB2YWxpZGF0ZSB0aGUgQkFNIGZpbGUgYWdhaW4gYW5kIGNyZWF0ZSBhbiBpbmRleA0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgVmFsaWRhdGVTYW1GaWxlIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5LVNSUjYyMjQ2MS5meE5tTWRVcVRhZw0KDQoNCi4uLi4uLi4uLi4uLi4uDQoNClRvb2wgcmV0dXJuZWQ6IDANCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnktU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnDQoNCk5vIGVycm9ycyBmb3VuZA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBpbmRleCBTUlI2MjI0NjEuZnhObU1kVXFUYWcuYmFtDQoNCg0KDQoNCiMjIyBNYXJrIGR1cGxpY2F0ZXMgYW5kIGluZGV4IHRoZSBCQU0gZmlsZSBjcmVhdGVkDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIG5vaHVwIGdhdGsgTWFya0R1cGxpY2F0ZXMgLUkgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmJhbSAtTyBTUlI2MjI0NjEuZnhObU1kVXFUYWcubWR1cC5iYW0gLU0gU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmR1cE1ldHJpY3MudHh0DQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGhlYWQgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5kdXBNZXRyaWNzLnR4dCANCg0KLi4uLi4uLi4uLi4uLi4uDQoNCmBgYA0KDQojIyBNRVRSSUNTIENMQVNTICAgICAgICBwaWNhcmQuc2FtLkR1cGxpY2F0aW9uTWV0cmljcw0KTElCUkFSWSBVTlBBSVJFRF9SRUFEU19FWEFNSU5FRCBSRUFEX1BBSVJTX0VYQU1JTkVEICAgICBTRUNPTkRBUllfT1JfU1VQUExFTUVOVEFSWV9SRFMgIFVOTUFQUEVEX1JFQURTICBVTlBBSVJFRF9SRUFEX0RVUExJQ0FURVMgICAgICAgIFJFQURfUEFJUl9EVVBMSUNBVEVTICBSRUFEX1BBSVJfT1BUSUNBTF9EVVBMSUNBVEVTICAgIFBFUkNFTlRfRFVQTElDQVRJT04gICAgIEVTVElNQVRFRF9MSUJSQVJZX1NJWkUNCg0KUiAgICAgICAyMjQ5MzkyIDg2ODAzNjUyICAgICAgICAxNTE1NzYyIDkwNjIyMTIgNjM1ODE4ICA3MDA5MjM0IDAgICAgICAgMC4wODMzMzEgICAgICAgIDUwODE1NDU2OA0KDQpgYGANCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgc2FtdG9vbHMgaW5kZXggU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuYmFtDQoNCg0KDQoNCg0KDQojIyMgUmVjYWxpYnJhdGUgdGhlIGJhc2VzIGluIHRoZSBCQU0gZmlsZSB1c2luZyBrbm93biByZWZlcmVuY2UgU05QcyBhbmQgaW5kZWxzDQoNCg0KDQojIyMgR2VuZXJhdGUgYSByZWNhbGlicmF0aW9uIHRhYmxlIHVzaW5nIGtub3duIFNOUHMgYW5kIGluZGVscyANCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBCYXNlUmVjYWxpYnJhdG9yIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmJhbSAtLWtub3duLXNpdGVzIGRic25wMTM4LnZjZiAtLWtub3duLXNpdGVzIGdvbGRfc3RhbmRhcmQuaW5kZWxzLmhnMzgudmNmLmd6IC0ta25vd24tc2l0ZXMgaGczOC5rbm93bl9pbmRlbHMudmNmLmd6IC1PIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmNocmFsbC5yZWNhbC50YWJsZQ0KDQoxNjo1ODoxMC42OTggSU5GTyAgQmFzZVJlY2FsaWJyYXRvciAtIFdyaXRpbmcgcmVjYWxpYnJhdGlvbiByZXBvcnQuLi4NCg0KMTY6NTg6MTIuNTMxIElORk8gIEJhc2VSZWNhbGlicmF0b3IgLSAuLi5kb25lIQ0KDQoxNjo1ODoxMi41MzEgSU5GTyAgQmFzZVJlY2FsaWJyYXRvciAtIFNodXR0aW5nIGRvd24gZW5naW5lDQoNCltNYXkgNiwgMjAxOSA0OjU4OjEyIFBNIFVUQ10gb3JnLmJyb2FkaW5zdGl0dXRlLmhlbGxiZW5kZXIudG9vbHMud2Fsa2Vycy5icXNyLkJhc2VSZWNhbGlicmF0b3IgZG9uZS4gRWxhcHNlZCB0aW1lOiAxMjguMTMgbWludXRlcy4NCg0KUnVudGltZS50b3RhbE1lbW9yeSgpPTI4MDI4NDM2NDgNCg0KVG9vbCByZXR1cm5lZDogMTUzMTE3MjgxDQoNClVzaW5nIEdBVEsgamFyIC9ob21lL2IwZDI2NDcvbWluaWNvbmRhMy9zaGFyZS9nYXRrNC00LjEuMi4wLTAvZ2F0ay1wYWNrYWdlLTQuMS4yLjAtbG9jYWwuamFyDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQoNCg0KIyMjIEFwcGx5IHRoZSByZWNhbGlicmF0aW9uIGRhdGEgdG8gdGhlIEJBTSBmaWxlDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIEFwcGx5QlFTUiAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NjEuZnhObU1kVXFUYWcubWR1cC5iYW0gLS1icXNyLXJlY2FsLWZpbGUgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuY2hyYWxsLnJlY2FsLnRhYmxlIC1PIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLnJlY2FsLmJhbQ0KDQoNCjAwOjA1OjUzLjg3NCBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICAgICAgdW5tYXBwZWQgICAgICAgICAgICAgNzUuNiAgICAgICAgICAgICAxODY0MTcwMDAgICAgICAgIDI0NjYxNDcuNg0KDQowMDowNTo1NC4wNzIgSU5GTyAgQXBwbHlCUVNSIC0gTm8gcmVhZHMgZmlsdGVyZWQgYnk6IFdlbGxmb3JtZWRSZWFkRmlsdGVyDQoNCjAwOjA1OjU0LjA3MiBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICAgICAgdW5tYXBwZWQgICAgICAgICAgICAgNzUuNiAgICAgICAgICAgICAxODY0MzQ2NzAgICAgICAgIDI0NjYyNzMuMQ0KDQowMDowNTo1NC4wNzMgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDE4NjQzNDY3MCB0b3RhbCByZWFkcyBpbiA3NS42IG1pbnV0ZXMuDQoNCjAwOjA1OjU0LjEyNCBJTkZPICBBcHBseUJRU1IgLSBTaHV0dGluZyBkb3duIGVuZ2luZQ0KDQpbTWF5IDcsIDIwMTkgMTI6MDU6NTQgQU0gVVRDXSBvcmcuYnJvYWRpbnN0aXR1dGUuaGVsbGJlbmRlci50b29scy53YWxrZXJzLmJxc3IuQXBwbHlCUVNSIGRvbmUuIEVsYXBzZWQgdGltZTogNzUuNjIgbWludXRlcy4NCg0KUnVudGltZS50b3RhbE1lbW9yeSgpPTM5NDc4ODg2NA0KDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQoNCg0KDQoNCiMjIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCmBgYA0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxNzU1MzA5MzU3MyBNYXkgIDYgMDQ6MDAgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmJhbQ0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgODg0NjI5NiBNYXkgIDYgMTc6MDggU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgMzUzMSBNYXkgIDYgMTQ6NDIgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLmR1cE1ldHJpY3MudHh0DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgMTc3MjgyOTM5MjQgTWF5ICA2IDE0OjQyIFNSUjYyMjQ2MS5meE5tTWRVcVRhZy5tZHVwLmJhbQ0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgODk1OTI2NCBNYXkgIDYgMTc6MDggU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAuYmFtLmJhaQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgODU0MzU1IE1heSAgNiAxNjo1OCBTUlI2MjI0NjEuZnhObU1kVXFUYWcubWR1cC5jaHJhbGwucmVjYWwudGFibGUNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgOTE4ODA0OCBNYXkgIDcgMDA6MDUgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAucmVjYWwuYmFpDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDIwNTczNzM4ODM5IE1heSAgNyAwMDowNSBTUlI2MjI0NjEuZnhObU1kVXFUYWcubWR1cC5yZWNhbC5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgICAxNiBNYXkgIDYgMDQ6Mzggc3VtbWFyeS1TUlI2MjI0NjEuZnhObU1kVXFUYWcNCg0KDQpgYGANCg0KDQoNCg0KDQoNCg0KDQojIEIuIEpvaW50IGdlbm90eXBpbmcgc2FtcGxlcyBmb3IgZGV0ZWN0aW5nIHZhcmlhbnRzIGluIGNocm5hNCBnZW5lIChjaHIyMDo2MzM0MzMxMC02MzM3NTQ3MSkgdXNpbmcgdGhlIHRocmVlIGJhc2UgcmVjYWxpYnJhdGVkIEJBTSBmaWxlcw0KDQoNCiMjIyBSdW4gZ2F0ayBoYXBsb3R5cGVjYWxsZXINCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgSGFwbG90eXBlQ2FsbGVyIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OC5meE5tTWRVcVRhZy5tZHVwLnJjYWwuYmFtIC1JIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5yZWNhbC5iYW0gLUkgU1JSNjIyNDYxLmZ4Tm1NZFVxVGFnLm1kdXAucmVjYWwuYmFtIC1MIGNocjIwOjYzMzQzMzEwLTYzMzc1NDcxIC1PIFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLnZjZiANCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KYGBgDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAxMjQgTWF5ICA4IDAzOjI1IE5BMTI4LTc4LTkxLTkyLnBlZA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgMjA1OTA5IE1heSAgOCAwMjoyNiBTUlI2MjI0LTU4LTU5LTYxLmZ4VGdzLm1kdXAucmVjYWwuY2hybmE0LmpjYWxscy52Y2YNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAxMTgxMDAgTWF5ICA4IDAyOjI2IFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLnZjZi5pZHgNCg0KYGBgDQoNCiMjIyBHZW5lcmF0ZSB2YXJpYW50IHN0YXRpc3RpY3MNCg0KIyMjIyAkIGJjZnRvb2xzIHN0YXRzIFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLnZjZiB8IGxlc3MNCg0KDQoNCmBgYA0KIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IGJjZnRvb2xzIHN0YXRzICgxLjkraHRzbGliLTEuOSkgYW5kIGNhbiBiZSBwbG90dGVkIHVzaW5nIHBsb3QtdmNmc3RhdHMuDQojIFRoZSBjb21tYW5kIGxpbmUgd2FzOiBiY2Z0b29scyBzdGF0cyAgU1JSNjIyNC01OC01OS02MS5meFRncy5tZHVwLnJlY2FsLmNocm5hNC5qY2FsbHMudmNmDQojDQojIERlZmluaXRpb24gb2Ygc2V0czoNCiMgSUQgICAgWzJdaWQgICBbM110YWItc2VwYXJhdGVkIGZpbGUgbmFtZXMNCklEICAgICAgMCAgICAgICBTUlI2MjI0LTU4LTU5LTYxLmZ4VGdzLm1kdXAucmVjYWwuY2hybmE0LmpjYWxscy52Y2YNCiMgU04sIFN1bW1hcnkgbnVtYmVyczoNCiMgICBudW1iZXIgb2YgcmVjb3JkcyAgIC4uIG51bWJlciBvZiBkYXRhIHJvd3MgaW4gdGhlIFZDRg0KIyAgIG51bWJlciBvZiBuby1BTFRzICAgLi4gcmVmZXJlbmNlLW9ubHkgc2l0ZXMsIEFMVCBpcyBlaXRoZXIgIi4iIG9yIGlkZW50aWNhbCB0byBSRUYNCiMgICBudW1iZXIgb2YgU05QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBTTlANCiMgICBudW1iZXIgb2YgTU5QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBNTlAsIHN1Y2ggYXMgQ0M+VFQNCiMgICBudW1iZXIgb2YgaW5kZWxzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYW4gaW5kZWwNCiMgICBudW1iZXIgb2Ygb3RoZXJzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggb3RoZXIgdHlwZSwgZm9yIGV4YW1wbGUgYSBzeW1ib2xpYyBhbGxlbGUgb3INCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tcGxleCBzdWJzdGl0dXRpb24sIHN1Y2ggYXMgQUNUPlRDR0ENCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXMgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcywgYWxsIFNOUHMNCiMgDQojICAgTm90ZSB0aGF0IHJvd3MgY29udGFpbmluZyBtdWx0aXBsZSB0eXBlcyB3aWxsIGJlIGNvdW50ZWQgbXVsdGlwbGUgdGltZXMsIGluIGVhY2gNCiMgICBjb3VudGVyLiBGb3IgZXhhbXBsZSwgYSByb3cgd2l0aCBhIFNOUCBhbmQgYW4gaW5kZWwgaW5jcmVtZW50cyBib3RoIHRoZSBTTlAgYW5kDQojICAgdGhlIGluZGVsIGNvdW50ZXIuDQojIA0KIyBTTiAgICBbMl1pZCAgIFszXWtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF12YWx1ZQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBzYW1wbGVzOiAgICAgICAgICAgICAgICAgICAgICAzDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgICAgICAgICAgICAgICAgIDExNw0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBuby1BTFRzOiAgICAgICAgICAgICAgICAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDk3DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICAgICAgICAgICAgICAgICAgMjANClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAgICAgICAgICAgICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgICAgICAgICAzDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDINCg0KYGBgDQoNCg0KDQoNCiMgQy4gQ2FsY3VsYXRlIGdlbm90eXBlIHBvc3RlcmlvciBsaWtlbGlob29kcyBmb3IgZ2l2ZW4gcGFuZWwgZGF0YQ0KDQpUaGlzIHJ1biBuZWVkcyBhIHBlZCBmaWxlIHdob3NlIHN0cnVjdHVyZSBpcyBzaG93biBiZWxvdzoNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IE5BMTI4LTc4LTkxLTkyLnBlZCANCg0KYGBgDQpGYW1JRCAgIEluZElEICAgUGF0SUQgICBNYXRJRCAgIFNleCAgICAgUGhlbm90eXBlDQoNCkNFVVRyaW8gTkExMjg5MSAwICAgICAgIDAgICAgICAgMSAgICAgICAwDQoNCkNFVVRyaW8gTkExMjg5MiAwICAgICAgIDAgICAgICAgMiAgICAgICAwDQoNCkNFVVRyaW8gTkExMjg3OCBOQTEyODkxIE5BMTI4OTIgMiAgICAgICAwDQoNCmBgYA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIENhbGN1bGF0ZUdlbm90eXBlUG9zdGVyaW9ycyAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtViBTUlI2MjI0LTU4LTU5LTYxLmZ4VGdzLm1kdXAucmVjYWwuY2hybmE0LmpjYWxscy52Y2YgLXBlZCBOQTEyOC03OC05MS05Mi5wZWQgLU8gU1JSNjIyNC01OC01OS02MS5meFRncy5tZHVwLnJlY2FsLmNocm5hNC5qY2FsbHMuZ2Vub1Bvc3RlcmlvcnMudmNmDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCmBgYA0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgIDIxNDU5OCBNYXkgIDggMDM6MjkgU1JSNjIyNC01OC01OS02MS5meFRncy5tZHVwLnJlY2FsLmNocm5hNC5qY2FsbHMuZ2Vub1Bvc3RlcmlvcnMudmNmDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAxMTgxMTUgTWF5ICA4IDAzOjI5IFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLmdlbm9Qb3N0ZXJpb3JzLnZjZi5pZHgNCg0KYGBgDQoNCiMjIyBHZW5lcmF0ZSB2YXJpYW50IHN0YXRpc3RpY3MNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGJjZnRvb2xzIHN0YXRzIFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLmdlbm9Qb3N0ZXJpb3JzLnZjZiB8IGxlc3MNCg0KYGBgDQoNCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KIyBUaGUgY29tbWFuZCBsaW5lIHdhczogYmNmdG9vbHMgc3RhdHMgIFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLmdlbm9Qb3N0ZXJpb3JzLnZjZg0KIw0KIyBEZWZpbml0aW9uIG9mIHNldHM6DQojIElEICAgIFsyXWlkICAgWzNddGFiLXNlcGFyYXRlZCBmaWxlIG5hbWVzDQpJRCAgICAgIDAgICAgICAgU1JSNjIyNC01OC01OS02MS5meFRncy5tZHVwLnJlY2FsLmNocm5hNC5qY2FsbHMuZ2Vub1Bvc3RlcmlvcnMudmNmDQojIFNOLCBTdW1tYXJ5IG51bWJlcnM6DQojICAgbnVtYmVyIG9mIHJlY29yZHMgICAuLiBudW1iZXIgb2YgZGF0YSByb3dzIGluIHRoZSBWQ0YNCiMgICBudW1iZXIgb2Ygbm8tQUxUcyAgIC4uIHJlZmVyZW5jZS1vbmx5IHNpdGVzLCBBTFQgaXMgZWl0aGVyICIuIiBvciBpZGVudGljYWwgdG8gUkVGDQojICAgbnVtYmVyIG9mIFNOUHMgICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGEgU05QDQojICAgbnVtYmVyIG9mIE1OUHMgICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGEgTU5QLCBzdWNoIGFzIENDPlRUDQojICAgbnVtYmVyIG9mIGluZGVscyAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGFuIGluZGVsDQojICAgbnVtYmVyIG9mIG90aGVycyAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG90aGVyIHR5cGUsIGZvciBleGFtcGxlIGEgc3ltYm9saWMgYWxsZWxlIG9yDQojICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbXBsZXggc3Vic3RpdHV0aW9uLCBzdWNoIGFzIEFDVD5UQ0dBDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlcyAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcw0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMsIGFsbCBTTlBzDQojIA0KIyAgIE5vdGUgdGhhdCByb3dzIGNvbnRhaW5pbmcgbXVsdGlwbGUgdHlwZXMgd2lsbCBiZSBjb3VudGVkIG11bHRpcGxlIHRpbWVzLCBpbiBlYWNoDQojICAgY291bnRlci4gRm9yIGV4YW1wbGUsIGEgcm93IHdpdGggYSBTTlAgYW5kIGFuIGluZGVsIGluY3JlbWVudHMgYm90aCB0aGUgU05QIGFuZA0KIyAgIHRoZSBpbmRlbCBjb3VudGVyLg0KIyANCiMgU04gICAgWzJdaWQgICBbM11rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRddmFsdWUNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBzYW1wbGVzOiAgICAgICAgICAgICAgICAgICAgICAzDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAgICAgICAgICAgICAgICAgMTE3DQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDk3DQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogICAgICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIGluZGVsczogICAgICAgICAgICAgICAgICAgICAgIDIwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczogICAgICAgICAgIDMNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAyDQoNCmBgYA0KDQoNCg0KIyMgQzEuIENoZWNrIHRoZSBwcmVzZW5jZSBvZiBwb3NzaWJsZSBkZSBub3ZlIFNOUA0KDQojIyMgU2VsZWN0IFNOUHMNCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIGdhdGsgU2VsZWN0VmFyaWFudHMgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLVYgU1JSNjIyNC01OC01OS02MS5meFRncy5tZHVwLnJlY2FsLmNocm5hNC5qY2FsbHMuZ2Vub1Bvc3RlcmlvcnMudmNmIC0tc2VsZWN0LXR5cGUtdG8taW5jbHVkZSBTTlAgLU8gU1JSNjIyNC01OC01OS02MS5meFRncy5tZHVwLnJlY2FsLmNocm5hNC5qY2FsbHMuZ1Auc2VsY3RTTlAudmNmDQoNCg0KMTg6MDU6MjguMDI0IElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCA5NyB0b3RhbCB2YXJpYW50cyBpbiAwLjAgbWludXRlcy4NCg0KDQoNCiMjIyBIYXJkIGZpbHRlciBTTlBzIChpbnN0ZWFkIG9mIFZhcmlhbnQgUmVjYWxpYnJhdGlvbikNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmICQgZ2F0ayBWYXJpYW50RmlsdHJhdGlvbiAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtViBTUlI2MjI0LTU4LTU5LTYxLmZ4VGdzLm1kdXAucmVjYWwuY2hybmE0LmpjYWxscy5nUC5zZWxjdFNOUC52Y2YgLWZpbHRlciAiUUQgPCAyLjAgfHwgRlMgPiA2MC4wIHx8IE1RIDwgNDAuMCB8fE1RUmFua1N1bSA8IC0xMi41IHx8IFJlYWRQb3NSYW5rU3VtIDwgLTguMCIgLS1maWx0ZXItbmFtZSAnQnJvYWQnIC1PIFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLmdQLnNlbGN0U05QLkJyb2FkRmlsdGVyZWQudmNmDQoNCg0KMTg6MTY6NTQuNjU3IElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCA5NyB0b3RhbCB2YXJpYW50cyBpbiAwLjAgbWludXRlcy4NCg0KDQojIyMgQW5ub3RhdGUgcG9zc2libGUgRGUgTm92byBTTlBzDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhcmlhbnRBbm5vdGF0b3IgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLVYgU1JSNjIyNC01OC01OS02MS5meFRncy5tZHVwLnJlY2FsLmNocm5hNC5qY2FsbHMuZ1Auc2VsY3RTTlAuQnJvYWRGaWx0ZXJlZC52Y2YgLUEgUG9zc2libGVEZU5vdm8gLXBlZCBOQTEyOC03OC05MS05Mi5wZWQgLU8gU1JSNjIyNC01OC01OS02MS5jaHJuYTQuUG9zc2libGVEZU5vdm9TTlAudmNmDQoNCg0KDQouLi4uLi4uLi4uLi4NCg0KMTg6NDA6MjIuNTQ4IElORk8gIFBlZFJlYWRlciAtIFBoZW5vdHlwZSBpcyBvdGhlcj8gdHJ1ZQ0KDQoxODo0MDoyMi42OTYgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICAgICAgIHVubWFwcGVkICAgICAgICAgICAgICAwLjAgICAgICAgICAgICAgICAgICAgIDk3ICAgICAgICAgIDI0OTc4LjUNCg0KDQoNCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYgJCBjYXQgU1JSNjIyNC01OC01OS02MS5jaHJuYTQuUG9zc2libGVEZU5vdm9TTlAudmNmIHwgZ3JlcCAiRGVOb3ZvIg0KDQpgYGANCiMjSU5GTz08SUQ9aGlDb25mRGVOb3ZvLE51bWJlcj0xLFR5cGU9U3RyaW5nLERlc2NyaXB0aW9uPSJIaWdoIGNvbmZpZGVuY2UgcG9zc2libGUgZGUgbm92byBtdXRhdGlvbiAoR1EgPj0gMjAgZm9yIGFsbCB0cmlvIG1lbWJlcnMpPVtjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBjaGlsZCBzYW1wbGVzXSI+DQoNCiMjSU5GTz08SUQ9bG9Db25mRGVOb3ZvLE51bWJlcj0xLFR5cGU9U3RyaW5nLERlc2NyaXB0aW9uPSJMb3cgY29uZmlkZW5jZSBwb3NzaWJsZSBkZSBub3ZvIG11dGF0aW9uIChHUSA+PSAxMCBmb3IgY2hpbGQsIEdRID4gMCBmb3IgcGFyZW50cyk9W2NvbW1hLWRlbGltaXRlZCBsaXN0IG9mIGNoaWxkIHNhbXBsZXNdIj4NCg0KYGBgDQoNCg0KDQojIyBDMi4gQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiBwb3NzaWJsZSBkZSBub3ZlIElOREVMcw0KDQoNCg0KDQojIyMgU2VsZWN0IGluZGVscw0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYgJCBnYXRrIFNlbGVjdFZhcmlhbnRzIC1SICBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtViBTUlI2MjI0LTU4LTU5LTYxLmZ4VGdzLm1kdXAucmVjYWwuY2hybmE0LmpjYWxscy5nZW5vUG9zdGVyaW9ycy52Y2YgLS1zZWxlY3QtdHlwZS10by1pbmNsdWRlIElOREVMIC1PIFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLmdQLnNlbGN0SU5ERUwudmNmDQoNCg0KMTg6MDc6NDkuMzcyIElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCAyMCB0b3RhbCB2YXJpYW50cyBpbiAwLjAgbWludXRlcy4NCg0KDQoNCiMjIyBIYXJkIGZpbHRlciBpbmRlbHMgKGluc3RlYWQgb2YgVmFyaWFudCBSZWNhbGlicmF0aW9uKQ0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYgJCBnYXRrIFZhcmlhbnRGaWx0cmF0aW9uIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1WIFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLmdQLnNlbGN0SU5ERUwudmNmIC1maWx0ZXIgIlFEIDwgMi4wIHx8IEZTID4gMjAwLjAgfHwgUmVhZFBvc1JhbmtTdW0gPCAtMjAuMCIgLS1maWx0ZXItbmFtZSAnQnJvYWQnIC1PIFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLmdQLnNlbGN0SU5ERUwuQnJvYWRGaWx0ZXJlZC52Y2YNCg0KDQoxODoyODozNy4wMzEgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDIwIHRvdGFsIHZhcmlhbnRzIGluIDAuMCBtaW51dGVzLg0KDQoNCiMjIyBBbm5vdGF0ZSBpbmRlbHMgZm9yIHByZXNlbmNlIG9mIHBvc3NpYmxlIERlIE5vdm9zDQoNCiMjIyMgZ2F0ayBWYXJpYW50QW5ub3RhdG9yIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1WIFNSUjYyMjQtNTgtNTktNjEuZnhUZ3MubWR1cC5yZWNhbC5jaHJuYTQuamNhbGxzLmdQLnNlbGN0SU5ERUwudmNmIC1BIFBvc3NpYmxlRGVOb3ZvIC1wZWQgTkExMjgtNzgtOTEtOTIucGVkIC1PIFNSUjYyMjQtNTgtNTktNjEuY2hybmE0LlBvc3NpYmxlRGVOb3ZvSU5ERUwudmNmDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmICQgY2F0IFNSUjYyMjQtNTgtNTktNjEuY2hybmE0LlBvc3NpYmxlRGVOb3ZvSU5ERUwudmNmIHwgZ3JlcCAiRGVOb3ZvIg0KDQpgYGANCiMjSU5GTz08SUQ9aGlDb25mRGVOb3ZvLE51bWJlcj0xLFR5cGU9U3RyaW5nLERlc2NyaXB0aW9uPSJIaWdoIGNvbmZpZGVuY2UgcG9zc2libGUgZGUgbm92byBtdXRhdGlvbiAoR1EgPj0gMjAgZm9yIGFsbCB0cmlvIG1lbWJlcnMpPVtjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBjaGlsZCBzYW1wbGVzXSI+DQoNCiMjSU5GTz08SUQ9bG9Db25mRGVOb3ZvLE51bWJlcj0xLFR5cGU9U3RyaW5nLERlc2NyaXB0aW9uPSJMb3cgY29uZmlkZW5jZSBwb3NzaWJsZSBkZSBub3ZvIG11dGF0aW9uIChHUSA+PSAxMCBmb3IgY2hpbGQsIEdRID4gMCBmb3IgcGFyZW50cyk9W2NvbW1hLWRlbGltaXRlZCBsaXN0IG9mIGNoaWxkIHNhbXBsZXNdIj4NCg0KYGBgDQoNCg0KDQojIEQuIFZhcmlhbnQgYW5ub3RhdGlvbg0KDQoNCiMjIEQxLiBJTkRFTCBhbm5vdGF0aW9uIGFuZCB0YWJ1bGF0aW9uDQoNCg0KDQojIyMgQW5ub3RhdGUgdmFyaWFudHMgdXNpbmcgZGJzbnAgdmFyaWFudHMNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYgJCBiY2Z0b29scyBhbm5vdGF0ZSAtYyBJRCAtT3ogLWEgZGJzbnAxMzgudmNmLmd6IFNSUjYyMjQtNTgtNTktNjEuY2hybmE0LklOREVMLnZjZi5neiAtbyBTUlI2MjI0LTU4LTU5LTYxLmNocm5hNC5JTkRFTC5hbm5vdC52Y2YuZ3oNCg0KDQoNCiMjIyBNYWtlIGEgdGFibGUgb2YgdmFyaWFudHMgKHdpdGggc2VsZWN0ZWQgcGFyYW1ldGVycykNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYgJCBnYXRrIFZhcmlhbnRzVG9UYWJsZSAtViBTUlI2MjI0LTU4LTU5LTYxLmNocm5hNC5JTkRFTC5hbm5vdC52Y2YuZ3ogLUYgQ0hST00gLUYgUE9TIC1GIElEIC1GIFJFRiAtRiBBTFQgLUYgVFlQRSAtTyBTUlI2MjI0LTU4LTU5LTYxLmNocm5hNC5JTkRFTC5hbm5vdFdvR0YudGFibGUNCg0KMDA6MjA6NDQuNDc5IFdBUk4gIFZhcmlhbnRzVG9UYWJsZSAtIEFsbGVsZS1zcGVjaWZpYyBmaWVsZHMgd2lsbCBvbmx5IGJlIHNwbGl0IGlmIHNwbGl0dGluZyBtdWx0aS1hbGxlbGljIHZhcmlhbnRzIGlzIHNwZWNpZmllZCAoYC0tc3BsaXQtbXVsdGktDQphbGxlbGljYCBvciBgLVNNQWANCg0KLi4uLi4uLi4uLi4uLg0KDQowMDoyMDo0NC41MTUgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDIwIHRvdGFsIHZhcmlhbnRzIGluIDAuMCBtaW51dGVzLg0KLi4uLi4uLi4uLi4uLi4NCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYgJCBjYXQgU1JSNjIyNC01OC01OS02MS5jaHJuYTQuSU5ERUwuYW5ub3RXb0dGLnRhYmxlIA0KDQpgYGANCkNIUk9NICAgUE9TICAgICAgICAgICAgIElEICAgICAgICAgICAgICBSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFlQRQ0KY2hyMjAgICA2MzM0NDQ3NyAgICAgICAgcnMxMTQ4MDQ3OCAgICAgIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM0NDQ5NCAgICAgICAgcnMxMTQ4MDQ3OSAgICAgIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1Mzk2MSAgICAgICAgLiAgICAgICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dHVENDVEdHR0dHR1RDVEdUICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1Njk5MiAgICAgICAgcnM3MTE5NzQwOSAgICAgIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dBQ0NBQ0FUQ0dDQ0FURyAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1NzE1NSAgICAgICAgcnMxNDc2NDE5OTkgICAgIEdUQ1RDQ0FDQUdHQUNDQUNBVFRDQ0NBQ0FHR0FDQ0FDQUFDQ0NBQ0FHR0FDQ0FDQSAgRyAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1NzI4OCAgICAgICAgcnMzNzc2ODE3NTAgICAgIEFDQUdHQUNDVENBVENDQ0NUICAgICAgICAgICAgICAgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1NzY2NCAgICAgICAgcnMzODM4MDA5ICAgICAgIENHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1ODk0NiAgICAgICAgcnMxMTQ4MzA2NSAgICAgIFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1OTAyMiAgICAgICAgcnM1OTMyMDYwMSAgICAgIENUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1OTA0NSAgICAgICAgcnMxMTQ3MjgzMyAgICAgIEcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0dBICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1OTA1MSAgICAgICAgcnMxMTQ3ODY2NCAgICAgIEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1OTg2NiAgICAgICAgcnM2NzUyODI4NSAgICAgIEdDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1OTg4NCAgICAgICAgcnMxMTQ3MjY5NyAgICAgIFQgICAgICAgVEdDR0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM1OTkwMyAgICAgICAgLiAgICAgICAgICAgICAgIEcgICAgICAgR1RHVEdUR1RHVEdDQ0dHR0NHVEdDR0MsR1RHVEdUR1RHVEdUR1RHQ0NHR0dDR1RHQ0dDICAgICBJTkRFTA0KY2hyMjAgICA2MzM1OTkwNSAgICAgICAgLiAgICAgICAgICAgICAgIEcgICAgICAgR1RHVEdUR1RHVEdUR0NDR0dHQ0dUR0NHQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM2MTQzMSAgICAgICAgLiAgICAgICAgICAgICAgIEcgICAgICAgR0dHQUdHR0dHQUdHQUdHR0dHQUdDQUdUR0dBR0dHR0dHQUdBQUdBR0dBR0dHR0dHQUdHQSAgICBJTkRFTA0KY2hyMjAgICA2MzM2MjMyMCAgICAgICAgcnM1ODQyNDE4ICAgICAgIEcgICAgICAgR0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM2NzE1MSAgICAgICAgcnM2MTMzMDUxNSAgICAgIENUICAgICAgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM2NzE2NCAgICAgICAgcnMzNTYyMTQ2NiAgICAgIFRHICAgICAgVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KY2hyMjAgICA2MzM2OTUwMCAgICAgICAgcnMxNDE4NDA0NjIgICAgIENBRyAgICAgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkRFTA0KDQpgYGANCg0KDQoNCg0KDQoNCg0KDQojIyBEMi4gU05QIGFubm90YXRpb24gYW5kIHRhYnVsYXRpb24NCg0KDQoNCiMjIyBBbm5vdGF0ZSBTTlBzIHVzaW5nIGRiU05QIGRhdGFiYXNlDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmICQgYmNmdG9vbHMgYW5ub3RhdGUgLWMgSUQgLU92IC1hIGRic25wMTM4LnZjZiBTUlI2MjI0LTU4LTU5LTYxLmZ4VGdzLm1kdXAucmVjYWwuY2hybmE0LmpjYWxscy5nUC5zZWxjdFNOUC5Ccm9hZEZpbHRlcmVkLnZjZiA+IFNSUjYyMjQtNTgtNTktNjEuY2hybmE0LmFubm90LnZjZg0KDQoNCiMjIyBNYWtlIGEgdGFibGUgb2YgdGhlIFNOUCBkYXRhICh3aXRoIHNlbGVjdGVkIHBhcmFtYXRlcnMpDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmICQgZ2F0ayBWYXJpYW50c1RvVGFibGUgLVYgU1JSNjIyNC01OC01OS02MS5jaHJuYTQuU05QLmFubm90LnZjZi5neiAtRiBDSFJPTSAtRiBQT1MgLUYgSUQgLUYgUkVGIC1GIEFMVCAtRiBUWVBFIC1HRiBBRCAtTyBTUlI2MjI0LTU4LTU5LTYxLmNocm5hNC5TTlAuYW5ub3QudGFibGUNCg0KLi4uLi4uLi4uLi4uLi4uDQoNCjIzOjQ5OjA5LjEzNSBJTkZPICBQcm9ncmVzc01ldGVyIC0gVHJhdmVyc2FsIGNvbXBsZXRlLiBQcm9jZXNzZWQgOTcgdG90YWwgdmFyaWFudHMgaW4gMC4wIG1pbnV0ZXMuDQoNCi4uLi4uLi4uLi4uLi4uDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmICQgaGVhZCAtbiA5NyBTUlI2MjI0LTU4LTU5LTYxLmNocm5hNC5TTlAuYW5ub3QudGFibGUgDQoNCmBgYA0KQ0hST00gICBQT1MgICAgICAgICAgICAgSUQgICAgICAgICAgICAgIFJFRiAgICAgQUxUICAgICBUWVBFICAgIE5BMTI4NzguQUQgICAgICBOQTEyODkxLkFEICAgICAgTkExMjg5Mi5BRA0KY2hyMjAgICA2MzM0NjIwNCAgICAgICAgcnMyMjM2MTk2ICAgICAgIEcgICAgICAgQSAgICAgICBTTlAgICAgIDAsNiAgICAgICAgICAgICAwLDQ3ICAgICAgICAgICAgMjIsMzMNCmNocjIwICAgNjMzNDcxNzIgICAgICAgIHJzNjA5MDM4MCAgICAgICBUICAgICAgIEMgICAgICAgU05QICAgICAwLDIgICAgICAgICAgICAgMCwxOSAgICAgICAgICAgIDE2LDEwDQpjaHIyMCAgIDYzMzQ3NzQ4ICAgICAgICByczM3ODcxMzcgICAgICAgRyAgICAgICBBICAgICAgIFNOUCAgICAgMSwyICAgICAgICAgICAgIDIyLDAgICAgICAgICAgICAxMywyMQ0KY2hyMjAgICA2MzM0Nzg3MiAgICAgICAgcnMzNzg3MTM4ICAgICAgIEcgICAgICAgQSAgICAgICBTTlAgICAgIDAsNCAgICAgICAgICAgICAxLDI0ICAgICAgICAgICAgMjIsMjYNCmNocjIwICAgNjMzNDgyMDggICAgICAgIHJzNjA2MjQzOSAgICAgICBHICAgICAgIEMgICAgICAgU05QICAgICAwLDIgICAgICAgICAgICAgMCwxNiAgICAgICAgICAgIDE1LDEyDQpjaHIyMCAgIDYzMzQ4MjcxICAgICAgICByczQ1NDg2MzkyICAgICAgVCAgICAgICBDICAgICAgIFNOUCAgICAgNSwwICAgICAgICAgICAgIDI0LDE2ICAgICAgICAgICAzNywwDQpjaHIyMCAgIDYzMzQ4NDQxICAgICAgICByczYwNjI4OTkgICAgICAgRyAgICAgICBBICAgICAgIFNOUCAgICAgMCw2ICAgICAgICAgICAgIDAsMzIgICAgICAgICAgICAxNCwxNw0KY2hyMjAgICA2MzM0ODc3MyAgICAgICAgcnM2MDYyOTAwICAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIDAsNCAgICAgICAgICAgICAwLDI4ICAgICAgICAgICAgMTEsMTYNCmNocjIwICAgNjMzNDg5MDkgICAgICAgIHJzNjA2MjkwMSAgICAgICBHICAgICAgIEEgICAgICAgU05QICAgICBOQSAgICAgICAgICAgICAgMCwyOSAgICAgICAgICAgIDYsOQ0KY2hyMjAgICA2MzM0OTYzOSAgICAgICAgcnMzODI3MDIwICAgICAgIFQgICAgICAgQyAgICAgICBTTlAgICAgIDEsMCAgICAgICAgICAgICAwLDE4ICAgICAgICAgICAgMzAsMA0KY2hyMjAgICA2MzM0OTc1MiAgICAgICAgcnMxMDQ0Mzk3ICAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIE5BICAgICAgICAgICAgICAxOSwwICAgICAgICAgICAgMTAsMTYNCmNocjIwICAgNjMzNDk3ODIgICAgICAgIHJzMTA0NDM5NiAgICAgICBHICAgICAgIEEgICAgICAgU05QICAgICBOQSAgICAgICAgICAgICAgMTksMCAgICAgICAgICAgIDEyLDE4DQpjaHIyMCAgIDYzMzUwMTg0ICAgICAgICByczIyMjk5NjAgICAgICAgQSAgICAgICBHICAgICAgIFNOUCAgICAgMCwxICAgICAgICAgICAgIDAsMzMgICAgICAgICAgICAxNCwxMg0KY2hyMjAgICA2MzM1MDIwMiAgICAgICAgcnMyMjI5OTU5ICAgICAgIEMgICAgICAgQSAgICAgICBTTlAgICAgIDAsMiAgICAgICAgICAgICAwLDM3ICAgICAgICAgICAgMTMsMTMNCmNocjIwICAgNjMzNTA3MzMgICAgICAgIHJzMTA0NDM5NCAgICAgICBBICAgICAgIEcgICAgICAgU05QICAgICAwLDIgICAgICAgICAgICAgMCwzNSAgICAgICAgICAgIDEzLDE4DQpjaHIyMCAgIDYzMzUwNzcyICAgICAgICByczEwNDQzOTMgICAgICAgQSAgICAgICBHICAgICAgIFNOUCAgICAgMCwzICAgICAgICAgICAgIDAsMzMgICAgICAgICAgICAxOCwxNA0KY2hyMjAgICA2MzM1MTM0MCAgICAgICAgcnM2MDExNzcyICAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIDAsNSAgICAgICAgICAgICAwLDQwICAgICAgICAgICAgMjEsMjANCmNocjIwICAgNjMzNTE1MjkgICAgICAgIHJzNDgwOTU0MSAgICAgICBDICAgICAgIFQgICAgICAgU05QICAgICAwLDMgICAgICAgICAgICAgMCwzNyAgICAgICAgICAgIDE0LDE5DQpjaHIyMCAgIDYzMzUxODcxICAgICAgICByczYwOTAzODIgICAgICAgVCAgICAgICBDICAgICAgIFNOUCAgICAgMCwzICAgICAgICAgICAgIDAsMjEgICAgICAgICAgICA5LDE0DQpjaHIyMCAgIDYzMzUxOTU5ICAgICAgICByczQ1NTc3NjM5ICAgICAgRyAgICAgICBBICAgICAgIFNOUCAgICAgMSwyICAgICAgICAgICAgIDAsMjAgICAgICAgICAgICAyMywwDQpjaHIyMCAgIDYzMzUyMTYyICAgICAgICByczYwMTE3NzQgICAgICAgQyAgICAgICBUICAgICAgIFNOUCAgICAgMCwzICAgICAgICAgICAgIDI5LDAgICAgICAgICAgICAxMywxNA0KY2hyMjAgICA2MzM1MjQwNCAgICAgICAgcnM2MDExNzc2ICAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIDAsNSAgICAgICAgICAgICAwLDI0ICAgICAgICAgICAgMTMsNw0KY2hyMjAgICA2MzM1Mjk2NSAgICAgICAgcnM2MDExNzc5ICAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIDAsMSAgICAgICAgICAgICAwLDI3ICAgICAgICAgICAgMTMsMTkNCmNocjIwICAgNjMzNTM2NTYgICAgICAgIHJzMTE0MzAwOTUzICAgICBHICAgICAgIEEgICAgICAgU05QICAgICAxLDAgICAgICAgICAgICAgMSw0ICAgICAgICAgICAgIDksMA0KY2hyMjAgICA2MzM1Mzg3NSAgICAgICAgcnM3NDIxMzIwMiAgICAgIEEgICAgICAgVCAgICAgICBTTlAgICAgIDAsMCAgICAgICAgICAgICAzLDMgICAgICAgICAgICAgNSw0DQpjaHIyMCAgIDYzMzUzODg4ICAgICAgICByczc0MjAxMjcwICAgICAgQyAgICAgICBHICAgICAgIFNOUCAgICAgMSwwICAgICAgICAgICAgIDMsMiAgICAgICAgICAgICA1LDMNCmNocjIwICAgNjMzNTM5MDIgICAgICAgIHJzNzk1MTQ3MjkgICAgICBHICAgICAgIEEgICAgICAgU05QICAgICBOQSAgICAgICAgICAgICAgMSwxICAgICAgICAgICAgIDUsMQ0KY2hyMjAgICA2MzM1Mzk3MSAgICAgICAgcnM3NDE3Nzk5NiAgICAgIEEgICAgICAgRyAgICAgICBTTlAgICAgIE5BICAgICAgICAgICAgICAwLDkgICAgICAgICAgICAgNSw3DQpjaHIyMCAgIDYzMzU0MDA5ICAgICAgICByczc1ODk4MDE0ICAgICAgRyAgICAgICBUICAgICAgIFNOUCAgICAgTkEgICAgICAgICAgICAgIDcsNCAgICAgICAgICAgICAxMywwDQpjaHIyMCAgIDYzMzU2NzA5ICAgICAgICByczIyNzM1MDQgICAgICAgRyAgICAgICBBICAgICAgIFNOUCAgICAgMSwwICAgICAgICAgICAgIDAsMjQgICAgICAgICAgICAxMSwwDQpjaHIyMCAgIDYzMzU3MDMwICAgICAgICByczEzMDM2NDM2ICAgICAgRyAgICAgICBBICAgICAgIFNOUCAgICAgMCwxICAgICAgICAgICAgIDAsNTQgICAgICAgICAgICAxNiwyMg0KY2hyMjAgICA2MzM1NzA0MyAgICAgICAgcnMxMzA0MjA0NyAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIDAsMSAgICAgICAgICAgICAwLDUyICAgICAgICAgICAgMjAsMjQNCmNocjIwICAgNjMzNTcwNDcgICAgICAgIHJzMTMwNDAwMzEgICAgICBBICAgICAgIFQgICAgICAgU05QICAgICAwLDEgICAgICAgICAgICAgMCw1NCAgICAgICAgICAgIDIwLDI3DQpjaHIyMCAgIDYzMzU3MDYxICAgICAgICByczEyNDc5NjgwICAgICAgQSAgICAgICBHICAgICAgIFNOUCAgICAgMCwxICAgICAgICAgICAgIDAsNTIgICAgICAgICAgICAyMiwyMw0KY2hyMjAgICA2MzM1ODE0OSAgICAgICAgcnM2MDEwOTE4ICAgICAgIEEgICAgICAgRyAgICAgICBTTlAgICAgIDAsMyAgICAgICAgICAgICAwLDMwICAgICAgICAgICAgMjEsMTYNCmNocjIwICAgNjMzNTkwMjYgICAgICAgIHJzNjAyMDc1NzEgICAgICBUICAgICAgIEMgICAgICAgU05QICAgICAwLDIgICAgICAgICAgICAgMCwzNyAgICAgICAgICAgIDAsMzENCmNocjIwICAgNjMzNTkwNjggICAgICAgIHJzNjAxMTc4NiAgICAgICBDICAgICAgIEEgICAgICAgU05QICAgICAwLDIgICAgICAgICAgICAgMCwzNyAgICAgICAgICAgIDAsMzUNCmNocjIwICAgNjMzNTkwNjkgICAgICAgIHJzNjAxMTc4NyAgICAgICBUICAgICAgIEMgICAgICAgU05QICAgICAwLDIgICAgICAgICAgICAgMCwzNyAgICAgICAgICAgIDAsMzYNCmNocjIwICAgNjMzNTk1MjIgICAgICAgIHJzNjA5MDM4NCAgICAgICBUICAgICAgIEMgICAgICAgU05QICAgICAwLDEgICAgICAgICAgICAgMCwyNyAgICAgICAgICAgIDEzLDIyDQpjaHIyMCAgIDYzMzU5Nzg5ICAgICAgICByczM4MTgyMDQgICAgICAgRyAgICAgICBBICAgICAgIFNOUCAgICAgTkEgICAgICAgICAgICAgIDAsMjEgICAgICAgICAgICAyNSwwDQpjaHIyMCAgIDYzMzU5ODk1ICAgICAgICByczYwMTE3ODkgICAgICAgVCAgICAgICBDICAgICAgIFNOUCAgICAgMCw0ICAgICAgICAgICAgIDAsMTQgICAgICAgICAgICAxMCw1DQpjaHIyMCAgIDYzMzU5OTQ5ICAgICAgICByczQ1NDU3MTk2ICAgICAgQSAgICAgICBDICAgICAgIFNOUCAgICAgMCwzICAgICAgICAgICAgIDAsMjIgICAgICAgICAgICAxLDI2DQpjaHIyMCAgIDYzMzYwMzY4ICAgICAgICByczYwOTAzODUgICAgICAgQyAgICAgICBBICAgICAgIFNOUCAgICAgMSwzICAgICAgICAgICAgIDI0LDAgICAgICAgICAgICAwLDQwDQpjaHIyMCAgIDYzMzYwNjUzICAgICAgICByczExNjk3NjYyICAgICAgQyAgICAgICBUICAgICAgIFNOUCAgICAgMCwzICAgICAgICAgICAgIDAsMTYgICAgICAgICAgICAwLDMxDQpjaHIyMCAgIDYzMzYwOTMzICAgICAgICByczExNjk4NTYzICAgICAgQSAgICAgICBDICAgICAgIFNOUCAgICAgMSwwICAgICAgICAgICAgIDgsMCAgICAgICAgICAgICAwLDgNCmNocjIwICAgNjMzNjExOTUgICAgICAgIHJzNjA5MDM4NyAgICAgICBHICAgICAgIEMgICAgICAgU05QICAgICBOQSAgICAgICAgICAgICAgMSwyICAgICAgICAgICAgIDAsMw0KY2hyMjAgICA2MzM2MTQ1MyAgICAgICAgcnM1ODEzNDkxNSAgICAgIFQgICAgICAgQSAgICAgICBTTlAgICAgIDAsMSAgICAgICAgICAgICAwLDEzICAgICAgICAgICAgMCwxMg0KY2hyMjAgICA2MzM2MTQ4NiAgICAgICAgcnMxMzA0MzE4NiAgICAgIEEgICAgICAgRyAgICAgICBTTlAgICAgIDIsMSAgICAgICAgICAgICAyMiwwICAgICAgICAgICAgMCwxOQ0KY2hyMjAgICA2MzM2MTU0MiAgICAgICAgcnMxMjYyNDUxMCAgICAgIEcgICAgICAgQSAgICAgICBTTlAgICAgIDAsMSAgICAgICAgICAgICAxNSw3ICAgICAgICAgICAgMTgsMA0KY2hyMjAgICA2MzM2MTg1NCAgICAgICAgcnM2MTIyNDI5ICAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIDEsMiAgICAgICAgICAgICAxNCw5ICAgICAgICAgICAgNDAsMA0KY2hyMjAgICA2MzM2MTg3NSAgICAgICAgcnMxMjYyNTU5NiAgICAgIEEgICAgICAgQyxHICAgICBTTlAgICAgIDAsMCwxICAgICAgICAgICAwLDI3LDAgICAgICAgICAgMCwwLDQyDQpjaHIyMCAgIDYzMzYyMDMzICAgICAgICByczEzMDQ0NTI2ICAgICAgRyAgICAgICBBICAgICAgIFNOUCAgICAgMCwxICAgICAgICAgICAgIDEyLDE1ICAgICAgICAgICAwLDIxDQpjaHIyMCAgIDYzMzYyMjg5ICAgICAgICByczQ1NDc0ODk4ICAgICAgQyAgICAgICBUICAgICAgIFNOUCAgICAgMiwwICAgICAgICAgICAgIDE1LDE2ICAgICAgICAgICAyNiwwDQpjaHIyMCAgIDYzMzYyMzQ5ICAgICAgICByczc1MDI2MyAgICAgICAgVCAgICAgICBDICAgICAgIFNOUCAgICAgMCwyICAgICAgICAgICAgIDAsMzAgICAgICAgICAgICAwLDIyDQpjaHIyMCAgIDYzMzYyMzYxICAgICAgICByczEzMDQwOTU0ICAgICAgQyAgICAgICBHICAgICAgIFNOUCAgICAgMiwwICAgICAgICAgICAgIDgsMTggICAgICAgICAgICAyMiwwDQpjaHIyMCAgIDYzMzYyNDA2ICAgICAgICByczkxMTA0NCAgICAgICAgQyAgICAgICBUICAgICAgIFNOUCAgICAgMCwxICAgICAgICAgICAgIDAsMzUgICAgICAgICAgICAwLDM2DQpjaHIyMCAgIDYzMzYyNDE1ICAgICAgICByczc1MDI2NCAgICAgICAgQyAgICAgICBBLEcgICAgIFNOUCAgICAgMCwwLDIgICAgICAgICAgIDAsMTMsMTggICAgICAgICAwLDAsMzENCmNocjIwICAgNjMzNjI0MzggICAgICAgIHJzNzI2MTY5NiAgICAgICBBICAgICAgIEcgICAgICAgU05QICAgICAyLDAgICAgICAgICAgICAgMTUsMTggICAgICAgICAgIDM5LDANCmNocjIwICAgNjMzNjI1OTAgICAgICAgIHJzMjA5MzEwNyAgICAgICBBICAgICAgIEcgICAgICAgU05QICAgICAyLDAgICAgICAgICAgICAgMTIsMTQgICAgICAgICAgIDAsMjANCmNocjIwICAgNjMzNjI2MDEgICAgICAgIHJzNzI2NzY4OSAgICAgICBHICAgICAgIEMgICAgICAgU05QICAgICAyLDAgICAgICAgICAgICAgMTQsMTUgICAgICAgICAgIDIxLDANCmNocjIwICAgNjMzNjI5MTIgICAgICAgIHJzNzU1MjAzICAgICAgICBHICAgICAgIEEgICAgICAgU05QICAgICAyLDIgICAgICAgICAgICAgNDUsMCAgICAgICAgICAgIDAsNTENCmNocjIwICAgNjMzNjMzMTMgICAgICAgIHJzMzgxMDQ3MSAgICAgICBDICAgICAgIFQgICAgICAgU05QICAgICAzLDUgICAgICAgICAgICAgMzcsMCAgICAgICAgICAgIDAsNDcNCmNocjIwICAgNjMzNjM4NzAgICAgICAgIHJzMTEwODYxNjMgICAgICBHICAgICAgIEMgICAgICAgU05QICAgICA2LDAgICAgICAgICAgICAgMTcsMjMgICAgICAgICAgIDQ3LDANCmNocjIwICAgNjMzNjM5NzAgICAgICAgIHJzNjAxMTc5NCAgICAgICBDICAgICAgIFQgICAgICAgU05QICAgICAwLDEgICAgICAgICAgICAgMCwzMyAgICAgICAgICAgIDAsMTkNCmNocjIwICAgNjMzNjUzNTQgICAgICAgIHJzOTEwODk1ICAgICAgICBBICAgICAgIEcgICAgICAgU05QICAgICAwLDEgICAgICAgICAgICAgMTMsMTQgICAgICAgICAgIDAsMjcNCmNocjIwICAgNjMzNjU1NDkgICAgICAgIHJzNzI2NzkyMyAgICAgICBBICAgICAgIEcgICAgICAgU05QICAgICAyLDYgICAgICAgICAgICAgNDAsMCAgICAgICAgICAgIDAsMzUNCmNocjIwICAgNjMzNjU5MzUgICAgICAgIHJzNjAxMTc5NiAgICAgICBDICAgICAgIFQgICAgICAgU05QICAgICAwLDEgICAgICAgICAgICAgMCwyNiAgICAgICAgICAgIDAsMzcNCmNocjIwICAgNjMzNjYyMDkgICAgICAgIHJzNDk5MDkyMyAgICAgICBBICAgICAgIEcgICAgICAgU05QICAgICBOQSAgICAgICAgICAgICAgMSw1ICAgICAgICAgICAgIDIsMw0KY2hyMjAgICA2MzM2NjIyOSAgICAgICAgcnMyMzE0Njk2ICAgICAgIEEgICAgICAgRyAgICAgICBTTlAgICAgIDAsMSAgICAgICAgICAgICAxLDE1ICAgICAgICAgICAgMCwxOA0KY2hyMjAgICA2MzM2NjU0OSAgICAgICAgcnM2MjIwNjk0OSAgICAgIFQgICAgICAgRyAgICAgICBTTlAgICAgIDUsMCAgICAgICAgICAgICAyMiwyMyAgICAgICAgICAgMzYsMQ0KY2hyMjAgICA2MzM2NjYxNiAgICAgICAgcnMxMTY5NjMzOSAgICAgIEcgICAgICAgQSAgICAgICBTTlAgICAgIDIsMCAgICAgICAgICAgICAxNywyMSAgICAgICAgICAgMCwzOA0KY2hyMjAgICA2MzM2NjczMiAgICAgICAgcnM2MjIwNjk1MCAgICAgIEEgICAgICAgRyAgICAgICBTTlAgICAgIDAsMyAgICAgICAgICAgICAwLDIxICAgICAgICAgICAgMCwzMg0KY2hyMjAgICA2MzM2NjgwMCAgICAgICAgcnM2MjIwNjk1MSAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIDEsMCAgICAgICAgICAgICAxNiwxMyAgICAgICAgICAgMjIsMA0KY2hyMjAgICA2MzM2NjgyMiAgICAgICAgcnM3MjYyOTAyMyAgICAgIEcgICAgICAgVCAgICAgICBTTlAgICAgIDEsMCAgICAgICAgICAgICAxMywxNyAgICAgICAgICAgMjYsMA0KY2hyMjAgICA2MzM2NzA5MSAgICAgICAgcnM2MDYyOTA1ICAgICAgIFQgICAgICAgQyAgICAgICBTTlAgICAgIDAsMiAgICAgICAgICAgICAwLDE3ICAgICAgICAgICAgMCwyNQ0KY2hyMjAgICA2MzM2Nzk1NiAgICAgICAgcnM2MDg5ODk5ICAgICAgIEcgICAgICAgQSAgICAgICBTTlAgICAgIE5BICAgICAgICAgICAgICAyMywwICAgICAgICAgICAgMCwyMQ0KY2hyMjAgICA2MzM2ODMxNyAgICAgICAgcnM0ODA5Mjk1ICAgICAgIFQgICAgICAgQyAgICAgICBTTlAgICAgIE5BICAgICAgICAgICAgICAwLDMwICAgICAgICAgICAgMCwzMg0KY2hyMjAgICA2MzM2ODQxNyAgICAgICAgcnM2MTIyNDMwICAgICAgIEcgICAgICAgQSAgICAgICBTTlAgICAgIDIsMyAgICAgICAgICAgICAxNCwxNyAgICAgICAgICAgMzQsMA0KY2hyMjAgICA2MzM2ODgwMyAgICAgICAgcnM5MTEwNDUgICAgICAgIEEgICAgICAgRyAgICAgICBTTlAgICAgIDAsNSAgICAgICAgICAgICAwLDQ3ICAgICAgICAgICAgMCw0Ng0KY2hyMjAgICA2MzM2ODg1MCAgICAgICAgcnM3MzU1MDEgICAgICAgIFQgICAgICAgQyAgICAgICBTTlAgICAgIDQsMCAgICAgICAgICAgICAyNSwzMCAgICAgICAgICAgNTMsMA0KY2hyMjAgICA2MzM2OTI2MCAgICAgICAgcnM5MTEwNDYgICAgICAgIFQgICAgICAgQyAgICAgICBTTlAgICAgIDAsNiAgICAgICAgICAgICAwLDYxICAgICAgICAgICAgMCw0OA0KY2hyMjAgICA2MzM2OTQ5NiAgICAgICAgcnMxMTA4NjE2NCAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIDEsMCAgICAgICAgICAgICAzMiwzNiAgICAgICAgICAgNTMsMA0KY2hyMjAgICA2MzM3MDA0OSAgICAgICAgLiAgICAgICAgICAgICAgIEcgICAgICAgQSAgICAgICBTTlAgICAgIDMsMCAgICAgICAgICAgICAyNiwwICAgICAgICAgICAgMTIsMTgNCmNocjIwICAgNjMzNzAxNTUgICAgICAgIHJzNjAxMDkxOSAgICAgICBDICAgICAgIEEgICAgICAgU05QICAgICAxLDAgICAgICAgICAgICAgMTEsMjMgICAgICAgICAgIDI4LDANCmNocjIwICAgNjMzNzAxNTYgICAgICAgIHJzNjAxMDkyMCAgICAgICBHICAgICAgIEEgICAgICAgU05QICAgICAxLDAgICAgICAgICAgICAgMTEsMjMgICAgICAgICAgIDI4LDANCmNocjIwICAgNjMzNzAxOTQgICAgICAgIHJzMTEwNzk1MyAgICAgICBDICAgICAgIFQgICAgICAgU05QICAgICBOQSAgICAgICAgICAgICAgMjgsMTkgICAgICAgICAgIDAsMjgNCmNocjIwICAgNjMzNzA3NTcgICAgICAgIHJzNDgwOTU0OSAgICAgICBHICAgICAgIEMgICAgICAgU05QICAgICBOQSAgICAgICAgICAgICAgMTUsMjkgICAgICAgICAgIDAsMzANCmNocjIwICAgNjMzNzIwOTUgICAgICAgIHJzNjAzNjcwOTUgICAgICBBICAgICAgIFQgICAgICAgU05QICAgICBOQSAgICAgICAgICAgICAgMTgsMjMgICAgICAgICAgIDMxLDANCmNocjIwICAgNjMzNzIxNDAgICAgICAgIHJzNTc2MTk4NTMgICAgICBUICAgICAgIEMgICAgICAgU05QICAgICAxLDAgICAgICAgICAgICAgMTcsMjEgICAgICAgICAgIDI4LDANCmNocjIwICAgNjMzNzM1ODcgICAgICAgIHJzMzQ1NTU5NDcgICAgICBHICAgICAgIEEgICAgICAgU05QICAgICAxLDAgICAgICAgICAgICAgMjEsMCAgICAgICAgICAgIDExLDE1DQpjaHIyMCAgIDYzMzczNjM0ICAgICAgICByczM0NjM4Mzc5ICAgICAgQyAgICAgICBBICAgICAgIFNOUCAgICAgMiwwICAgICAgICAgICAgIDI3LDAgICAgICAgICAgICAxNywyMA0KY2hyMjAgICA2MzM3MzY5MyAgICAgICAgcnMzNDY2ODAzNCAgICAgIEMgICAgICAgVCAgICAgICBTTlAgICAgIDIsMCAgICAgICAgICAgICAyNiwwICAgICAgICAgICAgMjIsMjANCmNocjIwICAgNjMzNzQxMDYgICAgICAgIHJzMzUzMTg5MzQgICAgICBHICAgICAgIEMgICAgICAgU05QICAgICBOQSAgICAgICAgICAgICAgMzYsMCAgICAgICAgICAgIDEzLDE2DQpjaHIyMCAgIDYzMzc0Mjg2ICAgICAgICByczYwODk5MDAgICAgICAgQyAgICAgICBHICAgICAgIFNOUCAgICAgNSwwICAgICAgICAgICAgIDM0LDAgICAgICAgICAgICAxOSwxNg0KY2hyMjAgICA2MzM3NDUzNiAgICAgICAgcnM3MjY2ODcyICAgICAgIEcgICAgICAgQSAgICAgICBTTlAgICAgIDMsMCAgICAgICAgICAgICAxNiwxNyAgICAgICAgICAgNTEsMA0KDQpgYGANCg0KDQojIEUuIFByZWRpY3QgdGhlIGVmZmVjdCBvZiB2YXJpYXRpb24gdXNpbmcgRU5TRU1CTCBWYXJpYW50IEVmZmVjdCBQcmVkaWN0b3IgKFZFUCkNCg0KDQpodHRwczovL3VzZWFzdC5lbnNlbWJsLm9yZy9pbmZvL2RvY3MvdG9vbHMvdmVwL2luZGV4Lmh0bWwNCg0KIyMjIFByZXBhcmUgdGhlIHRhYmxlIGZvciBWRVAgbG9hZGluZw0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiAkIGF3ayAne3ByaW50JDEsJDIsIi4iLCQ0LCQ1fScgU1JSNjIyNC01OC01OS02MS5jaHJuYTQuU05QLmFubm90LnRhYmxlID4gU1JSNjIyNC01OC01OS02MS5jaHJuYTQuU05QLmFubm90XzMudGFibGUgDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmICQgaGVhZCBTUlI2MjI0LTU4LTU5LTYxLmNocm5hNC5TTlAuYW5ub3RfMy50YWJsZSANCg0KYGBgDQpDSFJPTSBQT1MgICAgICAgLiBSRUYgICBBTFQNCg0KY2hyMjAgNjMzNDYyMDQgLiBHICAgICAgQQ0KY2hyMjAgNjMzNDcxNzIgLiBUICAgICAgQw0KY2hyMjAgNjMzNDc3NDggLiBHICAgICAgQQ0KY2hyMjAgNjMzNDc4NzIgLiBHICAgICAgQQ0KY2hyMjAgNjMzNDgyMDggLiBHICAgICAgQw0KY2hyMjAgNjMzNDgyNzEgLiBUICAgICAgQw0KY2hyMjAgNjMzNDg0NDEgLiBHICAgICAgQQ0KY2hyMjAgNjMzNDg3NzMgLiBDICAgICAgVA0KY2hyMjAgNjMzNDg5MDkgLiBHICAgICAgQQ0KDQpgYGANCg0KIyMjIENvcHkgYW5kIHBhc3RlIHRoZSBhYm92ZSB2YXJpYW50IGRhdGEgdG8gVkVQIG9yIGxvYWQgYSBwcm9wZXJseSBzdHJ1Y3R1cmVkIFZDRiBmaWxlIGludG8gVkVQDQoNCg0KIyMjIFZFUCBvdXRwdXQgc25pcHBldA0KDQoNCiFbdmVwX291dHB1dF0oOTEtOTItNzgtY2hybmEtc25wLmpwZWcpDQoNCiMjIyBEb3dubG9hZCB0aGUgZGF0YSBmcm9tIHRoZSBWRVAgYnJvd3NlciBhcyBhIHR4dCBvciBvdGhlciBmb3JtYXQgYW5kIGFuYWx5emUgYXMgbmVlZGVkDQoNCg0KYGBge3J9DQpjaHJuYTQuc25wIDwtcmVhZC50YWJsZSgiOTEtOTItNzgtY2hybmEtc25wLnR4dCIpDQpoZWFkKGNocm5hNC5zbnApDQpgYGANCg0KDQoNCmBgYHtyfQ0KY2hybmE0LnNucCA8LXJlYWQudGFibGUoIjkxLTkyLTc4LWNocm5hLXNucC50eHQiKQ0Kc3RyKGNocm5hNC5zbnApDQpgYGANCg0KDQoNCg0KDQoNCg0K