A1. References and resources

We will analyze the exome sequence of an individual (HG02759).

1000_genome_HG02759

1000_genome_HG02759

Machine

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

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

A2. Download analysis datasets (the fastq files)

~/gatk-data-ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR250/ERR250410/ERR250410_1.fastq.gz

Continuing in background, pid 3644.

~/gatk-data-ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR250/ERR250409/ERR250409_2.fastq.gz

Continuing in background, pid 3664.

~/gatk-data-ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR250/ERR250409/ERR250409_1.fastq.gz

Continuing in background, pid 3666.

~/gatk-data-ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR250/ERR250410/ERR250410_2.fastq.gz

Continuing in background, pid 3679.

Directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 2323935206 Apr 25 23:22 ERR250409_1.fastq.gz

-rw-rw-r– 1 b0d2647 b0d2647 2340353386 Apr 25 23:25 ERR250409_2.fastq.gz

-rw-rw-r– 1 b0d2647 b0d2647 2298503669 Apr 25 23:19 ERR250410_1.fastq.gz

-rw-rw-r– 1 b0d2647 b0d2647 2313000285 Apr 25 23:21 ERR250410_2.fastq.gz

A3. Dwonload the refrence and/or genome files (from the GATK resources bundle maintained by Broad Institure in a google bucket)

~/gatk_data_ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.fasta ./

Copying gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.fasta…

~/gatk_data_ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.dict ./

Copying gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.dict…

~/gatk_data_ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.fasta.fai ./

Copying gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.fasta.fai…

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 581712 Apr 20 13:42 Homo_sapiens_assembly38.dict

-rw-rw-r– 1 b0d2647 b0d2647 3249912778 Apr 20 13:44 Homo_sapiens_assembly38.fasta

-rw-rw-r– 1 b0d2647 b0d2647 160928 Apr 20 16:47 Homo_sapiens_assembly38.fasta.fai

A4. Make a BWA index of the human genome

~/gatk_data_ref$ bwa index -a bwtsw Homo_sapiens_assembly38.fasta

[bwa_index] Pack FASTA… 30.70 sec

[bwa_index] Construct BWT for the packed sequence…

[BWTIncCreate] textLength=6434693834, availableWord=464768632

[BWTIncConstructFromPacked] 10 iterations done. 99999994 characters processed.

………….

[BWTIncConstructFromPacked] 710 iterations done. 6432978554 characters processed.

[bwt_gen] Finished constructing BWT in 711 iterations.

[bwa_index] 4734.94 seconds elapse.

[bwa_index] Update BWT… 23.36 sec

[bwa_index] Pack forward-only FASTA… 22.12 sec

[bwa_index] Construct SA from BWT and Occ… 2665.77 sec

[main] Version: 0.7.17-r1188

[main] CMD: bwa index -a bwtsw Homo_sapiens_assembly38.fasta

[main] Real time: 7558.780 sec; CPU: 7476.896 sec

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 487553 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.alt

-rw-rw-r– 1 b0d2647 b0d2647 20199 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.amb

-rw-rw-r– 1 b0d2647 b0d2647 455474 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.ann

-rw-rw-r– 1 b0d2647 b0d2647 3217347004 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.bwt

-rw-rw-r– 1 b0d2647 b0d2647 804336731 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.pac

-rw-rw-r– 1 b0d2647 b0d2647 1608673512 Apr 21 22:50 Homo_sapiens_assembly38.fasta.64.sa

A5. Align the 1st pair of sequences to the reference genome using Burrows-Wheeler Aligner (BWA)

Note: It is important to assign read groups (RG) to the sequences

~/gatk-data-ref$ bwa mem -M -t 24 -R ‘@RG:ERR250409:Z:illumina:FCC1HA8ACXX:HG02759’ Homo_sapiens_assembly38.fasta ERR250409_1.fastq.gz ERR250409_2.fastq.gz | samtools view -Sbh | samtools sort -o ERR250409_1.bam - && samtools index ERR250409_1.bam && samtools flagstat ERR250409_1.bam

[main] Version: 0.7.17-r1188

………..

[main] Real time: 1838.639 sec; CPU: 13638.797 sec

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

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

69375 + 0 secondary

146811 + 0 supplementary

0 + 0 duplicates

50698147 + 0 mapped (99.78% : N/A)

50595158 + 0 paired in sequencing

25297579 + 0 read1

25297579 + 0 read2

49957046 + 0 properly paired (98.74% : N/A)

50369978 + 0 with itself and mate mapped

111983 + 0 singletons (0.22% : N/A)

264496 + 0 with mate mapped to a different chr

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

A6. Validate the BAM file

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

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

………………

INFO 2019-04-26 20:42:47 SamFileValidator Validated Read 10,000,000 records. Elapsed time: 00:03:10s. Time for last 10,000,000: 188s. Last read position: chr3:46,464,846

………………….

INFO 2019-04-26 20:55:16 SamFileValidator Validated Read 50,000,000 records. Elapsed time: 00:15:39s. Time for last 10,000,000: 191s. Last read position: chrX:136,689,677

