[med-svn] [plink1.9] 01/06: Imported Upstream version 1.90~b3.45-170113

Dylan Aïssi bob.dybian-guest at moszumanska.debian.org
Mon Jan 16 22:26:42 UTC 2017


This is an automated email from the git hooks/post-receive script.

bob.dybian-guest pushed a commit to branch master
in repository plink1.9.

commit 0cc4cbb015415f2718cd79b2d96522aee0f095a5
Author: Dylan Aïssi <bob.dybian at gmail.com>
Date:   Mon Jan 16 23:02:46 2017 +0100

    Imported Upstream version 1.90~b3.45-170113
---
 Makefile            |   6 +--
 pigz.c              |   4 +-
 plink.c             |  41 ++++++++++++---------
 plink_assoc.c       |   2 +-
 plink_assoc.h       |   2 +-
 plink_calc.c        |   2 +-
 plink_cluster.c     |   2 +-
 plink_cnv.c         |   2 +-
 plink_cnv.h         |   2 +-
 plink_common.c      |  12 ++++--
 plink_common.h      |  79 +++++++++++++++++++--------------------
 plink_data.c        | 104 ++++++++++++++++++++++++++++++++++++++++------------
 plink_data.h        |   2 +-
 plink_dosage.c      |   2 +-
 plink_dosage.h      |   2 +-
 plink_family.c      |   2 +-
 plink_family.h      |   2 +-
 plink_filter.c      |   2 +-
 plink_filter.h      |   2 +-
 plink_first_compile |  10 ++---
 plink_glm.c         |   4 +-
 plink_glm.h         |   2 +-
 plink_help.c        |  16 +++++---
 plink_help.h        |   2 +-
 plink_homozyg.c     |   2 +-
 plink_homozyg.h     |   2 +-
 plink_lasso.c       |   2 +-
 plink_lasso.h       |   2 +-
 plink_ld.c          |   8 +++-
 plink_ld.h          |   2 +-
 plink_matrix.c      |   6 +--
 plink_matrix.h      |   2 +-
 plink_misc.c        |   2 +-
 plink_misc.h        |   2 +-
 plink_perm.c        |   2 +-
 plink_perm.h        |   2 +-
 plink_rserve.c      |   2 +-
 plink_rserve.h      |   2 +-
 plink_set.c         |   2 +-
 plink_set.h         |   2 +-
 plink_stats.c       |   2 +-
 plink_stats.h       |   2 +-
 42 files changed, 216 insertions(+), 136 deletions(-)

diff --git a/Makefile b/Makefile
index 3529166..cd57113 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,7 @@ endif
 CFLAGS=-Wall -O2
 BLASFLAGS=-L/usr/lib64/atlas -llapack -lcblas -latlas
 LINKFLAGS=-lm -lpthread -ldl
-ZLIB=zlib-1.2.8/libz.so.1.2.8
+ZLIB=zlib-1.2.10/libz.so.1.2.10
 
 ifeq ($(SYS), MAC)
   GCC_GTEQ_43 := $(shell expr `g++ -dumpversion | sed -e 's/\.\([0-9][0-9]\)/\1/g' -e 's/\.\([0-9]\)/0\1/g' -e 's/^[0-9]\{3,4\}$$/&00/'` \>= 40300)
@@ -36,7 +36,7 @@ ifeq ($(SYS), MAC)
   endif
   BLASFLAGS=-framework Accelerate
   LINKFLAGS=-ldl
-  ZLIB=zlib-1.2.8/libz.1.2.8.dylib
+  ZLIB=zlib-1.2.10/libz.1.2.10.dylib
 endif
 
 ifeq ($(SYS), WIN)
@@ -47,7 +47,7 @@ ifeq ($(SYS), WIN)
 # NO_LAPACK.
   BLASFLAGS=-L. lapack/liblapack.a -L. lapack/librefblas.a
   LINKFLAGS=-lm -static-libgcc
-  ZLIB=zlib-1.2.8/libz.a
+  ZLIB=zlib-1.2.10/libz.a
 endif
 
 ifdef NO_LAPACK
diff --git a/pigz.c b/pigz.c
index 8953ae4..757a7fa 100644
--- a/pigz.c
+++ b/pigz.c
@@ -300,7 +300,7 @@
 #ifdef DYNAMIC_ZLIB
   #include <zlib.h>
 #else
-  #include "zlib-1.2.8/zlib.h"
+  #include "zlib-1.2.10/zlib.h"
 #endif
 
 #include "pigz.h"