[Fri Apr 26 20:57:28 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 17.89 minutes.

Tool returned: 3

~/gatk-data-ref$ cat summary_ERR250409_1

## HISTOGRAM    java.lang.String

Error Type      Count

ERROR:INVALID_TAG_NM    126

A7. Mark duplicates

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

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

…………….

INFO 2019-04-26 22:52:41 MarkDuplicates Reading input file and constructing read end information.

INFO 2019-04-26 22:52:41 MarkDuplicates Will retain up to 27158498 data points before spilling to disk.

WARNING 2019-04-26 22:52:41 AbstractOpticalDuplicateFinderCommandLineProgram A field field parsed out of a read name was expected to contain an integ er and did not. Read name: ERR250409.2131079. Cause: String ‘ERR250409.2131079’ did not start with a parsable number.

INFO 2019-04-26 22:52:49 MarkDuplicates Read 1,000,000 records. Elapsed time: 00:00:07s. Time for last 1,000,000: 7s. Last read position: chr1 :32,684,321

……………..

A8. Fix the error using samtools calmd

~/gatk-data-ref$ samtools calmd -bAr ERR250409_1.mdup.bam Homo_sapiens_assembly38.fasta > ERR250409_1.mdup.calmd.bam

………….

[bam_fillmd1] different MD for read ‘ERR250409.7315962’: ‘29G3G4G0A28’ -> ‘29G3G4G0A27N0’

[bam_fillmd1] different NM for read ‘ERR250409.919291’: 7 -> 8

[bam_fillmd1] different MD for read ‘ERR250409.919291’: ‘24G0G11A8G19’ -> ‘24G0G11A8G18N0’

A9. Again validate the bam file

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I ERR250409_1.mdup.calmd.bam -M SUMMARY -O summary_ERR250409_1.mdup.calmd

A10. Index the error-fixed BAM file

~/gatk-data-ref$ samtools index ERR250409_1.mdup.calmd.bam

A11. Run gatk HaplotypeCaller

~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I ERR250409_1.mdup.calmd.bam -L chr20:15,800,000-16,100,000 -O ERR250409_1.mdup.calmd.vcf

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

………

              11 read(s) filtered by: (((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter)
              
                  5 read(s) filtered by: ((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter)
                  
                      5 read(s) filtered by: (MappingQualityReadFilter AND MappingQualityAvailableReadFilter)
                      
                          5 read(s) filtered by: MappingQualityReadFilter 
                          
                  6 read(s) filtered by: NotSecondaryAlignmentReadFilter 
                  
              291 read(s) filtered by: NotDuplicateReadFilter 
              

00:10:27.058 INFO ProgressMeter - chr20:16097167 0.0 1019 67039.5

00:10:27.058 INFO ProgressMeter - Traversal complete. Processed 1019 total regions in 0.0 minutes.

A12. Generare short variant (i.e., SNPs and indels) statistics

~/gatk-data-ref$ bcftools stats ERR250409_1.mdup.calmd.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.

................


# SN    [2]id   [3]key                                  [4]value

SN      0       number of samples:                      1

SN      0       number of records:                      6

SN      0       number of no-ALTs:                      0

SN      0       number of SNPs:                         6

SN      0       number of MNPs:                         0

SN      0       number of indels:                       0

SN      0       number of others:                       0

SN      0       number of multiallelic sites:           0

SN      0       number of multiallelic SNP sites:       0 

A13. Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 4098346475 Apr 26 20:28 ERR250409_1.bam

-rw-rw-r– 1 b0d2647 b0d2647 4863928 Apr 26 20:30 ERR250409_1.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 3388 Apr 26 23:03 ERR250409_1.dupMetrics.txt

-rw-rw-r– 1 b0d2647 b0d2647 4473831499 Apr 26 23:45 ERR250409_1.mdup.calmd.bam

-rw-rw-r– 1 b0d2647 b0d2647 4924784 Apr 27 00:06 ERR250409_1.mdup.calmd.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 176201 Apr 27 00:10 ERR250409_1.mdup.calmd.vcf

-rw-rw-r– 1 b0d2647 b0d2647 114173 Apr 27 00:10 ERR250409_1.mdup.calmd.vcf.idx

-rw-rw-r– 1 b0d2647 b0d2647 75 Apr 26 20:57 summary_ERR250409_1

-rw-rw-r– 1 b0d2647 b0d2647 16 Apr 26 23:52 summary_ERR250409_1_mdup_calmd

ALIGN AND ANALYZE THE 2ND PAIR OF FASTQ SEQUENCES

B1. Align the 2nd pair of fastq sequences to the reference genome using BWA

Fastq file contents

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

@ERR250410.1 FCC1HA8ACXX:5:1101:1137:1984/1

NTGTAAGTTTTTCTAGGTTATACCACTTTCCAGTGATGACACTTTTTATATTTTGTTATATTTTACTTTAATTGAAGCAAAGTGTGTTTATTCAATCCAG

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

@ERR250410.1 FCC1HA8ACXX:5:1101:1137:1984/2

GGCGATAAGAATTCCTTTCTGCCTCCTTGGCTAGAGTTGACACCTAAAAACAAAGAACACTGGATTGAATAAACACACTTTGCTTCAATTAAAGTAAAAN

~/gatk-data-ref$ bwa mem -M -t 24 -R ‘@RG:ERR250410:Z:illumina:FCC1HA8ACXX:HG02759’ Homo_sapiens_assembly38.fasta ERR250410_1.fastq.gz ERR250410_2.fastq.gz | samtools view -Sbh | samtools sort -o ERR250410_1.bam - && samtools index ERR250410_1.bam && samtools flagstat ERR250410_1.bam

[main] Version: 0.7.17-r1188

[main] Real time: 749.341 sec; CPU: 11054.613 sec

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

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

66906 + 0 secondary

145409 + 0 supplementary

0 + 0 duplicates

50129724 + 0 mapped (99.79% : N/A)

50024206 + 0 paired in sequencing

25012103 + 0 read1

25012103 + 0 read2

49407778 + 0 properly paired (98.77% : N/A)

49811632 + 0 with itself and mate mapped

105777 + 0 singletons (0.21% : N/A)

258056 + 0 with mate mapped to a different chr

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

B2. Validate the BAM file

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

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

………………………

INFO 2019-04-27 23:33:34 SamFileValidator Validated Read 10,000,000 records. Elapsed time: 00:01:35s. Time for last 10,000,000: 94s. Last read position: chr3:48,974,785

…………………………

INFO 2019-04-27 23:39:56 SamFileValidator Validated Read 50,000,000 records. Elapsed time: 00:07:57s. Time for last 10,000,000: 98s. Last read position: chrUn_GL000224v1:55,172

[Sat Apr 27 23:40:56 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 8.98 minutes.

……………..

~/gatk-data-ref$ cat summary_ERR250410_1

## HISTOGRAM            java.lang.String

Error Type              Count

ERROR:INVALID_TAG_NM    107

B3. Fix the error

~/gatk-data-ref$ samtools calmd -bAr ERR250410_1.bam Homo_sapiens_assembly38.fasta > ERR250410_1.calmd.bam

…………….

[bam_fillmd1] different MD for read ‘ERR250410.1310767’: ‘99G0’ -> ‘99N0’

[bam_fillmd1] different NM for read ‘ERR250410.22770451’: 3 -> 4

[bam_fillmd1] different MD for read ‘ERR250410.22770451’: ‘34T29T1A19’ -> ‘34T29T1A18N0’

B4. Validate again after the fix

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I ERR250410_1.calmd.bam -M SUMMARY -O summary_ERR250410_1_calmd

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

……….

INFO 2019-04-28 00:45:36 SamFileValidator Validated Read 50,000,000 records. Elapsed time: 00:05:51s. Time for last 10,000,000: 70s. Last read position: chrUn_GL000224v1:55,172

[Sun Apr 28 00:45:39 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 5.91 minutes.

….

Tool returned: 0

~/gatk-data-ref$ cat summary_ERR250410_1_calmd

No errors found

B5. Mark Duplicates on the error-fixed bam file

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

…………

INFO 2019-04-28 02:28:18 SortingCollection Creating merging iterator from 2 files

………………

INFO 2019-04-28 02:28:33 MarkDuplicates Marking 6017225 records as duplicates.

INFO 2019-04-28 02:28:33 MarkDuplicates Found 0 optical duplicate clusters.

INFO 2019-04-28 02:28:33 MarkDuplicates Reads are assumed to be ordered by: coordinate

INFO 2019-04-28 02:29:16 MarkDuplicates Written 10,000,000 records. Elapsed time: 00:00:42s. Time for last 10,000,000: 42s. Last read position: chr3:48,974,785

……………………..

INFO 2019-04-28 02:32:13 MarkDuplicates Written 50,000,000 records. Elapsed time: 00:03:39s. Time for last 10,000,000: 45s. Last read position: chrUn_GL000224v1:55,172

[Sun Apr 28 02:32:15 UTC 2019] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 11.17 minutes.

B6. Index the BAM file

samtools index ERR250410_1.calmd.mdup.bam

B7. Run gatk HaplotypeCaller

~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I ERR250410_1.calmd.mdup.bam -L chr20:15,800,000-16,100,000 -O ERR250410_1.calmd.mdup.vcf

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

………………..

02:43:51.330 INFO HaplotypeCaller -

239 read(s) filtered by: ((((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)

  239 read(s) filtered by: (((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND GoodCigarReadFilter)
      
      239 read(s) filtered by: ((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter)
          
          239 read(s) filtered by: (((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter)
              
              239 read(s) filtered by: ((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter)
                  
                  14 read(s) filtered by: (((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter)
                      
                      10 read(s) filtered by: ((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter)
                          
                          10 read(s) filtered by: (MappingQualityReadFilter AND MappingQualityAvailableReadFilter)
                              
                              10 read(s) filtered by: MappingQualityReadFilter 
                              
                      4 read(s) filtered by: NotSecondaryAlignmentReadFilter 
                      
                  225 read(s) filtered by: NotDuplicateReadFilter

02:43:51.330 INFO ProgressMeter - chr20:16097434 0.0 1018 66103.9

02:43:51.331 INFO ProgressMeter - Traversal complete. Processed 1018 total regions in 0.0 minutes.

…………

B8. Report the short varinats (SNPs and indels)

~/gatk-data-ref$ bcftools stats ERR250410_1.calmd.mdup.vcf


# 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  ERR250410_1.calmd.mdup.vcf

............

# SN    [2]id   [3]key                                  [4]value
SN      0       number of samples:                      1
SN      0       number of records:                      3
SN      0       number of no-ALTs:                      0
SN      0       number of SNPs:                         3
SN      0       number of MNPs:                         0
SN      0       number of indels:                       0
SN      0       number of others:                       0
SN      0       number of multiallelic sites:           0
SN      0       number of multiallelic SNP sites:       0

B9. Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 4051442816 Apr 27 23:25 ERR250410_1.bam

-rw-rw-r– 1 b0d2647 b0d2647 4857904 Apr 27 23:25 ERR250410_1.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 4375560628 Apr 28 00:36 ERR250410_1.calmd.bam

-rw-rw-r– 1 b0d2647 b0d2647 3405 Apr 28 02:32 ERR250410_1.calmd.dupMetrics.txt

-rw-rw-r– 1 b0d2647 b0d2647 5961522938 Apr 28 02:32 ERR250410_1.calmd.mdup.bam

-rw-rw-r– 1 b0d2647 b0d2647 5031664 Apr 28 02:37 ERR250410_1.calmd.mdup.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 175663 Apr 28 02:43 ERR250410_1.calmd.mdup.vcf

-rw-rw-r– 1 b0d2647 b0d2647 114173 Apr 28 02:43 ERR250410_1.calmd.mdup.vcf.idx

-rw-rw-r– 1 b0d2647 b0d2647 75 Apr 27 23:40 summary_ERR250410_1

-rw-rw-r– 1 b0d2647 b0d2647 16 Apr 28 00:45 summary_ERR250410_1_calmd

Combine both bam files and analyze for short variant discovery

C1. Merge the BAM files

~/gatk-data-ref$ gatk MergeSamFiles -I ERR250409_1.mdup.calmd.bam -I ERR250410_1.calmd.bam -O ERR25040910.calmd.bam

…………

INFO 2019-04-28 01:22:30 MergeSamFiles Processed 101,000,000 records. Elapsed time: 00:06:38s. Time for last 1,000,000: 5s. Last read position: chrUn_JTFH01000017v1_decoy:2,507

INFO 2019-04-28 01:22:31 MergeSamFiles Finished reading inputs.

[Sun Apr 28 01:22:31 UTC 2019] picard.sam.MergeSamFiles done. Elapsed time: 6.66 minutes.

C2. Mark duplicates

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

INFO 2019-04-28 01:46:43 MarkDuplicates Read 101045631 records. 0 pairs never matched.

……………..

INFO 2019-04-28 01:47:17 MarkDuplicates Will retain up to 236666880 duplicate indices before spilling to disk.

…………..

INFO 2019-04-28 01:47:18 SortingCollection Creating merging iterator from 2 files

……………….

INFO 2019-04-28 01:47:40 SortingCollection Creating merging iterator from 4 files

………….

INFO 2019-04-28 01:48:11 MarkDuplicates Marking 22068400 records as duplicates.

INFO 2019-04-28 01:48:11 MarkDuplicates Found 0 optical duplicate clusters.

INFO 2019-04-28 01:48:11 MarkDuplicates Reads are assumed to be ordered by: coordinate

INFO 2019-04-28 01:48:53 MarkDuplicates Written 10,000,000 records. Elapsed time: 00:00:41s. Time for last 10,000,000: 41s. Last read position: chr1:236,548,265

………………….

INFO 2019-04-28 01:55:18 MarkDuplicates Written 100,000,000 records. Elapsed time: 00:07:06s. Time for last 10,000,000: 43s. Last read position: chrY:12,915,859

………..

C3. Validate the BAM file again after merging and marking duplicates

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I ERR25040910.calmd.mdup.bam -M SUMMARY -O summary_ERR25040910.calmd.mdup

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

……………….

Tool returned:0

~/gatk-data-ref$ cat summary_ERR25040910.calmd.mdup

No errors found

C4. Index the bam file

~/gatk-data-ref$ samtools index ERR25040910.calmd.mdup.bam

C5. Run Haplotypecaller

~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I ERR25040910.calmd.mdup.bam -L chr20:15,800,000-16,100,000 -O ERR25040910.calmd.mdup.vcf

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

02:35:08.952 INFO HaplotypeCaller -

962 read(s) filtered by: ((((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)
  
  962 read(s) filtered by: (((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSe  condaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND GoodCigarReadFilter)
      
      962 read(s) filtered by: ((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter)
          
          962 read(s) filtered by: (((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter)
              
              962 read(s) filtered by: ((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter)AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter)
                  
                  25 read(s) filtered by: (((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter)


                      15 read(s) filtered by: ((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter)
                      
                          15 read(s) filtered by: (MappingQualityReadFilter AND MappingQualityAvailableReadFilter)
                              
                              15 read(s) filtered by: MappingQualityReadFilter 
                      
                      10 read(s) filtered by: NotSecondaryAlignmentReadFilter 
                  
                  937 read(s) filtered by: NotDuplicateReadFilter 

02:35:08.953 INFO ProgressMeter - chr20:16097734 0.0 1027 48367.3

02:35:08.953 INFO ProgressMeter - Traversal complete. Processed 1027 total regions in 0.0 minutes.

C6. Report short variant (SNPs and indels) statistics

~/gatk-data-ref$ bcftools stats ERR25040910.calmd.mdup.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.


....................


# SN    [2]id   [3]key                                  [4]value

SN      0       number of samples:                      1

SN      0       number of records:                      8

SN      0       number of no-ALTs:                      0

SN      0       number of SNPs:                         8

SN      0       number of MNPs:                         0

SN      0       number of indels:                       0

SN      0       number of others:                       0

SN      0       number of multiallelic sites:           0

SN      0       number of multiallelic SNP sites:       0

C7. Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 11820454094 Apr 28 01:22 ERR25040910.calmd.bam

-rw-rw-r– 1 b0d2647 b0d2647 3431 Apr 28 01:55 ERR25040910.calmd.dupMetrics.txt

-rw-rw-r– 1 b0d2647 b0d2647 176651 Apr 28 02:35 ERR25040910.calmd.mdup.vcf

-rw-rw-r– 1 b0d2647 b0d2647 114173 Apr 28 02:35 ERR25040910.calmd.mdup.vcf.idx

-rw-rw-r– 1 b0d2647 b0d2647 0 Apr 28 02:30 summary_ERR25040910.calmd.mdup

LS0tDQp0aXRsZTogIkFuYWx5c2lzIG9mIHdob2xlIGV4b21lIG9mIGFuIGluZGl2aWR1YWwgKEhHMDI3NTkpIGZyb20gdGhlIDEwMDAgZ2Vub21lIHByb2plY3QiDQphdXRob3I6ICJCaGFnaXJhdGhpIERhc2giDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCiMjIEExLiBSZWZlcmVuY2VzIGFuZCByZXNvdXJjZXMNCg0KIyMjIyBXZSB3aWxsIGFuYWx5emUgdGhlIGV4b21lIHNlcXVlbmNlIG9mIGFuIGluZGl2aWR1YWwgKEhHMDI3NTkpLg0KDQohWzEwMDBfZ2Vub21lX0hHMDI3NTldKGhnMDI3NTlleG9tZS5qcGVnKQ0KDQoNCg0KIyMjIyBNYWNoaW5lDQoNCkdvb2dsZSBDbG91ZCBQbGF0Zm9ybSAoR0NQKSwgNCB2Q1BVcywgMTUgR0INCiANCkdvb2dsZSBDbG91ZCBQbGF0Zm9ybSAoR0NQKSwgMjQgdkNQVXMsIDMyIEdCDQoNCg0KIyMgQTIuIERvd25sb2FkIGFuYWx5c2lzIGRhdGFzZXRzICh0aGUgZmFzdHEgZmlsZXMpDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHdnZXQgLWJxYyBmdHA6Ly9mdHAuc3JhLmViaS5hYy51ay92b2wxL2Zhc3RxL0VSUjI1MC9FUlIyNTA0MTAvRVJSMjUwNDEwXzEuZmFzdHEuZ3oNCkNvbnRpbnVpbmcgaW4gYmFja2dyb3VuZCwgcGlkIDM2NDQuDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9FUlIyNTAvRVJSMjUwNDA5L0VSUjI1MDQwOV8yLmZhc3RxLmd6DQpDb250aW51aW5nIGluIGJhY2tncm91bmQsIHBpZCAzNjY0Lg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgd2dldCAtYnFjIGZ0cDovL2Z0cC5zcmEuZWJpLmFjLnVrL3ZvbDEvZmFzdHEvRVJSMjUwL0VSUjI1MDQwOS9FUlIyNTA0MDlfMS5mYXN0cS5neg0KQ29udGludWluZyBpbiBiYWNrZ3JvdW5kLCBwaWQgMzY2Ni4NCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHdnZXQgLWJxYyBmdHA6Ly9mdHAuc3JhLmViaS5hYy51ay92b2wxL2Zhc3RxL0VSUjI1MC9FUlIyNTA0MTAvRVJSMjUwNDEwXzIuZmFzdHEuZ3oNCkNvbnRpbnVpbmcgaW4gYmFja2dyb3VuZCwgcGlkIDM2NzkuDQoNCg0KIyMjIERpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgMjMyMzkzNTIwNiBBcHIgMjUgMjM6MjIgRVJSMjUwNDA5XzEuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgMjM0MDM1MzM4NiBBcHIgMjUgMjM6MjUgRVJSMjUwNDA5XzIuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgMjI5ODUwMzY2OSBBcHIgMjUgMjM6MTkgRVJSMjUwNDEwXzEuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgMjMxMzAwMDI4NSBBcHIgMjUgMjM6MjEgRVJSMjUwNDEwXzIuZmFzdHEuZ3oNCg0KDQoNCiMjIEEzLiBEd29ubG9hZCB0aGUgcmVmcmVuY2UgYW5kL29yIGdlbm9tZSBmaWxlcyAoZnJvbSB0aGUgR0FUSyByZXNvdXJjZXMgYnVuZGxlIG1haW50YWluZWQgYnkgQnJvYWQgSW5zdGl0dXJlIGluIGEgZ29vZ2xlIGJ1Y2tldCkNCg0KDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmJCBnc3V0aWwgY3AgZ3M6Ly9nZW5vbWljcy1wdWJsaWMtZGF0YS9yZXNvdXJjZXMvYnJvYWQvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAuLw0KDQpDb3B5aW5nIGdzOi8vZ2Vub21pY3MtcHVibGljLWRhdGEvcmVzb3VyY2VzL2Jyb2FkL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuLi4NCg0KDQojIyMjIH4vZ2F0a19kYXRhX3JlZiQgZ3N1dGlsIGNwIGdzOi8vZ2Vub21pY3MtcHVibGljLWRhdGEvcmVzb3VyY2VzL2Jyb2FkL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZGljdCAuLw0KDQpDb3B5aW5nIGdzOi8vZ2Vub21pY3MtcHVibGljLWRhdGEvcmVzb3VyY2VzL2Jyb2FkL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZGljdC4uLg0KDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmJCBnc3V0aWwgY3AgZ3M6Ly9nZW5vbWljcy1wdWJsaWMtZGF0YS9yZXNvdXJjZXMvYnJvYWQvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS5mYWkgLi8NCg0KQ29weWluZyBnczovL2dlbm9taWNzLXB1YmxpYy1kYXRhL3Jlc291cmNlcy9icm9hZC9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLmZhaS4uLg0KDQoNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICA1ODE3MTIgQXByIDIwIDEzOjQyIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmRpY3QNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgMzI0OTkxMjc3OCBBcHIgMjAgMTM6NDQgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGENCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDE2MDkyOCBBcHIgMjAgMTY6NDcgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuZmFpDQoNCg0KDQoNCiMjIEE0LiBNYWtlIGEgQldBIGluZGV4IG9mIHRoZSBodW1hbiBnZW5vbWUNCg0KDQojIyMjIH4vZ2F0a19kYXRhX3JlZiQgYndhIGluZGV4IC1hIGJ3dHN3IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhDQoNCg0KW2J3YV9pbmRleF0gUGFjayBGQVNUQS4uLiAzMC43MCBzZWMNCg0KW2J3YV9pbmRleF0gQ29uc3RydWN0IEJXVCBmb3IgdGhlIHBhY2tlZCBzZXF1ZW5jZS4uLg0KDQpbQldUSW5jQ3JlYXRlXSB0ZXh0TGVuZ3RoPTY0MzQ2OTM4MzQsIGF2YWlsYWJsZVdvcmQ9NDY0NzY4NjMyDQoNCltCV1RJbmNDb25zdHJ1Y3RGcm9tUGFja2VkXSAxMCBpdGVyYXRpb25zIGRvbmUuIDk5OTk5OTk0IGNoYXJhY3RlcnMgcHJvY2Vzc2VkLg0KDQoNCi4uLi4uLi4uLi4uLi4NCg0KDQoNCltCV1RJbmNDb25zdHJ1Y3RGcm9tUGFja2VkXSA3MTAgaXRlcmF0aW9ucyBkb25lLiA2NDMyOTc4NTU0IGNoYXJhY3RlcnMgcHJvY2Vzc2VkLg0KDQpbYnd0X2dlbl0gRmluaXNoZWQgY29uc3RydWN0aW5nIEJXVCBpbiA3MTEgaXRlcmF0aW9ucy4NCg0KW2J3YV9pbmRleF0gNDczNC45NCBzZWNvbmRzIGVsYXBzZS4NCg0KW2J3YV9pbmRleF0gVXBkYXRlIEJXVC4uLiAyMy4zNiBzZWMNCg0KW2J3YV9pbmRleF0gUGFjayBmb3J3YXJkLW9ubHkgRkFTVEEuLi4gMjIuMTIgc2VjDQoNCltid2FfaW5kZXhdIENvbnN0cnVjdCBTQSBmcm9tIEJXVCBhbmQgT2NjLi4uIDI2NjUuNzcgc2VjDQoNClttYWluXSBWZXJzaW9uOiAwLjcuMTctcjExODgNCg0KW21haW5dIENNRDogYndhIGluZGV4IC1hIGJ3dHN3IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhDQoNClttYWluXSBSZWFsIHRpbWU6IDc1NTguNzgwIHNlYzsgQ1BVOiA3NDc2Ljg5NiBzZWMNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICA0ODc1NTMgQXByIDIxIDIyOjQ5IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFsdA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDIwMTk5IEFwciAyMSAyMjo0OSBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbWINCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDQ1NTQ3NCBBcHIgMjEgMjI6NDkgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW5uDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgIDMyMTczNDcwMDQgQXByIDIxIDIyOjQ5IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmJ3dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgODA0MzM2NzMxIEFwciAyMSAyMjo0OSBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5wYWMNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgMTYwODY3MzUxMiBBcHIgMjEgMjI6NTAgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuc2ENCg0KDQoNCiMjIEE1LiBBbGlnbiB0aGUgMXN0IHBhaXIgb2Ygc2VxdWVuY2VzIHRvIHRoZSByZWZlcmVuY2UgZ2Vub21lIHVzaW5nIEJ1cnJvd3MtV2hlZWxlciBBbGlnbmVyIChCV0EpDQoNCk5vdGU6IEl0IGlzIGltcG9ydGFudCB0byBhc3NpZ24gcmVhZCBncm91cHMgKFJHKSB0byB0aGUgc2VxdWVuY2VzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGJ3YSBtZW0gLU0gLXQgMjQgLVIgJ0BSR1x0SUQ6RVJSMjUwNDA5XHRMQjpaXHRQTDppbGx1bWluYVx0UFU6RkNDMUhBOEFDWFhcdFNNOkhHMDI3NTknIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIEVSUjI1MDQwOV8xLmZhc3RxLmd6IEVSUjI1MDQwOV8yLmZhc3RxLmd6IHwgc2FtdG9vbHMgdmlldyAtU2JoIHwgc2FtdG9vbHMgc29ydCAtbyBFUlIyNTA0MDlfMS5iYW0gLSAmJiBzYW10b29scyBpbmRleCBFUlIyNTA0MDlfMS5iYW0gJiYgc2FtdG9vbHMgZmxhZ3N0YXQgRVJSMjUwNDA5XzEuYmFtDQoNClttYWluXSBWZXJzaW9uOiAwLjcuMTctcjExODgNCg0KLi4uLi4uLi4uLi4NCg0KW21haW5dIFJlYWwgdGltZTogMTgzOC42Mzkgc2VjOyBDUFU6IDEzNjM4Ljc5NyBzZWMNCg0KW2JhbV9zb3J0X2NvcmVdIG1lcmdpbmcgZnJvbSAxOCBmaWxlcyBhbmQgMSBpbi1tZW1vcnkgYmxvY2tzLi4uDQoNCg0KYGBgDQo1MDgxMTM0NCArIDAgaW4gdG90YWwgKFFDLXBhc3NlZCByZWFkcyArIFFDLWZhaWxlZCByZWFkcykNCg0KNjkzNzUgKyAwIHNlY29uZGFyeQ0KDQoxNDY4MTEgKyAwIHN1cHBsZW1lbnRhcnkNCg0KMCArIDAgZHVwbGljYXRlcw0KDQo1MDY5ODE0NyArIDAgbWFwcGVkICg5OS43OCUgOiBOL0EpDQoNCjUwNTk1MTU4ICsgMCBwYWlyZWQgaW4gc2VxdWVuY2luZw0KDQoyNTI5NzU3OSArIDAgcmVhZDENCg0KMjUyOTc1NzkgKyAwIHJlYWQyDQoNCjQ5OTU3MDQ2ICsgMCBwcm9wZXJseSBwYWlyZWQgKDk4Ljc0JSA6IE4vQSkNCg0KNTAzNjk5NzggKyAwIHdpdGggaXRzZWxmIGFuZCBtYXRlIG1hcHBlZA0KDQoxMTE5ODMgKyAwIHNpbmdsZXRvbnMgKDAuMjIlIDogTi9BKQ0KDQoyNjQ0OTYgKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyDQoNCjE5NzY0NSArIDAgd2l0aCBtYXRlIG1hcHBlZCB0byBhIGRpZmZlcmVudCBjaHIgKG1hcFE+PTUpDQoNCmBgYA0KDQojIyBBNi4gVmFsaWRhdGUgdGhlIEJBTSBmaWxlDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBFUlIyNTA0MDlfMS5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5X0VSUjI1MDQwOV8xDQoNClVzaW5nIEdBVEsgamFyIC9ob21lL2IwZDI2NDcvbWluaWNvbmRhMy9zaGFyZS9nYXRrNC00LjEuMi4wLTAvZ2F0ay1wYWNrYWdlLTQuMS4yLjAtbG9jYWwuamFyDQoNCi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpJTkZPICAgIDIwMTktMDQtMjYgMjA6NDI6NDcgICAgIFNhbUZpbGVWYWxpZGF0b3IgICAgICAgIFZhbGlkYXRlZCBSZWFkICAgIDEwLDAwMCwwMDAgcmVjb3Jkcy4gIEVsYXBzZWQgdGltZTogMDA6MDM6MTBzLiAgVGltZSBmb3IgbGFzdCAxMCwwMDAsMDAwOiAgMTg4cy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyMzo0Niw0NjQsODQ2DQoNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoNCklORk8gICAgMjAxOS0wNC0yNiAyMDo1NToxNiAgICAgU2FtRmlsZVZhbGlkYXRvciAgICAgICAgVmFsaWRhdGVkIFJlYWQgICAgNTAsMDAwLDAwMCByZWNvcmRzLiAgRWxhcHNlZCB0aW1lOiAwMDoxNTozOXMuICBUaW1lIGZvciBsYXN0IDEwLDAwMCwwMDA6ICAxOTFzLiAgTGFzdCByZWFkIHBvc2l0aW9uOiBjaHJYOjEzNiw2ODksNjc3DQoNCg0KW0ZyaSBBcHIgMjYgMjA6NTc6MjggVVRDIDIwMTldIHBpY2FyZC5zYW0uVmFsaWRhdGVTYW1GaWxlIGRvbmUuIEVsYXBzZWQgdGltZTogMTcuODkgbWludXRlcy4NCg0KDQpUb29sIHJldHVybmVkOiAzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGNhdCBzdW1tYXJ5X0VSUjI1MDQwOV8xIA0KDQoNCmBgYA0KIyMgSElTVE9HUkFNICAgIGphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgVHlwZSAgICAgIENvdW50DQoNCkVSUk9SOklOVkFMSURfVEFHX05NICAgIDEyNg0KDQpgYGANCg0KDQojIyBBNy4gTWFyayBkdXBsaWNhdGVzIA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIE1hcmtEdXBsaWNhdGVzIC1JIEVSUjI1MDQwOV8xLmJhbSAtTyBFUlIyNTA0MDlfMS5tZHVwLmJhbSAtTSBFUlIyNTA0MDlfMS5kdXBNZXRyaWNzLnR4dA0KDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQouLi4uLi4uLi4uLi4uLi4uDQoNCg0KSU5GTyAgICAyMDE5LTA0LTI2IDIyOjUyOjQxICAgICBNYXJrRHVwbGljYXRlcyAgUmVhZGluZyBpbnB1dCBmaWxlIGFuZCBjb25zdHJ1Y3RpbmcgcmVhZCBlbmQgaW5mb3JtYXRpb24uDQoNCklORk8gICAgMjAxOS0wNC0yNiAyMjo1Mjo0MSAgICAgTWFya0R1cGxpY2F0ZXMgIFdpbGwgcmV0YWluIHVwIHRvIDI3MTU4NDk4IGRhdGEgcG9pbnRzIGJlZm9yZSBzcGlsbGluZyB0byBkaXNrLg0KDQpXQVJOSU5HIDIwMTktMDQtMjYgMjI6NTI6NDEgICAgIEFic3RyYWN0T3B0aWNhbER1cGxpY2F0ZUZpbmRlckNvbW1hbmRMaW5lUHJvZ3JhbSAgICAgICAgQSBmaWVsZCBmaWVsZCBwYXJzZWQgb3V0IG9mIGEgcmVhZCBuYW1lIHdhcyBleHBlY3RlZCB0byBjb250YWluIGFuIGludGVnDQplciBhbmQgZGlkIG5vdC4gUmVhZCBuYW1lOiBFUlIyNTA0MDkuMjEzMTA3OS4gQ2F1c2U6IFN0cmluZyAnRVJSMjUwNDA5LjIxMzEwNzknIGRpZCBub3Qgc3RhcnQgd2l0aCBhIHBhcnNhYmxlIG51bWJlci4NCg0KSU5GTyAgICAyMDE5LTA0LTI2IDIyOjUyOjQ5ICAgICBNYXJrRHVwbGljYXRlcyAgUmVhZCAgICAgMSwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjAwOjA3cy4gIFRpbWUgZm9yIGxhc3QgMSwwMDAsMDAwOiAgICA3cy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyMQ0KOjMyLDY4NCwzMjENCg0KLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQoNCg0KIyMgQTguIEZpeCB0aGUgZXJyb3IgdXNpbmcgc2FtdG9vbHMgY2FsbWQNCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBjYWxtZCAtYkFyIEVSUjI1MDQwOV8xLm1kdXAuYmFtIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhID4gRVJSMjUwNDA5XzEubWR1cC5jYWxtZC5iYW0NCg0KDQouLi4uLi4uLi4uLi4uDQoNCltiYW1fZmlsbG1kMV0gZGlmZmVyZW50IE1EIGZvciByZWFkICdFUlIyNTA0MDkuNzMxNTk2Mic6ICcyOUczRzRHMEEyOCcgLT4gJzI5RzNHNEcwQTI3TjAnDQoNCltiYW1fZmlsbG1kMV0gZGlmZmVyZW50IE5NIGZvciByZWFkICdFUlIyNTA0MDkuOTE5MjkxJzogNyAtPiA4DQoNCltiYW1fZmlsbG1kMV0gZGlmZmVyZW50IE1EIGZvciByZWFkICdFUlIyNTA0MDkuOTE5MjkxJzogJzI0RzBHMTFBOEcxOScgLT4gJzI0RzBHMTFBOEcxOE4wJw0KDQoNCiMjIEE5LiBBZ2FpbiB2YWxpZGF0ZSB0aGUgYmFtIGZpbGUNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgVmFsaWRhdGVTYW1GaWxlIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIEVSUjI1MDQwOV8xLm1kdXAuY2FsbWQuYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeV9FUlIyNTA0MDlfMS5tZHVwLmNhbG1kDQoNCg0KDQojIyBBMTAuIEluZGV4IHRoZSBlcnJvci1maXhlZCBCQU0gZmlsZQ0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgc2FtdG9vbHMgaW5kZXggRVJSMjUwNDA5XzEubWR1cC5jYWxtZC5iYW0gDQoNCg0KDQojIyBBMTEuIFJ1biBnYXRrIEhhcGxvdHlwZUNhbGxlcg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBIYXBsb3R5cGVDYWxsZXIgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgRVJSMjUwNDA5XzEubWR1cC5jYWxtZC5iYW0gLUwgY2hyMjA6MTUsODAwLDAwMC0xNiwxMDAsMDAwIC1PIEVSUjI1MDQwOV8xLm1kdXAuY2FsbWQudmNmDQoNClVzaW5nIEdBVEsgamFyIC9ob21lL2IwZDI2NDcvbWluaWNvbmRhMy9zaGFyZS9nYXRrNC00LjEuMi4wLTAvZ2F0ay1wYWNrYWdlLTQuMS4yLjAtbG9jYWwuamFyDQoNCg0KLi4uLi4uLi4uDQoNCiAgICAgICAgICAgICAgICAgIDExIHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikgQU5EIE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIpDQogICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICA1IHJlYWQocykgZmlsdGVyZWQgYnk6ICgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICA1IHJlYWQocykgZmlsdGVyZWQgYnk6IChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IHJlYWQocykgZmlsdGVyZWQgYnk6IE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIDYgcmVhZChzKSBmaWx0ZXJlZCBieTogTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDI5MSByZWFkKHMpIGZpbHRlcmVkIGJ5OiBOb3REdXBsaWNhdGVSZWFkRmlsdGVyIA0KICAgICAgICAgICAgICAgICAgDQowMDoxMDoyNy4wNTggSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjIwOjE2MDk3MTY3ICAgICAgICAgICAgICAwLjAgICAgICAgICAgICAgICAgICAxMDE5ICAgICAgICAgIDY3MDM5LjUNCg0KMDA6MTA6MjcuMDU4IElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCAxMDE5IHRvdGFsIHJlZ2lvbnMgaW4gMC4wIG1pbnV0ZXMuDQoNCg0KDQoNCg0KIyMgQTEyLiBHZW5lcmFyZSBzaG9ydCB2YXJpYW50IChpLmUuLCBTTlBzIGFuZCBpbmRlbHMpIHN0YXRpc3RpY3MNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGJjZnRvb2xzIHN0YXRzIEVSUjI1MDQwOV8xLm1kdXAuY2FsbWQudmNmDQoNCmBgYA0KIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IGJjZnRvb2xzIHN0YXRzICgxLjkraHRzbGliLTEuOSkgYW5kIGNhbiBiZSBwbG90dGVkIHVzaW5nIHBsb3QtdmNmc3RhdHMuDQoNCi4uLi4uLi4uLi4uLi4uLi4NCg0KDQojIFNOICAgIFsyXWlkICAgWzNda2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XXZhbHVlDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAgICAgICAgICAgICAgICAgMQ0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgICAgICAgICAgICAgICAgIDYNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBuby1BTFRzOiAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgU05QczogICAgICAgICAgICAgICAgICAgICAgICAgNg0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczogICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAwIA0KDQpgYGANCg0KIyMgQTEzLiBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgIDQwOTgzNDY0NzUgQXByIDI2IDIwOjI4IEVSUjI1MDQwOV8xLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICA0ODYzOTI4IEFwciAyNiAyMDozMCBFUlIyNTA0MDlfMS5iYW0uYmFpDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgIDMzODggQXByIDI2IDIzOjAzIEVSUjI1MDQwOV8xLmR1cE1ldHJpY3MudHh0DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgIDQ0NzM4MzE0OTkgQXByIDI2IDIzOjQ1IEVSUjI1MDQwOV8xLm1kdXAuY2FsbWQuYmFtDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDQ5MjQ3ODQgQXByIDI3IDAwOjA2IEVSUjI1MDQwOV8xLm1kdXAuY2FsbWQuYmFtLmJhaQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgMTc2MjAxIEFwciAyNyAwMDoxMCBFUlIyNTA0MDlfMS5tZHVwLmNhbG1kLnZjZg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgMTE0MTczIEFwciAyNyAwMDoxMCBFUlIyNTA0MDlfMS5tZHVwLmNhbG1kLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgICA3NSBBcHIgMjYgMjA6NTcgc3VtbWFyeV9FUlIyNTA0MDlfMQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICAgIDE2IEFwciAyNiAyMzo1MiBzdW1tYXJ5X0VSUjI1MDQwOV8xX21kdXBfY2FsbWQNCg0KDQoNCiMjIEFMSUdOIEFORCBBTkFMWVpFIFRIRSAyTkQgUEFJUiBPRiBGQVNUUSBTRVFVRU5DRVMNCg0KDQojIyBCMS4gQWxpZ24gdGhlIDJuZCBwYWlyIG9mIGZhc3RxIHNlcXVlbmNlcyB0byB0aGUgcmVmZXJlbmNlIGdlbm9tZSB1c2luZyBCV0ENCg0KDQojIyMgRmFzdHEgZmlsZSBjb250ZW50cw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IEVSUjI1MDQxMF8xLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQoNCkBFUlIyNTA0MTAuMSBGQ0MxSEE4QUNYWDo1OjExMDE6MTEzNzoxOTg0LzENCg0KTlRHVEFBR1RUVFRUQ1RBR0dUVEFUQUNDQUNUVFRDQ0FHVEdBVEdBQ0FDVFRUVFRBVEFUVFRUR1RUQVRBVFRUVEFDVFRUQUFUVEdBQUdDQUFBR1RHVEdUVFRBVFRDQUFUQ0NBRw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IEVSUjI1MDQxMF8yLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQoNCkBFUlIyNTA0MTAuMSBGQ0MxSEE4QUNYWDo1OjExMDE6MTEzNzoxOTg0LzINCg0KR0dDR0FUQUFHQUFUVENDVFRUQ1RHQ0NUQ0NUVEdHQ1RBR0FHVFRHQUNBQ0NUQUFBQUFDQUFBR0FBQ0FDVEdHQVRUR0FBVEFBQUNBQ0FDVFRUR0NUVENBQVRUQUFBR1RBQUFBTg0KDQoNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgYndhIG1lbSAtTSAtdCAyNCAtUiAnQFJHXHRJRDpFUlIyNTA0MTBcdExCOlpcdFBMOmlsbHVtaW5hXHRQVTpGQ0MxSEE4QUNYWFx0U006SEcwMjc1OScgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgRVJSMjUwNDEwXzEuZmFzdHEuZ3ogRVJSMjUwNDEwXzIuZmFzdHEuZ3ogfCBzYW10b29scyB2aWV3IC1TYmggfCBzYW10b29scyBzb3J0IC1vIEVSUjI1MDQxMF8xLmJhbSAtICYmIHNhbXRvb2xzIGluZGV4IEVSUjI1MDQxMF8xLmJhbSAmJiBzYW10b29scyBmbGFnc3RhdCBFUlIyNTA0MTBfMS5iYW0NCg0KDQpbbWFpbl0gVmVyc2lvbjogMC43LjE3LXIxMTg4DQoNClttYWluXSBSZWFsIHRpbWU6IDc0OS4zNDEgc2VjOyBDUFU6IDExMDU0LjYxMyBzZWMNCg0KW2JhbV9zb3J0X2NvcmVdIG1lcmdpbmcgZnJvbSAxOCBmaWxlcyBhbmQgMSBpbi1tZW1vcnkgYmxvY2tzLi4uDQoNCmBgYA0KNTAyMzY1MjEgKyAwIGluIHRvdGFsIChRQy1wYXNzZWQgcmVhZHMgKyBRQy1mYWlsZWQgcmVhZHMpDQoNCjY2OTA2ICsgMCBzZWNvbmRhcnkNCg0KMTQ1NDA5ICsgMCBzdXBwbGVtZW50YXJ5DQoNCjAgKyAwIGR1cGxpY2F0ZXMNCg0KNTAxMjk3MjQgKyAwIG1hcHBlZCAoOTkuNzklIDogTi9BKQ0KDQo1MDAyNDIwNiArIDAgcGFpcmVkIGluIHNlcXVlbmNpbmcNCg0KMjUwMTIxMDMgKyAwIHJlYWQxDQoNCjI1MDEyMTAzICsgMCByZWFkMg0KDQo0OTQwNzc3OCArIDAgcHJvcGVybHkgcGFpcmVkICg5OC43NyUgOiBOL0EpDQoNCjQ5ODExNjMyICsgMCB3aXRoIGl0c2VsZiBhbmQgbWF0ZSBtYXBwZWQNCg0KMTA1Nzc3ICsgMCBzaW5nbGV0b25zICgwLjIxJSA6IE4vQSkNCg0KMjU4MDU2ICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNocg0KDQoxOTQwMjcgKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyIChtYXBRPj01KQ0KYGBgDQoNCiMjIEIyLiBWYWxpZGF0ZSB0aGUgQkFNIGZpbGUNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBWYWxpZGF0ZVNhbUZpbGUgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgRVJSMjUwNDEwXzEuYmFtIC1NIFNVTU1BUlkgLU8gc3VtbWFyeV9FUlIyNTA0MTBfMQ0KDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQpJTkZPICAgIDIwMTktMDQtMjcgMjM6MzM6MzQgICAgIFNhbUZpbGVWYWxpZGF0b3IgICAgICAgIFZhbGlkYXRlZCBSZWFkICAgIDEwLDAwMCwwMDAgcmVjb3Jkcy4gIEVsYXBzZWQgdGltZTogMDA6MDE6MzVzLiAgVGltZSBmb3IgbGFzdCAxMCwwMDAsMDAwOiAgIDk0cy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyMzo0OCw5NzQsNzg1DQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoNCklORk8gICAgMjAxOS0wNC0yNyAyMzozOTo1NiAgICAgU2FtRmlsZVZhbGlkYXRvciAgICAgICAgVmFsaWRhdGVkIFJlYWQgICAgNTAsMDAwLDAwMCByZWNvcmRzLiAgRWxhcHNlZCB0aW1lOiAwMDowNzo1N3MuICBUaW1lIGZvciBsYXN0IDEwLDAwMCwwMDA6ICAgOThzLiAgTGFzdCByZWFkIHBvc2l0aW9uOiBjaHJVbl9HTDAwMDIyNHYxOjU1LDE3Mg0KDQoNCltTYXQgQXByIDI3IDIzOjQwOjU2IFVUQyAyMDE5XSBwaWNhcmQuc2FtLlZhbGlkYXRlU2FtRmlsZSBkb25lLiBFbGFwc2VkIHRpbWU6IDguOTggbWludXRlcy4NCg0KLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBjYXQgc3VtbWFyeV9FUlIyNTA0MTBfMSANCg0KYGBgDQojIyBISVNUT0dSQU0gICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nDQoNCkVycm9yIFR5cGUgICAgICAgICAgICAgIENvdW50DQoNCkVSUk9SOklOVkFMSURfVEFHX05NICAgIDEwNw0KDQpgYGANCg0KDQojIyBCMy4gRml4IHRoZSBlcnJvciANCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgc2FtdG9vbHMgY2FsbWQgLWJBciBFUlIyNTA0MTBfMS5iYW0gSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgPiBFUlIyNTA0MTBfMS5jYWxtZC5iYW0NCg0KLi4uLi4uLi4uLi4uLi4uLg0KDQpbYmFtX2ZpbGxtZDFdIGRpZmZlcmVudCBNRCBmb3IgcmVhZCAnRVJSMjUwNDEwLjEzMTA3NjcnOiAnOTlHMCcgLT4gJzk5TjAnDQoNCltiYW1fZmlsbG1kMV0gZGlmZmVyZW50IE5NIGZvciByZWFkICdFUlIyNTA0MTAuMjI3NzA0NTEnOiAzIC0+IDQNCg0KW2JhbV9maWxsbWQxXSBkaWZmZXJlbnQgTUQgZm9yIHJlYWQgJ0VSUjI1MDQxMC4yMjc3MDQ1MSc6ICczNFQyOVQxQTE5JyAtPiAnMzRUMjlUMUExOE4wJw0KDQoNCiMjIEI0LiBWYWxpZGF0ZSBhZ2FpbiBhZnRlciB0aGUgZml4DQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBFUlIyNTA0MTBfMS5jYWxtZC5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5X0VSUjI1MDQxMF8xX2NhbG1kDQoNClVzaW5nIEdBVEsgamFyIC9ob21lL2IwZDI2NDcvbWluaWNvbmRhMy9zaGFyZS9nYXRrNC00LjEuMi4wLTAvZ2F0ay1wYWNrYWdlLTQuMS4yLjAtbG9jYWwuamFyDQoNCi4uLi4uLi4uLi4NCg0KSU5GTyAgICAyMDE5LTA0LTI4IDAwOjQ1OjM2ICAgICBTYW1GaWxlVmFsaWRhdG9yICAgICAgICBWYWxpZGF0ZWQgUmVhZCAgICA1MCwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjA1OjUxcy4gVGltZSBmb3IgbGFzdCAxMCwwMDAsMDAwOiAgIDcwcy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyVW5fR0wwMDAyMjR2MTo1NSwxNzINCg0KW1N1biBBcHIgMjggMDA6NDU6MzkgVVRDIDIwMTldIHBpY2FyZC5zYW0uVmFsaWRhdGVTYW1GaWxlIGRvbmUuIEVsYXBzZWQgdGltZTogNS45MSBtaW51dGVzLg0KDQouLi4uDQoNClRvb2wgcmV0dXJuZWQ6IDANCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnlfRVJSMjUwNDEwXzFfY2FsbWQgDQoNCk5vIGVycm9ycyBmb3VuZA0KDQoNCg0KIyMgQjUuIE1hcmsgRHVwbGljYXRlcyBvbiB0aGUgZXJyb3ItZml4ZWQgYmFtIGZpbGUNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBNYXJrRHVwbGljYXRlcyAtSSBFUlIyNTA0MTBfMS5jYWxtZC5iYW0gLU8gRVJSMjUwNDEwXzEuY2FsbWQubWR1cC5iYW0gLU0gRVJSMjUwNDEwXzEuY2FsbWQuZHVwTWV0cmljcy50eHQNCg0KLi4uLi4uLi4uLi4uDQoNCklORk8gICAgMjAxOS0wNC0yOCAwMjoyODoxOCAgICAgU29ydGluZ0NvbGxlY3Rpb24gICAgICAgQ3JlYXRpbmcgbWVyZ2luZyBpdGVyYXRvciBmcm9tIDIgZmlsZXMNCg0KLi4uLi4uLi4uLi4uLi4uLi4uDQoNCklORk8gICAgMjAxOS0wNC0yOCAwMjoyODozMyAgICAgTWFya0R1cGxpY2F0ZXMgIE1hcmtpbmcgNjAxNzIyNSByZWNvcmRzIGFzIGR1cGxpY2F0ZXMuDQoNCklORk8gICAgMjAxOS0wNC0yOCAwMjoyODozMyAgICAgTWFya0R1cGxpY2F0ZXMgIEZvdW5kIDAgb3B0aWNhbCBkdXBsaWNhdGUgY2x1c3RlcnMuDQoNCklORk8gICAgMjAxOS0wNC0yOCAwMjoyODozMyAgICAgTWFya0R1cGxpY2F0ZXMgIFJlYWRzIGFyZSBhc3N1bWVkIHRvIGJlIG9yZGVyZWQgYnk6IGNvb3JkaW5hdGUNCg0KSU5GTyAgICAyMDE5LTA0LTI4IDAyOjI5OjE2ICAgICBNYXJrRHVwbGljYXRlcyAgV3JpdHRlbiAgICAxMCwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjAwOjQycy4gIFRpbWUgZm9yIGxhc3QgMTAsMDAwLDAwMDogICA0MnMuICBMYXN0IHJlYWQNCiBwb3NpdGlvbjogY2hyMzo0OCw5NzQsNzg1DQogDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KIA0KIA0KSU5GTyAgICAyMDE5LTA0LTI4IDAyOjMyOjEzICAgICBNYXJrRHVwbGljYXRlcyAgV3JpdHRlbiAgICA1MCwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjAzOjM5cy4gIFRpbWUgZm9yIGxhc3QgMTAsMDAwLDAwMDogICA0NXMuICBMYXN0IHJlYWQNCiBwb3NpdGlvbjogY2hyVW5fR0wwMDAyMjR2MTo1NSwxNzINCiANCg0KDQpbU3VuIEFwciAyOCAwMjozMjoxNSBVVEMgMjAxOV0gcGljYXJkLnNhbS5tYXJrZHVwbGljYXRlcy5NYXJrRHVwbGljYXRlcyBkb25lLiBFbGFwc2VkIHRpbWU6IDExLjE3IG1pbnV0ZXMuDQoNCg0KDQojIyBCNi4gSW5kZXggdGhlIEJBTSBmaWxlDQoNCg0KIyMjIyBzYW10b29scyBpbmRleCBFUlIyNTA0MTBfMS5jYWxtZC5tZHVwLmJhbQ0KDQoNCg0KIyMgQjcuIFJ1biBnYXRrIEhhcGxvdHlwZUNhbGxlciANCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgSGFwbG90eXBlQ2FsbGVyIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIEVSUjI1MDQxMF8xLmNhbG1kLm1kdXAuYmFtIC1MIGNocjIwOjE1LDgwMCwwMDAtMTYsMTAwLDAwMCAtTyBFUlIyNTA0MTBfMS5jYWxtZC5tZHVwLnZjZg0KDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQowMjo0Mzo1MS4zMzAgSU5GTyAgSGFwbG90eXBlQ2FsbGVyIC0gDQoNCmBgYA0KMjM5IHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKCgoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIpIEFORCBQYXNzZXNWZW5kb3JRdWFsaXR5Q2hlY2tSZWFkRmlsdGVyKSBBTkQgTm9uWmVyb1JlZmVyZW5jZUxlbmd0aEFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBHb29kQ2lnYXJSZWFkRmlsdGVyKSBBTkQgV2VsbGZvcm1lZFJlYWRGaWx0ZXIpDQoNCiAgMjM5IHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKCgoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpIEFORCBOb25aZXJvUmVmZXJlbmNlTGVuZ3RoQWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIEdvb2RDaWdhclJlYWRGaWx0ZXIpDQogICAgICANCiAgICAgIDIzOSByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKCgoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpIEFORCBOb25aZXJvUmVmZXJlbmNlTGVuZ3RoQWxpZ25tZW50UmVhZEZpbHRlcikNCiAgICAgICAgICANCiAgICAgICAgICAyMzkgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpDQogICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAyMzkgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikgQU5EIE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBOb3REdXBsaWNhdGVSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAxNCByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIDEwIHJlYWQocykgZmlsdGVyZWQgYnk6ICgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgcmVhZChzKSBmaWx0ZXJlZCBieTogKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCByZWFkKHMpIGZpbHRlcmVkIGJ5OiBNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICA0IHJlYWQocykgZmlsdGVyZWQgYnk6IE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIgDQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAyMjUgcmVhZChzKSBmaWx0ZXJlZCBieTogTm90RHVwbGljYXRlUmVhZEZpbHRlcg0KYGBgDQogICAgICAgICAgICAgICAgICANCjAyOjQzOjUxLjMzMCBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyMjA6MTYwOTc0MzQgICAgICAgICAgICAgIDAuMCAgICAgICAgICAgICAgICAgIDEwMTggICAgICAgICAgNjYxMDMuOQ0KDQowMjo0Mzo1MS4zMzEgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDEwMTggdG90YWwgcmVnaW9ucyBpbiAwLjAgbWludXRlcy4NCg0KLi4uLi4uLi4uLi4uDQoNCg0KDQojIyBCOC4gUmVwb3J0IHRoZSBzaG9ydCB2YXJpbmF0cyAoU05QcyBhbmQgaW5kZWxzKQ0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBFUlIyNTA0MTBfMS5jYWxtZC5tZHVwLnZjZg0KDQoNCmBgYA0KDQojIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgYmNmdG9vbHMgc3RhdHMgKDEuOStodHNsaWItMS45KSBhbmQgY2FuIGJlIHBsb3R0ZWQgdXNpbmcgcGxvdC12Y2ZzdGF0cy4NCg0KDQojIFRoZSBjb21tYW5kIGxpbmUgd2FzOiBiY2Z0b29scyBzdGF0cyAgRVJSMjUwNDEwXzEuY2FsbWQubWR1cC52Y2YNCg0KLi4uLi4uLi4uLi4uDQoNCiMgU04gICAgWzJdaWQgICBbM11rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAgICAgICAgICAgICAgICAgMQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiByZWNvcmRzOiAgICAgICAgICAgICAgICAgICAgICAzDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgICAgICAgICAgICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgU05QczogICAgICAgICAgICAgICAgICAgICAgICAgMw0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBNTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIGluZGVsczogICAgICAgICAgICAgICAgICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAgICAgICAgICAgICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgICAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDANCg0KYGBgDQoNCg0KIyMgQjkuIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgIDQwNTE0NDI4MTYgQXByIDI3IDIzOjI1IEVSUjI1MDQxMF8xLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICA0ODU3OTA0IEFwciAyNyAyMzoyNSBFUlIyNTA0MTBfMS5iYW0uYmFpDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgIDQzNzU1NjA2MjggQXByIDI4IDAwOjM2IEVSUjI1MDQxMF8xLmNhbG1kLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICAzNDA1IEFwciAyOCAwMjozMiBFUlIyNTA0MTBfMS5jYWxtZC5kdXBNZXRyaWNzLnR4dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICA1OTYxNTIyOTM4IEFwciAyOCAwMjozMiBFUlIyNTA0MTBfMS5jYWxtZC5tZHVwLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICA1MDMxNjY0IEFwciAyOCAwMjozNyBFUlIyNTA0MTBfMS5jYWxtZC5tZHVwLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDE3NTY2MyBBcHIgMjggMDI6NDMgRVJSMjUwNDEwXzEuY2FsbWQubWR1cC52Y2YNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDExNDE3MyBBcHIgMjggMDI6NDMgRVJSMjUwNDEwXzEuY2FsbWQubWR1cC52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgICAgNzUgQXByIDI3IDIzOjQwIHN1bW1hcnlfRVJSMjUwNDEwXzENCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgICAxNiBBcHIgMjggMDA6NDUgc3VtbWFyeV9FUlIyNTA0MTBfMV9jYWxtZA0KDQoNCg0KDQoNCg0KIyMgQ29tYmluZSBib3RoIGJhbSBmaWxlcyBhbmQgYW5hbHl6ZSBmb3Igc2hvcnQgdmFyaWFudCBkaXNjb3ZlcnkNCg0KDQoNCiMjIEMxLiBNZXJnZSB0aGUgQkFNIGZpbGVzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgTWVyZ2VTYW1GaWxlcyAtSSBFUlIyNTA0MDlfMS5tZHVwLmNhbG1kLmJhbSAtSSBFUlIyNTA0MTBfMS5jYWxtZC5iYW0gLU8gRVJSMjUwNDA5MTAuY2FsbWQuYmFtDQoNCi4uLi4uLi4uLi4uLg0KDQpJTkZPICAgIDIwMTktMDQtMjggMDE6MjI6MzAgICAgIE1lcmdlU2FtRmlsZXMgICBQcm9jZXNzZWQgICAxMDEsMDAwLDAwMCByZWNvcmRzLiAgRWxhcHNlZCB0aW1lOiAwMDowNjozOHMuICBUaW1lIGZvciBsYXN0IDEsMDAwLDAwMDogICAgNXMuICBMYXN0IHJlYWQgcG9zaXRpb246IGNoclVuX0pURkgwMTAwMDAxN3YxX2RlY295OjIsNTA3DQoNCklORk8gICAgMjAxOS0wNC0yOCAwMToyMjozMSAgICAgTWVyZ2VTYW1GaWxlcyAgIEZpbmlzaGVkIHJlYWRpbmcgaW5wdXRzLg0KDQpbU3VuIEFwciAyOCAwMToyMjozMSBVVEMgMjAxOV0gcGljYXJkLnNhbS5NZXJnZVNhbUZpbGVzIGRvbmUuIEVsYXBzZWQgdGltZTogNi42NiBtaW51dGVzLg0KDQoNCg0KIyMgQzIuIE1hcmsgZHVwbGljYXRlcw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIE1hcmtEdXBsaWNhdGVzIC1JIEVSUjI1MDQwOTEwLmNhbG1kLmJhbSAtTyBFUlIyNTA0MDkxMC5jYWxtZC5tZHVwLmJhbSAtTSBFUlIyNTA0MDkxMC5jYWxtZC5kdXBNZXRyaWNzLnR4dA0KDQoNCklORk8gICAgMjAxOS0wNC0yOCAwMTo0Njo0MyAgICAgTWFya0R1cGxpY2F0ZXMgIFJlYWQgMTAxMDQ1NjMxIHJlY29yZHMuIDAgcGFpcnMgbmV2ZXIgbWF0Y2hlZC4NCg0KLi4uLi4uLi4uLi4uLi4uLi4NCg0KSU5GTyAgICAyMDE5LTA0LTI4IDAxOjQ3OjE3ICAgICBNYXJrRHVwbGljYXRlcyAgV2lsbCByZXRhaW4gdXAgdG8gMjM2NjY2ODgwIGR1cGxpY2F0ZSBpbmRpY2VzIGJlZm9yZSBzcGlsbGluZyB0byBkaXNrLg0KDQouLi4uLi4uLi4uLi4uLg0KDQpJTkZPICAgIDIwMTktMDQtMjggMDE6NDc6MTggICAgIFNvcnRpbmdDb2xsZWN0aW9uICAgICAgIENyZWF0aW5nIG1lcmdpbmcgaXRlcmF0b3IgZnJvbSAyIGZpbGVzDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KSU5GTyAgICAyMDE5LTA0LTI4IDAxOjQ3OjQwICAgICBTb3J0aW5nQ29sbGVjdGlvbiAgICAgICBDcmVhdGluZyBtZXJnaW5nIGl0ZXJhdG9yIGZyb20gNCBmaWxlcw0KDQouLi4uLi4uLi4uLi4uDQoNCklORk8gICAgMjAxOS0wNC0yOCAwMTo0ODoxMSAgICAgTWFya0R1cGxpY2F0ZXMgIE1hcmtpbmcgMjIwNjg0MDAgcmVjb3JkcyBhcyBkdXBsaWNhdGVzLg0KDQpJTkZPICAgIDIwMTktMDQtMjggMDE6NDg6MTEgICAgIE1hcmtEdXBsaWNhdGVzICBGb3VuZCAwIG9wdGljYWwgZHVwbGljYXRlIGNsdXN0ZXJzLg0KDQpJTkZPICAgIDIwMTktMDQtMjggMDE6NDg6MTEgICAgIE1hcmtEdXBsaWNhdGVzICBSZWFkcyBhcmUgYXNzdW1lZCB0byBiZSBvcmRlcmVkIGJ5OiBjb29yZGluYXRlDQoNCklORk8gICAgMjAxOS0wNC0yOCAwMTo0ODo1MyAgICAgTWFya0R1cGxpY2F0ZXMgIFdyaXR0ZW4gICAgMTAsMDAwLDAwMCByZWNvcmRzLiAgRWxhcHNlZCB0aW1lOiAwMDowMDo0MXMuICBUaW1lIGZvciBsYXN0IDEwLDAwMCwwMDA6ICAgNDFzLiAgTGFzdCByZWFkIHBvc2l0aW9uOiBjaHIxOjIzNiw1NDgsMjY1DQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQpJTkZPICAgIDIwMTktMDQtMjggMDE6NTU6MTggICAgIE1hcmtEdXBsaWNhdGVzICBXcml0dGVuICAgMTAwLDAwMCwwMDAgcmVjb3Jkcy4gIEVsYXBzZWQgdGltZTogMDA6MDc6MDZzLiAgVGltZSBmb3IgbGFzdCAxMCwwMDAsMDAwOiAgIDQzcy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyWToxMiw5MTUsODU5DQoNCi4uLi4uLi4uLi4uDQoNCg0KIyMgQzMuIFZhbGlkYXRlIHRoZSBCQU0gZmlsZSBhZ2FpbiBhZnRlciBtZXJnaW5nIGFuZCBtYXJraW5nIGR1cGxpY2F0ZXMNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBWYWxpZGF0ZVNhbUZpbGUgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgRVJSMjUwNDA5MTAuY2FsbWQubWR1cC5iYW0gLU0gIFNVTU1BUlkgLU8gc3VtbWFyeV9FUlIyNTA0MDkxMC5jYWxtZC5tZHVwDQogDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uDQoNClRvb2wgcmV0dXJuZWQ6MA0KDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGNhdCBzdW1tYXJ5X0VSUjI1MDQwOTEwLmNhbG1kLm1kdXAgDQoNCk5vIGVycm9ycyBmb3VuZA0KDQoNCg0KIyMgQzQuIEluZGV4IHRoZSBiYW0gZmlsZQ0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgc2FtdG9vbHMgaW5kZXggRVJSMjUwNDA5MTAuY2FsbWQubWR1cC5iYW0NCg0KDQojIyBDNS4gUnVuIEhhcGxvdHlwZWNhbGxlcg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBFUlIyNTA0MDkxMC5jYWxtZC5tZHVwLmJhbSAtTCBjaHIyMDoxNSw4MDAsMDAwLTE2LDEwMCwwMDAgLU8gRVJSMjUwNDA5MTAuY2FsbWQubWR1cC52Y2YNCg0KVXNpbmcgR0FUSyBqYXIgL2hvbWUvYjBkMjY0Ny9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4yLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjIuMC1sb2NhbC5qYXINCg0KDQowMjozNTowOC45NTIgSU5GTyAgSGFwbG90eXBlQ2FsbGVyIC0gDQoNCmBgYA0KOTYyIHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKCgoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIpIEFORCBQYXNzZXNWZW5kb3JRdWFsaXR5Q2hlY2tSZWFkRmlsdGVyKSBBTkQgTm9uWmVyb1JlZmVyZW5jZUxlbmd0aEFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBHb29kQ2lnYXJSZWFkRmlsdGVyKSBBTkQgV2VsbGZvcm1lZFJlYWRGaWx0ZXIpDQogIA0KICA5NjIgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKCgoKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikgQU5EIE5vdFNlICBjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIpIEFORCBQYXNzZXNWZW5kb3JRdWFsaXR5Q2hlY2tSZWFkRmlsdGVyKSBBTkQgTm9uWmVyb1JlZmVyZW5jZUxlbmd0aEFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBHb29kQ2lnYXJSZWFkRmlsdGVyKQ0KICAgICAgDQogICAgICA5NjIgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIpIEFORCBQYXNzZXNWZW5kb3JRdWFsaXR5Q2hlY2tSZWFkRmlsdGVyKSBBTkQgTm9uWmVyb1JlZmVyZW5jZUxlbmd0aEFsaWdubWVudFJlYWRGaWx0ZXIpDQogICAgICAgICAgDQogICAgICAgICAgOTYyIHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIpIEFORCBQYXNzZXNWZW5kb3JRdWFsaXR5Q2hlY2tSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgOTYyIHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpQU5EIE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBOb3REdXBsaWNhdGVSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAyNSByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAxNSByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikNCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgMTUgcmVhZChzKSBmaWx0ZXJlZCBieTogKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNSByZWFkKHMpIGZpbHRlcmVkIGJ5OiBNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgDQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgMTAgcmVhZChzKSBmaWx0ZXJlZCBieTogTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgOTM3IHJlYWQocykgZmlsdGVyZWQgYnk6IE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIgDQpgYGANCiAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgDQowMjozNTowOC45NTMgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjIwOjE2MDk3NzM0ICAgICAgICAgICAgICAwLjAgICAgICAgICAgICAgICAgICAxMDI3ICAgICAgICAgIDQ4MzY3LjMNCg0KMDI6MzU6MDguOTUzIElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCAxMDI3IHRvdGFsIHJlZ2lvbnMgaW4gMC4wIG1pbnV0ZXMuDQoNCg0KDQojIyBDNi4gUmVwb3J0IHNob3J0IHZhcmlhbnQgKFNOUHMgYW5kIGluZGVscykgc3RhdGlzdGljcyANCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgYmNmdG9vbHMgc3RhdHMgRVJSMjUwNDA5MTAuY2FsbWQubWR1cC52Y2YNCg0KYGBgDQojIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgYmNmdG9vbHMgc3RhdHMgKDEuOStodHNsaWItMS45KSBhbmQgY2FuIGJlIHBsb3R0ZWQgdXNpbmcgcGxvdC12Y2ZzdGF0cy4NCg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoNCiMgU04gICAgWzJdaWQgICBbM11rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRddmFsdWUNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBzYW1wbGVzOiAgICAgICAgICAgICAgICAgICAgICAxDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAgICAgICAgICAgICAgICAgOA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgICAgICAgICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBTTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICA4DQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogICAgICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIGluZGVsczogICAgICAgICAgICAgICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBvdGhlcnM6ICAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzOiAgICAgICAgICAgMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDANCg0KYGBgDQoNCg0KIyMgQzcuIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgMTE4MjA0NTQwOTQgQXByIDI4IDAxOjIyIEVSUjI1MDQwOTEwLmNhbG1kLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICAzNDMxIEFwciAyOCAwMTo1NSBFUlIyNTA0MDkxMC5jYWxtZC5kdXBNZXRyaWNzLnR4dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgMTc2NjUxIEFwciAyOCAwMjozNSBFUlIyNTA0MDkxMC5jYWxtZC5tZHVwLnZjZg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgMTE0MTczIEFwciAyOCAwMjozNSBFUlIyNTA0MDkxMC5jYWxtZC5tZHVwLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgICAgMCBBcHIgMjggMDI6MzAgc3VtbWFyeV9FUlIyNTA0MDkxMC5jYWxtZC5tZHVwDQo=