@@ -526,7 +526,7 @@ int32_t flex_pzwrite_close_null(Pigz_state* ps_ptr, char* writep) {
 #ifdef DYNAMIC_ZLIB
   #include <zlib.h>
 #else
-  #include "zlib-1.2.8/zlib.h" /* deflateInit2(), deflateReset(), deflate(), */
+  #include "zlib-1.2.10/zlib.h" /* deflateInit2(), deflateReset(), deflate(), */
                         /* deflateEnd(), deflateSetDictionary(), crc32(),
                            inflateBackInit(), inflateBack(), inflateBackEnd(),
                            Z_DEFAULT_COMPRESSION, Z_DEFAULT_STRATEGY,
diff --git a/plink.c b/plink.c
index 0ea2355..9e111e0 100644
--- a/plink.c
+++ b/plink.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -93,7 +93,7 @@
 
 static const char ver_str[] =
 #ifdef STABLE_BUILD
-  "PLINK v1.90b3.44"
+  "PLINK v1.90b3.45"
 #else
   "PLINK v1.90p"
 #endif
@@ -105,7 +105,7 @@ static const char ver_str[] =
 #else
   " 32-bit"
 #endif
-  " (17 Nov 2016)";
+  " (13 Jan 2017)";
 static const char ver_str2[] =
   // include leading space if day < 10, so character length stays the same
   ""
@@ -118,7 +118,7 @@ static const char ver_str2[] =
   "  "
 #endif
   "    https://www.cog-genomics.org/plink2\n"
-  "(C) 2005-2016 Shaun Purcell, Christopher Chang   GNU General Public License v3"
+  "(C) 2005-2017 Shaun Purcell, Christopher Chang   GNU General Public License v3"
 #if SPECIES_DEFAULT > 0
   "\nRecompiled with default species = "
   #if SPECIES_DEFAULT == SPECIES_COW
@@ -311,8 +311,8 @@ static inline uint32_t are_marker_cms_needed(uint64_t calculation_type, char* cm
   return 0;
 }
 
-static inline uint32_t are_marker_alleles_needed(uint64_t calculation_type, char* freqname, Homozyg_info* homozyg_ptr, Two_col_params* a1alleles, Two_col_params* a2alleles, uint32_t ld_modifier, uint32_t snp_only, uint32_t clump_modifier, uint32_t cluster_modifier) {
-  return (freqname || (calculation_type & (CALC_FREQ | CALC_HARDY | CALC_MAKE_BED | CALC_MAKE_BIM | CALC_RECODE | CALC_REGRESS_PCS | CALC_MODEL | CALC_GLM | CALC_LASSO | CALC_LIST_23_INDELS | CALC_EPI | CALC_TESTMISHAP | CALC_SCORE | CALC_MENDEL | CALC_TDT | CALC_FLIPSCAN | CALC_QFAM | CALC_HOMOG | CALC_DUPVAR | CALC_RPLUGIN | CALC_DFAM)) || ((calculation_type & CALC_HOMOZYG) && (homozyg_ptr->modifier & HOMOZYG_GROUP_VERBOSE)) || ((calculation_type & CALC_LD) && (ld_modifier & LD_INPHASE [...]
+static inline uint32_t are_marker_alleles_needed(uint64_t calculation_type, char* freqname, Homozyg_info* homozyg_ptr, Two_col_params* a1alleles, Two_col_params* a2alleles, uint32_t ld_modifier, uint32_t snps_only, uint32_t clump_modifier, uint32_t cluster_modifier) {
+  return (freqname || (calculation_type & (CALC_FREQ | CALC_HARDY | CALC_MAKE_BED | CALC_MAKE_BIM | CALC_RECODE | CALC_REGRESS_PCS | CALC_MODEL | CALC_GLM | CALC_LASSO | CALC_LIST_23_INDELS | CALC_EPI | CALC_TESTMISHAP | CALC_SCORE | CALC_MENDEL | CALC_TDT | CALC_FLIPSCAN | CALC_QFAM | CALC_HOMOG | CALC_DUPVAR | CALC_RPLUGIN | CALC_DFAM)) || ((calculation_type & CALC_HOMOZYG) && (homozyg_ptr->modifier & HOMOZYG_GROUP_VERBOSE)) || ((calculation_type & CALC_LD) && (ld_modifier & LD_INPHASE [...]
 }
 
 static inline int32_t relationship_or_ibc_req(uint64_t calculation_type) {
@@ -3326,7 +3326,7 @@ int32_t main(int32_t argc, char** argv) {
 
   uint32_t aperm_present = 0;
   char* segment_spanning_fname = nullptr;
-  char* missing_code = nullptr;
+  char* oxford_missing_code = nullptr;
   char range_delim = '-';
   uint32_t modifier_23 = 0;
   double pheno_23 = DBL_MAX;
@@ -8297,14 +8297,12 @@ int32_t main(int32_t argc, char** argv) {
 	  goto main_ret_INVALID_CMDLINE_WWA;
 	}
 	memcpy(output_missing_pheno, argv[cur_arg + 1], jj + 1);
-      } else if ((!memcmp(argptr2, "issing-code", 12))) {
+      } else if (!memcmp(argptr2, "issing-code", 12)) {
         if (enforce_param_ct_range(param_ct, argv[cur_arg], 0, 1)) {
 	  goto main_ret_INVALID_CMDLINE_2A;
 	}
-	if (param_ct) {
-	  missing_code = argv[cur_arg + 1];
-	} else {
-	  missing_code = (char*)"";
+	if (alloc_string(&oxford_missing_code, param_ct? argv[cur_arg + 1] : "")) {
+	  goto main_ret_NOMEM;
 	}
       } else if (!memcmp(argptr2, "ake-pheno", 10)) {
 	if (enforce_param_ct_range(param_ct, argv[cur_arg], 2, 2)) {
@@ -11073,6 +11071,9 @@ int32_t main(int32_t argc, char** argv) {
       } else if (!memcmp(argptr2, "et-hh-missing", 14)) {
 	misc_flags |= MISC_SET_HH_MISSING;
 	goto main_param_zero;
+      } else if (!memcmp(argptr2, "et-mixed-mt-missing", 20)) {
+        misc_flags |= MISC_SET_MIXED_MT_MISSING;
+        goto main_param_zero;
       } else if (!memcmp(argptr2, "et", 3)) {
 	if (set_info.fname) {
 	  logerrprint("Error: --set cannot be used with --make-set.\n");
@@ -11415,11 +11416,16 @@ int32_t main(int32_t argc, char** argv) {
 	  goto main_ret_INVALID_CMDLINE_2A;
 	}
 	if (param_ct) {
-	  if ((strlen(argv[cur_arg + 1]) != 5) || (memcmp(argv[cur_arg + 1], "no-", 3)) || (!match_upper(&(argv[cur_arg + 1][3]), "DI"))) {
-	    sprintf(g_logbuf, "Error: Invalid --snps-only parameter '%s'.\n", argv[cur_arg + 1]);
-	    goto main_ret_INVALID_CMDLINE_WWA;
+	  const char* cur_modif = argv[cur_arg + 1];
+	  const uint32_t slen = strlen(cur_modif);
+	  if ((slen != 9) || memcmp(cur_modif, "just-acgt", 9)) {
+	    if ((slen != 5) || (memcmp(cur_modif, "no-", 3)) || (!match_upper(&(cur_modif[3]), "DI"))) {
+	      sprintf(g_logbuf, "Error: Invalid --snps-only parameter '%s'.\n", argv[cur_arg + 1]);
+	      goto main_ret_INVALID_CMDLINE_WWA;
+	    }
+	    logerrprint("Warning: --snps-only 'no-DI' modifier has been changed to 'just-acgt', and now\nexcludes all non-ACGT allele codes.\n");
 	  }
-          misc_flags |= MISC_SNPS_ONLY_NO_DI;
+          misc_flags |= MISC_SNPS_ONLY_JUST_ACGT;
 	}
 	filter_flags |= FILTER_BIM_REQ | FILTER_SNPS_ONLY | FILTER_NODOSAGE | FILTER_NOCNV;
       } else if (!memcmp(argptr2, "plit-x", 7)) {
@@ -13493,7 +13499,7 @@ int32_t main(int32_t argc, char** argv) {
 	  simulate_label = nullptr;
 	}
       } else if (load_params & LOAD_PARAMS_OX_ALL) {
-	retval = oxford_to_bed(pedname, mapname, outname, sptr, oxford_single_chr, oxford_pheno_name, hard_call_threshold, missing_code, missing_pheno, misc_flags, (load_params / LOAD_PARAMS_OXBGEN) & 1, &chrom_info);
+	retval = oxford_to_bed(pedname, mapname, outname, sptr, oxford_single_chr, oxford_pheno_name, hard_call_threshold, oxford_missing_code, missing_pheno, misc_flags, (load_params / LOAD_PARAMS_OXBGEN) & 1, &chrom_info);
       } else {
         retval = ped_to_bed(pedname, mapname, outname, sptr, fam_cols, misc_flags, missing_pheno, &chrom_info);
 	fam_cols |= FAM_COL_1 | FAM_COL_34 | FAM_COL_5;
@@ -13642,6 +13648,7 @@ int32_t main(int32_t argc, char** argv) {
   free_cond(update_cm);
   free_cond(update_map);
   free_cond(update_name);
+  free_cond(oxford_missing_code);
   free_cond(oxford_single_chr);
   free_cond(oxford_pheno_name);
   free_cond(update_ids_fname);
diff --git a/plink_assoc.c b/plink_assoc.c
index 75bb8e3..8679ab0 100644
--- a/plink_assoc.c
+++ b/plink_assoc.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_assoc.h b/plink_assoc.h
index 668d56d..c208e00 100644
--- a/plink_assoc.h
+++ b/plink_assoc.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_ASSOC_H__
 #define __PLINK_ASSOC_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_calc.c b/plink_calc.c
index 7b567b6..c11b0eb 100644
--- a/plink_calc.c
+++ b/plink_calc.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_cluster.c b/plink_cluster.c
index 6dabe11..28f27ab 100644
--- a/plink_cluster.c
+++ b/plink_cluster.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_cnv.c b/plink_cnv.c
index dddcc9b..2bde162 100644
--- a/plink_cnv.c
+++ b/plink_cnv.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_cnv.h b/plink_cnv.h
index 9e8303f..fcb7a0e 100644
--- a/plink_cnv.h
+++ b/plink_cnv.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_CNV_H__
 #define __PLINK_CNV_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_common.c b/plink_common.c
index 8fb3a7b..255e5d7 100644
--- a/plink_common.c
+++ b/plink_common.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -9517,13 +9517,14 @@ uint32_t alloc_raw_haploid_filters(uint32_t unfiltered_sample_ct, uint32_t hh_ex
   return 0;
 }
 
-void haploid_fix_multiple(uintptr_t* marker_exclude, uintptr_t marker_uidx_start, uintptr_t marker_ct, Chrom_info* chrom_info_ptr, uint32_t hh_exists, uintptr_t* sample_raw_include2, uintptr_t* sample_raw_male_include2, uintptr_t unfiltered_sample_ct, uintptr_t byte_ct_per_marker, unsigned char* loadbuf) {
+void haploid_fix_multiple(uintptr_t* marker_exclude, uintptr_t marker_uidx_start, uintptr_t marker_ct, Chrom_info* chrom_info_ptr, uint32_t hh_exists, uint32_t set_hh_missing, uint32_t set_mixed_mt_missing, uintptr_t* sample_raw_include2, uintptr_t* sample_raw_male_include2, uintptr_t unfiltered_sample_ct, uintptr_t byte_ct_per_marker, unsigned char* loadbuf) {
   uintptr_t marker_idx = 0;
   uintptr_t marker_uidx = next_unset_ul_unsafe(marker_exclude, marker_uidx_start);
   uint32_t chrom_fo_idx = get_variant_chrom_fo_idx(chrom_info_ptr, marker_uidx);
   uint32_t chrom_idx;
   uint32_t is_x;
   uint32_t is_y;
+  uint32_t is_mt;
   uint32_t is_haploid;
   uintptr_t chrom_end;
   uintptr_t marker_idx_chrom_end;
@@ -9533,12 +9534,13 @@ void haploid_fix_multiple(uintptr_t* marker_exclude, uintptr_t marker_uidx_start
     chrom_end = chrom_info_ptr->chrom_fo_vidx_start[chrom_fo_idx + 1];
     is_x = (chrom_info_ptr->xymt_codes[X_OFFSET] == (int32_t)chrom_idx);
     is_y = (chrom_info_ptr->xymt_codes[Y_OFFSET] == (int32_t)chrom_idx);
+    is_mt = (chrom_info_ptr->xymt_codes[MT_OFFSET] == (int32_t)chrom_idx);
     is_haploid = IS_SET(chrom_info_ptr->haploid_mask, chrom_idx);
     marker_idx_chrom_end = marker_idx + chrom_end - marker_uidx - popcount_bit_idx(marker_exclude, marker_uidx, chrom_end);
     if (marker_idx_chrom_end > marker_ct) {
       marker_idx_chrom_end = marker_ct;
     }
-    if (is_haploid) {
+    if (is_haploid && set_hh_missing) {
       if (is_x) {
 	if (hh_exists & XMHH_EXISTS) {
 	  for (; marker_idx < marker_idx_chrom_end; marker_idx++) {
@@ -9556,6 +9558,10 @@ void haploid_fix_multiple(uintptr_t* marker_exclude, uintptr_t marker_uidx_start
 	  hh_reset(&(loadbuf[marker_idx * byte_ct_per_marker]), sample_raw_include2, unfiltered_sample_ct);
 	}
       }
+    } else if (is_mt && set_mixed_mt_missing) {
+      for (; marker_idx < marker_idx_chrom_end; marker_idx++) {
+	hh_reset(&(loadbuf[marker_idx * byte_ct_per_marker]), sample_raw_include2, unfiltered_sample_ct);
+      }
     }
     marker_idx = marker_idx_chrom_end;
     chrom_fo_idx++;
diff --git a/plink_common.h b/plink_common.h
index 62bd4b6..8e2f54a 100644
--- a/plink_common.h
+++ b/plink_common.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_COMMON_H__
 #define __PLINK_COMMON_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -231,7 +231,7 @@
     #error "zlib version 1.2.4 or later required."
   #endif
 #else
-  #include "zlib-1.2.8/zlib.h"
+  #include "zlib-1.2.10/zlib.h"
 #endif
 #include "SFMT.h"
 
@@ -297,42 +297,43 @@
 #define MISC_FREQX 0x20LLU
 #define MISC_KEEP_ALLELE_ORDER 0x40LLU
 #define MISC_SET_HH_MISSING 0x80LLU
-#define MISC_KEEP_AUTOCONV 0x100LLU
-#define MISC_LOAD_CLUSTER_KEEP_NA 0x200LLU
-#define MISC_WRITE_CLUSTER_OMIT_UNASSIGNED 0x400LLU
-#define MISC_ALLOW_EXTRA_CHROMS 0x800LLU
-#define MISC_MAKE_FOUNDERS_REQUIRE_2_MISSING 0x1000LLU
-#define MISC_MAKE_FOUNDERS_FIRST 0x2000LLU
-#define MISC_LASSO_REPORT_ZEROES 0x4000LLU
-#define MISC_LASSO_SELECT_COVARS 0x8000LLU
-#define MISC_DOUBLE_ID 0x10000LLU
-#define MISC_BIALLELIC_ONLY 0x20000LLU
-#define MISC_BIALLELIC_ONLY_STRICT 0x40000LLU
-#define MISC_BIALLELIC_ONLY_LIST 0x80000LLU
-#define MISC_VCF_FILTER 0x100000LLU
-#define MISC_GPLINK 0x200000LLU
-#define MISC_SNPS_ONLY_NO_DI 0x400000LLU
-#define MISC_IMPUTE_SEX 0x800000LLU
-#define MISC_OXFORD_SNPID_CHR 0x1000000LLU
-#define MISC_EXTRACT_RANGE 0x2000000LLU
-#define MISC_EXCLUDE_RANGE 0x4000000LLU
-#define MISC_MERGEX 0x8000000LLU
-#define MISC_SET_ME_MISSING 0x10000000LLU
-#define MISC_SEXCHECK_YCOUNT 0x20000000LLU
-#define MISC_SEXCHECK_YONLY 0x40000000LLU
-#define MISC_FAMILY_CLUSTERS 0x80000000LLU
-#define MISC_FILL_MISSING_A2 0x100000000LLU
-#define MISC_HET_SMALL_SAMPLE 0x200000000LLU
-#define MISC_FST_CC 0x400000000LLU
-#define MISC_SPLIT_MERGE_NOFAIL 0x800000000LLU
-#define MISC_REAL_REF_ALLELES 0x1000000000LLU
-#define MISC_RPLUGIN_DEBUG 0x2000000000LLU
-#define MISC_MISSING_GZ 0x4000000000LLU
-#define MISC_FREQ_GZ 0x8000000000LLU
-#define MISC_HET_GZ 0x10000000000LLU
-#define MISC_ALLOW_NO_SAMPLES 0x20000000000LLU
-#define MISC_ALLOW_NO_VARS 0x40000000000LLU
-#define MISC_VCF_REQUIRE_GT 0x80000000000LLU
+#define MISC_SET_MIXED_MT_MISSING 0x100LLU
+#define MISC_KEEP_AUTOCONV 0x200LLU
+#define MISC_LOAD_CLUSTER_KEEP_NA 0x400LLU
+#define MISC_WRITE_CLUSTER_OMIT_UNASSIGNED 0x800LLU
+#define MISC_ALLOW_EXTRA_CHROMS 0x1000LLU
+#define MISC_MAKE_FOUNDERS_REQUIRE_2_MISSING 0x2000LLU
+#define MISC_MAKE_FOUNDERS_FIRST 0x4000LLU
+#define MISC_LASSO_REPORT_ZEROES 0x8000LLU
+#define MISC_LASSO_SELECT_COVARS 0x10000LLU
+#define MISC_DOUBLE_ID 0x20000LLU
+#define MISC_BIALLELIC_ONLY 0x40000LLU
+#define MISC_BIALLELIC_ONLY_STRICT 0x80000LLU
+#define MISC_BIALLELIC_ONLY_LIST 0x100000LLU
+#define MISC_VCF_FILTER 0x200000LLU
+#define MISC_GPLINK 0x400000LLU
+#define MISC_SNPS_ONLY_JUST_ACGT 0x800000LLU
+#define MISC_IMPUTE_SEX 0x1000000LLU
+#define MISC_OXFORD_SNPID_CHR 0x2000000LLU
+#define MISC_EXTRACT_RANGE 0x4000000LLU
+#define MISC_EXCLUDE_RANGE 0x8000000LLU
+#define MISC_MERGEX 0x10000000LLU
+#define MISC_SET_ME_MISSING 0x20000000LLU
+#define MISC_SEXCHECK_YCOUNT 0x40000000LLU
+#define MISC_SEXCHECK_YONLY 0x80000000LLU
+#define MISC_FAMILY_CLUSTERS 0x100000000LLU
+#define MISC_FILL_MISSING_A2 0x200000000LLU
+#define MISC_HET_SMALL_SAMPLE 0x400000000LLU
+#define MISC_FST_CC 0x800000000LLU
+#define MISC_SPLIT_MERGE_NOFAIL 0x1000000000LLU
+#define MISC_REAL_REF_ALLELES 0x2000000000LLU
+#define MISC_RPLUGIN_DEBUG 0x4000000000LLU
+#define MISC_MISSING_GZ 0x8000000000LLU
+#define MISC_FREQ_GZ 0x10000000000LLU
+#define MISC_HET_GZ 0x20000000000LLU
+#define MISC_ALLOW_NO_SAMPLES 0x40000000000LLU
+#define MISC_ALLOW_NO_VARS 0x80000000000LLU
+#define MISC_VCF_REQUIRE_GT 0x100000000000LLU
 
 // assume for now that .bed must always be accompanied by both .bim and .fam
 #define FILTER_ALL_REQ 1LLU
@@ -2626,7 +2627,7 @@ HEADER_INLINE void haploid_fix(uint32_t hh_exists, uintptr_t* sample_include_qua
 
 uint32_t alloc_raw_haploid_filters(uint32_t unfiltered_sample_ct, uint32_t hh_exists, uint32_t is_include, uintptr_t* sample_bitarr, uintptr_t* sex_male, uintptr_t** sample_raw_include_quatervec_ptr, uintptr_t** sample_raw_male_quatervec_ptr);
 
-void haploid_fix_multiple(uintptr_t* marker_exclude, uintptr_t marker_uidx_start, uintptr_t marker_ct, Chrom_info* chrom_info_ptr, uint32_t hh_exists, uintptr_t* sample_raw_include2, uintptr_t* sample_raw_male_include2, uintptr_t unfiltered_sample_ct, uintptr_t byte_ct_per_marker, unsigned char* loadbuf);
+void haploid_fix_multiple(uintptr_t* marker_exclude, uintptr_t marker_uidx_start, uintptr_t marker_ct, Chrom_info* chrom_info_ptr, uint32_t hh_exists, uint32_t set_hh_missing, uint32_t set_mixed_mt_missing, uintptr_t* sample_raw_include2, uintptr_t* sample_raw_male_include2, uintptr_t unfiltered_sample_ct, uintptr_t byte_ct_per_marker, unsigned char* loadbuf);
 
 void force_missing(unsigned char* loadbuf, uintptr_t* force_missing_include2, uintptr_t unfiltered_sample_ct);
 
diff --git a/plink_data.c b/plink_data.c
index b553cd8..d98043f 100644
--- a/plink_data.c
+++ b/plink_data.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -389,6 +389,29 @@ int32_t load_map(FILE** mapfile_ptr, char* mapname, uint32_t* map_cols_ptr, uint
   return retval;
 }
 
+// missing code set to 1 by load_bim()
+static uint8_t acgtm_bool_table[256] = {
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+static inline uint32_t is_acgtm(unsigned char ucc) {
+  return (uint32_t)(acgtm_bool_table[ucc]);
+}
+
 void load_bim_sf_insert(uint32_t chrom_idx, uint32_t pos_start, uint32_t pos_end, uint32_t* start_idxs, uint32_t* llbuf, uint32_t* lltop_ptr, uint32_t* entry_ct_ptr) {
   uint32_t lltop = *lltop_ptr;
   uint32_t entry_ct = *entry_ct_ptr;
@@ -503,7 +526,7 @@ int32_t load_bim(char* bimname, uintptr_t* unfiltered_marker_ct_ptr, uintptr_t*
   uint32_t allow_no_variants = (misc_flags / MISC_ALLOW_NO_VARS) & 1;
   uint32_t exclude_snp = (filter_flags / FILTER_EXCLUDE_MARKERNAME_SNP) & 1;
   uint32_t snps_only = (filter_flags / FILTER_SNPS_ONLY) & 1;
-  uint32_t snps_only_no_di = (misc_flags / MISC_SNPS_ONLY_NO_DI) & 1;
+  uint32_t snps_only_just_acgt = (misc_flags / MISC_SNPS_ONLY_JUST_ACGT) & 1;
   uint32_t from_slen = markername_from? strlen(markername_from) : 0;
   uint32_t to_slen = markername_to? strlen(markername_to) : 0;
   uint32_t snp_slen = markername_snp? strlen(markername_snp) : 0;
@@ -1090,6 +1113,7 @@ int32_t load_bim(char* bimname, uintptr_t* unfiltered_marker_ct_ptr, uintptr_t*
     if (marker_alleles_needed) {
       if (snps_only) {
 	max_marker_allele_blen = 2;
+	acgtm_bool_table[(unsigned char)(*missing_geno_ptr)] = 1;
       }
       if (max_marker_allele_blen > NON_BIGSTACK_MIN - 1) {
 	// guard against overflows
@@ -1251,7 +1275,7 @@ int32_t load_bim(char* bimname, uintptr_t* unfiltered_marker_ct_ptr, uintptr_t*
 	  umm = strlen_se(bufptr5);
 	  if (marker_alleles_needed) {
 	    if (snps_only) {
-	      if ((ukk != 1) || (umm != 1) || (snps_only_no_di && ((*bufptr4 == 'D') || (*bufptr4 == 'I') || (*bufptr5 == 'D') || (*bufptr5 == 'I')))) {
+	      if ((ukk != 1) || (umm != 1) || (snps_only_just_acgt && ((!is_acgtm(*bufptr4)) || (!is_acgtm(*bufptr5))))) {
 		goto load_bim_skip_marker;
 	      }
 	    }
@@ -1335,7 +1359,11 @@ int32_t load_bim(char* bimname, uintptr_t* unfiltered_marker_ct_ptr, uintptr_t*
     chrom_info_ptr->chrom_ct = ++chroms_encountered_m1;
     chrom_info_ptr->chrom_fo_vidx_start[chroms_encountered_m1] = marker_uidx;
     *marker_exclude_ct_ptr = marker_exclude_ct;
-    LOGPRINTF("%" PRIuPTR " variant%s loaded from %s.\n", unfiltered_marker_ct - marker_exclude_ct, (unfiltered_marker_ct == marker_exclude_ct + 1)? "" : "s", ftype_str);
+    if (!marker_exclude_ct) {
+      LOGPRINTF("%" PRIuPTR " variant%s loaded from %s.\n", unfiltered_marker_ct, (unfiltered_marker_ct == 1)? "" : "s", ftype_str);
+    } else {
+      LOGPRINTF("%" PRIuPTR " out of %" PRIuPTR " variant%s loaded from %s.\n", unfiltered_marker_ct - marker_exclude_ct, unfiltered_marker_ct, (unfiltered_marker_ct == 1)? "" : "s", ftype_str);
+    }
     if (missing_ids_set) {
       LOGPRINTF("%u missing ID%s set.\n", missing_ids_set, (missing_ids_set == 1)? "" : "s");
     }
@@ -3467,6 +3495,10 @@ int32_t make_bed(FILE* bedfile, uintptr_t bed_offset, char* bimname, char* outna
   uint32_t unfiltered_sample_ctl2m1 = (unfiltered_sample_ct - 1) / BITCT2;
   uint32_t family_ct = 0;
   uint32_t set_hh_missing = (misc_flags / MISC_SET_HH_MISSING) & 1;
+
+  // todo: clear this when no MT markers loaded
+  uint32_t set_mixed_mt_missing = (misc_flags / MISC_SET_MIXED_MT_MISSING) & 1;
+
   uint32_t set_me_missing = ((misc_flags / MISC_SET_ME_MISSING) & 1) && sample_ct;
   uint32_t fill_missing_a2 = (misc_flags / MISC_FILL_MISSING_A2) & 1;
   uint32_t mendel_include_duos = (mendel_modifier / MENDEL_DUOS) & 1;
@@ -3478,7 +3510,7 @@ int32_t make_bed(FILE* bedfile, uintptr_t bed_offset, char* bimname, char* outna
   uint32_t chrom_fo_idx = 0xffffffffU; // deliberate overflow
   uint32_t pct = 1;
   int32_t retval = 0;
-  const char errflags[][16] = {"set-hh-missing", "set-me-missing", "fill-missing-a2"};
+  const char errflags[][24] = {"set-hh-missing", "set-mixed-mt-missing", "set-me-missing", "fill-missing-a2"};
   uintptr_t* loadbuf;
   uintptr_t* writebuf;
   uintptr_t* writebuf_ptr;
@@ -3535,10 +3567,10 @@ int32_t make_bed(FILE* bedfile, uintptr_t bed_offset, char* bimname, char* outna
     }
     fflush(stdout);
     if (resort_map) {
-      if (set_hh_missing || set_me_missing || fill_missing_a2) {
+      if (set_hh_missing || set_mixed_mt_missing || set_me_missing || fill_missing_a2) {
 	// could remove this restriction if we added a chromosome check to the
 	// main loop, but no real need to bother.
-	errptr = errflags[set_hh_missing? 0 : (set_me_missing? 1 : 2)];
+	errptr = errflags[set_hh_missing? 0 : (set_mixed_mt_missing? 1 : (set_me_missing? 2 : 3))];
 	if (map_is_unsorted) {
 	  // assumes UNSORTED_CM was masked out
 	  LOGERRPRINTF("Error: --%s cannot be used on an unsorted .bim file.  Use\n--make-bed without --%s to sort by position first; then run\n--make-bed + --%s on the new fileset.\n", errptr, errptr, errptr);
@@ -3673,6 +3705,12 @@ int32_t make_bed(FILE* bedfile, uintptr_t bed_offset, char* bimname, char* outna
       } else if (!set_hh_missing) {
 	hh_exists = 0;
       }
+      if (fill_missing_a2 || (hh_exists & NXMHH_EXISTS) || set_mixed_mt_missing) {
+        if (bigstack_alloc_ul(sample_ctv2, &sample_include2)) {
+	  goto make_bed_ret_NOMEM;
+	}
+        fill_quatervec_55(sample_ct, sample_include2);
+      }
       if (alloc_collapsed_haploid_filters(sample_exclude, sex_male, unfiltered_sample_ct, sample_ct, fill_missing_a2? Y_FIX_NEEDED : hh_exists, 0, &sample_include2, &sample_male_include2)) {
 	goto make_bed_ret_NOMEM;
       }
@@ -3721,10 +3759,12 @@ int32_t make_bed(FILE* bedfile, uintptr_t bed_offset, char* bimname, char* outna
 	      chrom_fo_idx++;
 	      refresh_chrom_info(chrom_info_ptr, marker_uidx, &chrom_end, &chrom_fo_idx, &is_x, &is_y, &is_mt, &is_haploid);
 	    }
-	    if ((!set_me_missing) || (is_haploid && (!is_x))) {
+	    if ((!set_me_missing) || (is_haploid && (!is_x)) || is_mt) {
 	      retval = make_bed_one_marker(bedfile, loadbuf, unfiltered_sample_ct, unfiltered_sample_ct4, sample_exclude, sample_ct, sample_sort_map, final_mask, IS_SET(marker_reverse, marker_uidx), writebuf);
 	      if (is_haploid && set_hh_missing) {
 		haploid_fix(hh_exists, sample_include2, sample_male_include2, sample_ct, is_x, is_y, (unsigned char*)writebuf);
+	      } else if (is_mt && set_mixed_mt_missing) {
+		hh_reset((unsigned char*)writebuf, sample_include2, sample_ct);
 	      }
 	    } else {
 	      retval = make_bed_me_missing_one_marker(bedfile, loadbuf, unfiltered_sample_ct, unfiltered_sample_ct4, sample_exclude, sample_ct, sample_sort_map, final_mask, unfiltered_sample_ctl2m1, IS_SET(marker_reverse, marker_uidx), writebuf, workbuf, sex_male, sample_raw_male_include2, trio_lookup, trio_ct, set_hh_missing, is_x, mendel_multigen, &mendel_error_ct);
@@ -12115,6 +12155,7 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
   uint32_t output_gen_gz = (recode_modifier / RECODE_GEN_GZ) & 1;
   uint32_t recode_012 = recode_modifier & (RECODE_01 | RECODE_12);
   uint32_t set_hh_missing = (misc_flags / MISC_SET_HH_MISSING) & 1;
+  uint32_t set_mixed_mt_missing = (misc_flags / MISC_SET_MIXED_MT_MISSING) & 1;
   uint32_t real_ref_alleles = (misc_flags / MISC_REAL_REF_ALLELES) & 1;
   uint32_t xmhh_exists_orig = hh_exists & XMHH_EXISTS;
   uint32_t omit_nonmale_y = recode_modifier & RECODE_OMIT_NONMALE_Y;
@@ -12194,17 +12235,17 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
   if (!hh_exists) {
     set_hh_missing = 0;
   }
-  if (set_hh_missing || (recode_modifier & RECODE_VCF)) {
+  if (set_hh_missing || set_mixed_mt_missing || (recode_modifier & RECODE_VCF)) {
     if (recode_modifier & (RECODE_23 | RECODE_A_TRANSPOSE | RECODE_BEAGLE | RECODE_BEAGLE_NOMAP | RECODE_BIMBAM | RECODE_BIMBAM_1CHR | RECODE_LGEN | RECODE_LGEN_REF | RECODE_LIST | RECODE_OXFORD | RECODE_RLIST | RECODE_TRANSPOSE | RECODE_VCF)) {
       // SNP-major and no need for sample_uidx in inner loop, so we can use
       // collapsed representation
-      if (alloc_collapsed_haploid_filters(sample_exclude, sex_male, unfiltered_sample_ct, sample_ct, hh_exists | ((recode_modifier & RECODE_VCF)? XMHH_EXISTS : 0), 0, &sample_include2, &sample_male_include2)) {
+      if (alloc_collapsed_haploid_filters(sample_exclude, sex_male, unfiltered_sample_ct, sample_ct, hh_exists | ((recode_modifier & RECODE_VCF)? XMHH_EXISTS : 0) | (set_mixed_mt_missing? NXMHH_EXISTS : 0), 0, &sample_include2, &sample_male_include2)) {
 	goto recode_ret_NOMEM;
       }
     } else {
       // sample-major output (in which case we load large blocks and use
       // haploid_fix_multiple())
-      if (alloc_raw_haploid_filters(unfiltered_sample_ct, hh_exists, 0, sample_exclude, sex_male, &sample_include2, &sample_male_include2)) {
+      if (alloc_raw_haploid_filters(unfiltered_sample_ct, hh_exists | (set_mixed_mt_missing? NXMHH_EXISTS : 0), 0, sample_exclude, sex_male, &sample_include2, &sample_male_include2)) {
 	goto recode_ret_NOMEM;
       }
     }
@@ -12710,6 +12751,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
 	  }
 	  if (is_haploid && set_hh_missing) {
 	    haploid_fix(hh_exists, sample_include2, sample_male_include2, sample_ct, is_x, is_y, (unsigned char*)loadbuf_collapsed);
+	  } else if (is_mt && set_mixed_mt_missing) {
+	    hh_reset((unsigned char*)loadbuf_collapsed, sample_include2, sample_ct);
 	  }
 	  init_recode_cmax0(mk_allele_ptrs[2 * marker_uidx], mk_allele_ptrs[2 * marker_uidx + 1], cur_mk_allelesx, cmalen, delimiter, delim2);
 	  ulptr = loadbuf_collapsed;
@@ -12818,6 +12861,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
 	  }
 	  if (is_haploid && set_hh_missing) {
 	    haploid_fix(hh_exists, sample_include2, sample_male_include2, sample_ct, is_x, is_y, (unsigned char*)loadbuf_collapsed);
+	  } else if (is_mt && set_mixed_mt_missing) {
+	    hh_reset((unsigned char*)loadbuf_collapsed, sample_include2, sample_ct);
 	  }
 	  ulptr = loadbuf_collapsed;
 	  ulptr_end = &(loadbuf_collapsed[sample_ct / BITCT2]);
@@ -12969,7 +13014,7 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
     fputs("0%", stdout);
     fflush(stdout);
     g_textbuf[0] = '\n';
-    if (((!hh_exists) || set_hh_missing) && is_haploid && (!is_x)) {
+    if ((((!hh_exists) || set_hh_missing) && is_haploid && (!is_x)) || (set_mixed_mt_missing && is_mt)) {
       uii = 2;
     } else {
       uii = 4;
@@ -12987,7 +13032,7 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
 	  chrom_fo_idx++;
 	  refresh_chrom_info(chrom_info_ptr, marker_uidx, &chrom_end, &chrom_fo_idx, &is_x, &is_y, &is_mt, &is_haploid);
 	  chrom_idx = chrom_info_ptr->chrom_file_order[chrom_fo_idx];
-	  if (((!hh_exists) || set_hh_missing) && is_haploid && (!is_x)) {
+	  if ((((!hh_exists) || set_hh_missing) && is_haploid && (!is_x)) || (set_mixed_mt_missing && is_mt)) {
 	    uii = 2;
 	  } else {
 	    uii = 4;
@@ -13023,6 +13068,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
 	  }
 	  if (is_haploid && set_hh_missing) {
 	    haploid_fix(hh_exists, sample_include2, sample_male_include2, sample_ct, is_x, is_y, (unsigned char*)loadbuf_collapsed);
+	  } else if (is_mt && set_mixed_mt_missing) {
+	    hh_reset((unsigned char*)loadbuf_collapsed, sample_include2, sample_ct);
 	  }
 	}
 
@@ -13147,6 +13194,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
 	  }
 	  if (is_haploid && set_hh_missing) {
 	    haploid_fix(hh_exists, sample_include2, sample_male_include2, sample_ct, is_x, is_y, (unsigned char*)loadbuf_collapsed);
+	  } else if (is_mt && set_mixed_mt_missing) {
+	    hh_reset((unsigned char*)loadbuf_collapsed, sample_include2, sample_ct);
 	  }
 	  ulptr = loadbuf_collapsed;
 	  ulptr_end = &(loadbuf_collapsed[sample_ct / BITCT2]);
@@ -13271,7 +13320,10 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
       }
       cur_word = (((uint32_t)ii) >> ((sample_uidx % 4) * 2)) & 3;
       if (is_haploid && set_hh_missing) {
+	// ok, this is a bit silly
 	haploid_fix(hh_exists, sample_include2, sample_male_include2, 1, is_x, is_y, (unsigned char*)(&cur_word));
+      } else if (is_mt && set_mixed_mt_missing) {
+	hh_reset((unsigned char*)(&cur_word), sample_include2, 1);
       }
       if (IS_SET(marker_reverse, marker_uidx)) {
 	cur_word = cur_word ^ (((~(cur_word ^ (cur_word >> 1))) & 1) * 3);
@@ -13567,6 +13619,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
 	  }
 	  if (is_haploid && set_hh_missing) {
 	    haploid_fix(hh_exists, sample_include2, sample_male_include2, sample_ct, is_x, is_y, (unsigned char*)loadbuf_collapsed);
+	  } else if (is_mt && set_mixed_mt_missing) {
+	    hh_reset((unsigned char*)loadbuf_collapsed, sample_include2, sample_ct);
 	  }
 	  ucc = mk_allele_ptrs[2 * marker_uidx][0];
 	  ucc2 = mk_allele_ptrs[2 * marker_uidx + 1][0];
@@ -13659,8 +13713,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
       if (recode_load_to(loadbuf, bedfile, bed_offset, chrom_info_ptr->chrom_fo_vidx_start[chrom_fo_idx + 1], 0, ulii, marker_exclude, marker_reverse, &marker_uidx, unfiltered_sample_ct)) {
 	goto recode_ret_READ_FAIL;
       }
-      if (set_hh_missing) {
-	haploid_fix_multiple(marker_exclude, marker_uidx_start, ulii, chrom_info_ptr, hh_exists, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
+      if (set_hh_missing || set_mixed_mt_missing) {
+	haploid_fix_multiple(marker_exclude, marker_uidx_start, ulii, chrom_info_ptr, hh_exists, set_hh_missing, set_mixed_mt_missing, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
       }
       sample_uidx = 0;
       if (!recode_012) {
@@ -13782,6 +13836,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
 	  }
 	  if (is_haploid && set_hh_missing) {
 	    haploid_fix(hh_exists, sample_include2, sample_male_include2, sample_ct, is_x, is_y, (unsigned char*)loadbuf_collapsed);
+	  } else if (is_mt && set_mixed_mt_missing) {
+	    hh_reset((unsigned char*)loadbuf_collapsed, sample_include2, sample_ct);
 	  }
 	}
 	wbufptr = &(marker_ids[marker_uidx * max_marker_id_len]);
@@ -13914,8 +13970,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
     if (recode_load_to(loadbuf, bedfile, bed_offset, unfiltered_marker_ct, 0, marker_ct, marker_exclude, recode_allele_reverse, &marker_uidx, unfiltered_sample_ct)) {
       goto recode_ret_READ_FAIL;
     }
-    if (set_hh_missing && marker_ct) {
-      haploid_fix_multiple(marker_exclude, 0, marker_ct, chrom_info_ptr, hh_exists, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
+    if ((set_hh_missing || set_mixed_mt_missing) && marker_ct) {
+      haploid_fix_multiple(marker_exclude, 0, marker_ct, chrom_info_ptr, hh_exists, set_hh_missing, set_mixed_mt_missing, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
     }
     fputs("0%", stdout);
     sample_uidx = 0;
@@ -14050,6 +14106,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
 	  }
 	  if (is_haploid && set_hh_missing) {
 	    haploid_fix(hh_exists, cur_sample_include2, cur_sample_male_include2, cur_sample_ct, is_x, is_y, (unsigned char*)loadbuf_collapsed);
+	  } else if (is_mt && set_mixed_mt_missing) {
+	    hh_reset((unsigned char*)loadbuf_collapsed, cur_sample_include2, cur_sample_ct);
 	  }
 	}
 	init_recode_cmax(mk_allele_ptrs[2 * marker_uidx], mk_allele_ptrs[2 * marker_uidx + 1], cur_mk_allelesx, cmalen, '\0', delimiter);
@@ -14219,8 +14277,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
       if (recode_load_to(loadbuf, bedfile, bed_offset, chrom_info_ptr->chrom_fo_vidx_start[chrom_fo_idx + 1], 0, ulii, marker_exclude, marker_reverse, &marker_uidx, unfiltered_sample_ct)) {
 	goto recode_ret_READ_FAIL;
       }
-      if (set_hh_missing && marker_ct) {
-        haploid_fix_multiple(marker_exclude, marker_uidx_start, ulii, chrom_info_ptr, hh_exists, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
+      if ((set_hh_missing || set_mixed_mt_missing) && marker_ct) {
+        haploid_fix_multiple(marker_exclude, marker_uidx_start, ulii, chrom_info_ptr, hh_exists, set_hh_missing, set_mixed_mt_missing, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
       }
       sample_uidx = 0;
       // Haploview requires '0' missing phenotype code
@@ -14292,8 +14350,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
     if (recode_load_to(loadbuf, bedfile, bed_offset, unfiltered_marker_ct, 0, marker_ct, marker_exclude, marker_reverse, &marker_uidx, unfiltered_sample_ct)) {
       goto recode_ret_READ_FAIL;
     }
-    if (set_hh_missing && marker_ct) {
-      haploid_fix_multiple(marker_exclude, 0, marker_ct, chrom_info_ptr, hh_exists, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
+    if ((set_hh_missing || set_mixed_mt_missing) && marker_ct) {
+      haploid_fix_multiple(marker_exclude, 0, marker_ct, chrom_info_ptr, hh_exists, set_hh_missing, set_mixed_mt_missing, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
     }
     sample_uidx = 0;
     sample_idx = 0;
@@ -14352,8 +14410,8 @@ int32_t recode(uint32_t recode_modifier, FILE* bedfile, uintptr_t bed_offset, ch
     if (recode_load_to(loadbuf, bedfile, bed_offset, unfiltered_marker_ct, 0, marker_ct, marker_exclude, marker_reverse, &marker_uidx, unfiltered_sample_ct)) {
       goto recode_ret_READ_FAIL;
     }
-    if (set_hh_missing && marker_ct) {
-      haploid_fix_multiple(marker_exclude, 0, marker_ct, chrom_info_ptr, hh_exists, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
+    if ((set_hh_missing || set_mixed_mt_missing) && marker_ct) {
+      haploid_fix_multiple(marker_exclude, 0, marker_ct, chrom_info_ptr, hh_exists, set_hh_missing, set_mixed_mt_missing, sample_include2, sample_male_include2, unfiltered_sample_ct, unfiltered_sample_ct4, loadbuf);
     }
     sample_uidx = 0;
     sample_idx = 0;
diff --git a/plink_data.h b/plink_data.h
index c745726..e18e977 100644
--- a/plink_data.h
+++ b/plink_data.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_DATA_H__
 #define __PLINK_DATA_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_dosage.c b/plink_dosage.c
index b2e976e..952e50c 100644
--- a/plink_dosage.c
+++ b/plink_dosage.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_dosage.h b/plink_dosage.h
index e29f537..605756c 100644
--- a/plink_dosage.h
+++ b/plink_dosage.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_DOSAGE_H__
 #define __PLINK_DOSAGE_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_family.c b/plink_family.c
index fcb23b8..01c4adb 100644
--- a/plink_family.c
+++ b/plink_family.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_family.h b/plink_family.h
index 3c20eb5..f546f20 100644
--- a/plink_family.h
+++ b/plink_family.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_FAMILY_H__
 #define __PLINK_FAMILY_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_filter.c b/plink_filter.c
index a7a3692..c6f40c1 100644
--- a/plink_filter.c
+++ b/plink_filter.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_filter.h b/plink_filter.h
index 70b7381..514ce20 100644
--- a/plink_filter.h
+++ b/plink_filter.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_FILTER_H__
 #define __PLINK_FILTER_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_first_compile b/plink_first_compile
index 72e202f..35e361a 100755
--- a/plink_first_compile
+++ b/plink_first_compile
@@ -1,17 +1,17 @@
 #!/bin/bash
 
 # Download and verify zlib
-EXPECTEDCHECKSUM=a4d316c404ff54ca545ea71a27af7dbc29817088
-curl -O http://zlib.net/zlib-1.2.8.tar.gz
-CHECKSUM=$(shasum zlib-1.2.8.tar.gz | cut -b-40)
+EXPECTEDCHECKSUM=76af0bfb4d17fad1d8bda13cb5593c311f59adee
+curl -O http://zlib.net/zlib-1.2.10.tar.gz
+CHECKSUM=$(shasum zlib-1.2.10.tar.gz | cut -b-40)
 if [ "$EXPECTEDCHECKSUM" != "$CHECKSUM" ]; then
     echo "Zlib checksum verification failure"
     exit 1
 fi;
 
 # Unpack and compile zlib
-tar -xzvf zlib-1.2.8.tar.gz
-cd zlib-1.2.8
+tar -xzvf zlib-1.2.10.tar.gz
+cd zlib-1.2.10
 ./configure
 make
 
diff --git a/plink_glm.c b/plink_glm.c
index 09f9a8c..405f8a4 100644
--- a/plink_glm.c
+++ b/plink_glm.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -3752,7 +3752,7 @@ int32_t glm_common_init(FILE* bedfile, uintptr_t bed_offset, uint32_t glm_modifi
     fill_ulong_zero(param_raw_ctl, active_params);
     active_params[0] = 1;
     numeric_range_list_to_bitarr(parameters_range_list_ptr, param_raw_ct_max, 0, 1, active_params);
-    if ((!(active_params[0] & 2)) && ((!np_diploid_raw) || (active_params[0] & 4)) && ((!covar_interactions) || ((!popcount_bit_idx(active_params, interaction_start_idx, sex_start_idx)) && ((!variation_in_sex) || (!popcount_bit_idx(active_params, sex_start_idx + 1, param_raw_ct_max)))))) {
+    if ((!(active_params[0] & 2)) && ((!np_diploid_raw) || (!(active_params[0] & 4))) && ((!covar_interactions) || ((!popcount_bit_idx(active_params, interaction_start_idx, sex_start_idx)) && ((!variation_in_sex) || (!popcount_bit_idx(active_params, sex_start_idx + 1, param_raw_ct_max)))))) {
       // force the user to explicitly use no-snp if that's their intention
       logerrprint("Error: --parameters must retain at least one dosage-dependent variable.  To\nperform one-off regression(s), use the --linear 'no-snp' modifier instead.\n");
       goto glm_common_init_ret_INVALID_CMDLINE;
diff --git a/plink_glm.h b/plink_glm.h
index d6e265e..d85011d 100644
--- a/plink_glm.h
+++ b/plink_glm.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_GLM_H__
 #define __PLINK_GLM_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_help.c b/plink_help.c
index bf98350..921b90e 100644
--- a/plink_help.c
+++ b/plink_help.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -1407,7 +1407,7 @@ int32_t disp_help(uint32_t param_ct, char** argv) {
     help_print("oxford-pheno-name\tdata\tsample", &help_ctrl, 0,
 "  --oxford-pheno-name [col nm] : Import named phenotype from the .sample file.\n"
 	       );
-    help_print("hard-call-threshold\tmissing-code\tmissing_code\tdata\tgen\tsample", &help_ctrl, 0,
+    help_print("hard-call-threshold\tmissing-code\tmissing_code\tdata\tgen\tbgen\tsample", &help_ctrl, 0,
 "  --hard-call-threshold [val]  : When an Oxford-format fileset is loaded, calls\n"
 "  --hard-call-threshold random   with uncertainty level greater than 0.1 are\n"
 "                                 normally treated as missing.  You can adjust\n"
@@ -1581,7 +1581,9 @@ int32_t disp_help(uint32_t param_ct, char** argv) {
 "                     chromosome code XY (pseudo-autosomal region of X).\n"
 	       );
     help_print("snps-only", &help_ctrl, 0,
-"  --snps-only <no-DI> : Exclude variants with multi-character allele codes.\n"
+"  --snps-only <just-acgt> : Exclude non-SNP variants.  By default, SNP = both\n"
+"                            allele codes are single-character; 'just-acgt'\n"
+"                            restricts SNP codes to {A,C,G,T,a,c,g,t,[missing]}.\n"
 	       );
     help_print("from\tto\tsnp\twindow\tfrom-bp\tto-bp\tfrom-kb\tto-kb\tfrom-mb\tto-mb\texclude-snp\textract-snp", &help_ctrl, 0,
 "  --from [var ID]  : Use ID(s) to specify a variant range to load.  When used\n"
@@ -1726,9 +1728,11 @@ int32_t disp_help(uint32_t param_ct, char** argv) {
 "                       second.  This must now be used with --make-bed and no\n"
 "                       other output commands.\n"
 	       );
-    help_print("set-hh-missing", &help_ctrl, 0,
-"  --set-hh-missing : Cause --make-bed and --recode to set heterozygous haploid\n"
-"                     genotypes to missing.\n"
+    help_print("set-hh-missing\tset-mixed-mt-missing", &help_ctrl, 0,
+"  --set-hh-missing       : Cause --make-bed and --recode to set heterozygous\n"
+"                           haploid genotypes to missing.\n"
+"  --set-mixed-mt-missing : Cause --make-bed and --recode to set mixed MT\n"
+"                           genotypes to missing.\n"
 	       );
     help_print("split-x\tmerge-x\tset-hh-missing\t23file-convert-xy\t23file-make-xylist\tcheck-sex\timpute-sex", &help_ctrl, 0,
 "  --split-x [bp1] [bp2] <no-fail> : Changes chromosome code of all X chromosome\n"
diff --git a/plink_help.h b/plink_help.h
index b8c469c..de3232a 100644
--- a/plink_help.h
+++ b/plink_help.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_HELP_H__
 #define __PLINK_HELP_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_homozyg.c b/plink_homozyg.c
index 7c46145..8d4f2af 100644
--- a/plink_homozyg.c
+++ b/plink_homozyg.c
@@ -1,5 +1,5 @@
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_homozyg.h b/plink_homozyg.h
index 82f8664..1c31333 100644
--- a/plink_homozyg.h
+++ b/plink_homozyg.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_HOMOZYG_H__
 #define __PLINK_HOMOZYG_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_lasso.c b/plink_lasso.c
index e76fa01..ba211d8 100644
--- a/plink_lasso.c
+++ b/plink_lasso.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_lasso.h b/plink_lasso.h
index 9d2ce04..3227f03 100644
--- a/plink_lasso.h
+++ b/plink_lasso.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_LASSO_H__
 #define __PLINK_LASSO_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_ld.c b/plink_ld.c
index 2c9f10a..2b0b655 100644
--- a/plink_ld.c
+++ b/plink_ld.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -5799,8 +5799,12 @@ int32_t ld_report_regular(pthread_t* threads, Ld_info* ldip, FILE* bedfile, uint
 	}
       } else {
         retval = string_range_list_to_bitarr2(sorted_ids, id_map, marker_ct, max_marker_id_len, &(ldip->snps_rl), "ld-snps", marker_exclude_idx1);
+	if (retval) {
+	  goto ld_report_regular_ret_1;
+	}
         bitvec_or(marker_exclude, unfiltered_marker_ctl, marker_exclude_idx1);
-        marker_ct1 = marker_ct - popcount_longs(marker_exclude_idx1, unfiltered_marker_ctl);
+	// bugfix, 13 Jan 2017
+        marker_ct1 = unfiltered_marker_ct - popcount_longs(marker_exclude, unfiltered_marker_ctl);
       }
       if (!marker_ct1) {
 	goto ld_report_regular_ret_EMPTY_SET1;
diff --git a/plink_ld.h b/plink_ld.h
index 39f9466..d4160cf 100644
--- a/plink_ld.h
+++ b/plink_ld.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_LD_H__
 #define __PLINK_LD_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_matrix.c b/plink_matrix.c
index c06658e..914a983 100644
--- a/plink_matrix.c
+++ b/plink_matrix.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
@@ -339,7 +339,7 @@ void col_major_matrix_multiply(__CLPK_integer row1_ct, __CLPK_integer col2_ct, _
       dxx = 0;
       dptr = &(inmatrix2[col_idx * common_ct]);
       for (com_idx = 0; com_idx < common_ct_l; com_idx++) {
-        dxx += (*dptr++) * inmatrix1[com_idx * common_ct + row_idx];
+        dxx += (*dptr++) * inmatrix1[com_idx * row1_ct_l + row_idx];
       }
       *outmatrix++ = dxx;
     }
@@ -372,7 +372,7 @@ void col_major_fmatrix_multiply(__CLPK_integer row1_ct, __CLPK_integer col2_ct,
       fxx = 0;
       fptr = &(inmatrix2[col_idx * common_ct]);
       for (com_idx = 0; com_idx < common_ct_l; com_idx++) {
-        fxx += (*fptr++) * inmatrix1[com_idx * common_ct + row_idx];
+        fxx += (*fptr++) * inmatrix1[com_idx * row1_ct_l + row_idx];
       }
       *outmatrix++ = fxx;
     }
diff --git a/plink_matrix.h b/plink_matrix.h
index 7e6dfe3..bc1e1ff 100644
--- a/plink_matrix.h
+++ b/plink_matrix.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_MATRIX_H__
 #define __PLINK_MATRIX_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_misc.c b/plink_misc.c
index 9d0b3bf..464133f 100644
--- a/plink_misc.c
+++ b/plink_misc.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_misc.h b/plink_misc.h
index dc2751c..f86f075 100644
--- a/plink_misc.h
+++ b/plink_misc.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_MISC_H__
 #define __PLINK_MISC_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_perm.c b/plink_perm.c
index cf06905..eb4e24a 100644
--- a/plink_perm.c
+++ b/plink_perm.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_perm.h b/plink_perm.h
index cc2df12..4744803 100644
--- a/plink_perm.h
+++ b/plink_perm.h
@@ -1,6 +1,6 @@
 #ifndef __PLINK_PERM_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_rserve.c b/plink_rserve.c
index 3ffad9d..b72cb7e 100644
--- a/plink_rserve.c
+++ b/plink_rserve.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_rserve.h b/plink_rserve.h
index 3fdbe71..7895873 100644
--- a/plink_rserve.h
+++ b/plink_rserve.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_RSERVE_H__
 #define __PLINK_RSERVE_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_set.c b/plink_set.c
index dd36217..4eb6b9b 100644
--- a/plink_set.c
+++ b/plink_set.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_set.h b/plink_set.h
index a2a5bb2..498b505 100644
--- a/plink_set.h
+++ b/plink_set.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_SET_H__
 #define __PLINK_SET_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_stats.c b/plink_stats.c
index 169831c..cbe976e 100644
--- a/plink_stats.c
+++ b/plink_stats.c
@@ -1,4 +1,4 @@
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify
diff --git a/plink_stats.h b/plink_stats.h
index 01b7e19..01da824 100644
--- a/plink_stats.h
+++ b/plink_stats.h
@@ -1,7 +1,7 @@
 #ifndef __PLINK_STATS_H__
 #define __PLINK_STATS_H__
 
-// This file is part of PLINK 1.90, copyright (C) 2005-2016 Shaun Purcell,
+// This file is part of PLINK 1.90, copyright (C) 2005-2017 Shaun Purcell,
 // Christopher Chang.
 //
 // This program is free software: you can redistribute it and/or modify

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/plink1.9.git



More information about the debian-med-commit mailing list