You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by gi...@apache.org on 2024/10/22 01:10:31 UTC

(datasketches-cpp) branch gh-pages updated: deploy: fa1ba4f072b2deb4f494664e70f068bb4a0df0ee

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/datasketches-cpp.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 63f0f9e  deploy: fa1ba4f072b2deb4f494664e70f068bb4a0df0ee
63f0f9e is described below

commit 63f0f9e0df3159d99faee912f5dbb72ec3915dcf
Author: AlexanderSaydakov <Al...@users.noreply.github.com>
AuthorDate: Tue Oct 22 01:10:26 2024 +0000

    deploy: fa1ba4f072b2deb4f494664e70f068bb4a0df0ee
---
 docs/master/AuxHashMap-internal_8hpp_source.html   |   600 +-
 docs/master/AuxHashMap_8hpp_source.html            |   214 +-
 ...teInterpolationXTable-internal_8hpp_source.html |  1664 ++-
 .../CompositeInterpolationXTable_8hpp_source.html  |   126 +-
 .../master/CouponHashSet-internal_8hpp_source.html |   598 +-
 docs/master/CouponHashSet_8hpp_source.html         |   166 +-
 docs/master/CouponList-internal_8hpp_source.html   |   814 +-
 docs/master/CouponList_8hpp_source.html            |   232 +-
 .../CubicInterpolation-internal_8hpp_source.html   |   490 +-
 docs/master/CubicInterpolation_8hpp_source.html    |   132 +-
 .../HarmonicNumbers-internal_8hpp_source.html      |   226 +-
 docs/master/HarmonicNumbers_8hpp_source.html       |   128 +-
 docs/master/Hll4Array-internal_8hpp_source.html    |   746 +-
 docs/master/Hll4Array_8hpp_source.html             |   178 +-
 docs/master/Hll6Array-internal_8hpp_source.html    |   300 +-
 docs/master/Hll6Array_8hpp_source.html             |   154 +-
 docs/master/Hll8Array-internal_8hpp_source.html    |   456 +-
 docs/master/Hll8Array_8hpp_source.html             |   160 +-
 docs/master/HllArray-internal_8hpp_source.html     |  1450 ++-
 docs/master/HllArray_8hpp_source.html              |   344 +-
 docs/master/HllSketch-internal_8hpp_source.html    |   972 +-
 .../master/HllSketchImpl-internal_8hpp_source.html |   356 +-
 docs/master/HllSketchImplFactory_8hpp_source.html  |   368 +-
 docs/master/HllSketchImpl_8hpp_source.html         |   228 +-
 docs/master/HllUnion-internal_8hpp_source.html     |   668 +-
 docs/master/HllUtil_8hpp_source.html               |   494 +-
 docs/master/MurmurHash3_8h_source.html             |   406 +-
 .../RelativeErrorTables-internal_8hpp_source.html  |   270 +-
 docs/master/RelativeErrorTables_8hpp_source.html   |   122 +-
 docs/master/annotated.html                         |   139 +-
 .../array__of__doubles__sketch_8hpp_source.html    |   152 +-
 .../array__tuple__a__not__b_8hpp_source.html       |   149 +-
 .../array__tuple__a__not__b__impl_8hpp_source.html |   116 +-
 .../array__tuple__intersection_8hpp_source.html    |   161 +-
 ...ray__tuple__intersection__impl_8hpp_source.html |   120 +-
 docs/master/array__tuple__sketch_8hpp_source.html  |   458 +-
 .../array__tuple__sketch__impl_8hpp_source.html    |   538 +-
 docs/master/array__tuple__union_8hpp_source.html   |   220 +-
 .../array__tuple__union__impl_8hpp_source.html     |   132 +-
 docs/master/bc_sd.png                              |   Bin 635 -> 0 bytes
 docs/master/bdwn.png                               |   Bin 0 -> 147 bytes
 docs/master/binomial__bounds_8hpp_source.html      |   966 +-
 docs/master/bit__packing_8hpp_source.html          | 12604 +++++++++----------
 .../bounds__binomial__proportions_8hpp_source.html |   404 +-
 ..._on__ratios__in__sampled__sets_8hpp_source.html |   242 +-
 ...ios__in__theta__sketched__sets_8hpp_source.html |   264 +-
 docs/master/ceiling__power__of__2_8hpp_source.html |   128 +-
 docs/master/classXXHash64-members.html             |    43 +-
 docs/master/classXXHash64.html                     |    75 +-
 ...classdatasketches_1_1HllSketchImpl-members.html |    39 +-
 .../master/classdatasketches_1_1HllSketchImpl.html |    47 +-
 ...ketches_1_1array__tuple__a__not__b-members.html |    41 +-
 ...assdatasketches_1_1array__tuple__a__not__b.html |    71 +-
 ...lassdatasketches_1_1array__tuple__a__not__b.png |   Bin 1133 -> 1100 bytes
 ...ches_1_1array__tuple__intersection-members.html |    47 +-
 ...datasketches_1_1array__tuple__intersection.html |    88 +-
 ...sdatasketches_1_1array__tuple__intersection.png |   Bin 1333 -> 1300 bytes
 ...atasketches_1_1array__tuple__union-members.html |    43 +-
 .../classdatasketches_1_1array__tuple__union.html  |    64 +-
 .../classdatasketches_1_1array__tuple__union.png   |   Bin 1583 -> 1531 bytes
 ...ches_1_1base__theta__sketch__alloc-members.html |    51 +-
 ...datasketches_1_1base__theta__sketch__alloc.html |   189 +-
 ...sdatasketches_1_1base__theta__sketch__alloc.png |   Bin 2846 -> 0 bytes
 ...s_1_1bounds__binomial__proportions-members.html |    43 +-
 ...asketches_1_1bounds__binomial__proportions.html |    81 +-
 ...nds__on__ratios__in__sampled__sets-members.html |    43 +-
 ...s_1_1bounds__on__ratios__in__sampled__sets.html |    81 +-
 ..._ratios__in__theta__sketched__sets-members.html |    41 +-
 ...nds__on__ratios__in__theta__sketched__sets.html |    83 +-
 ...s_1_1compact__array__tuple__sketch-members.html |   107 +-
 ...asketches_1_1compact__array__tuple__sketch.html |   246 +-
 ...tasketches_1_1compact__array__tuple__sketch.png |   Bin 1888 -> 1876 bytes
 ...s_1_1compact__theta__sketch__alloc-members.html |    79 +-
 ...asketches_1_1compact__theta__sketch__alloc.html |   371 +-
 ...tasketches_1_1compact__theta__sketch__alloc.png |   Bin 1645 -> 1601 bytes
 ...sketches_1_1compact__tuple__sketch-members.html |    79 +-
 ...lassdatasketches_1_1compact__tuple__sketch.html |   404 +-
 ...classdatasketches_1_1compact__tuple__sketch.png |   Bin 1736 -> 1132 bytes
 ...datasketches_1_1count__min__sketch-members.html |    73 +-
 .../classdatasketches_1_1count__min__sketch.html   |   437 +-
 ...datasketches_1_1cpc__sketch__alloc-members.html |    63 +-
 .../classdatasketches_1_1cpc__sketch__alloc.html   |   316 +-
 ...sdatasketches_1_1cpc__union__alloc-members.html |    47 +-
 .../classdatasketches_1_1cpc__union__alloc.html    |   132 +-
 ...ault__array__tuple__update__policy-members.html |    39 +-
 ...s_1_1default__array__tuple__update__policy.html |    45 +-
 ...assdatasketches_1_1density__sketch-members.html |    57 +-
 .../classdatasketches_1_1density__sketch.html      |   278 +-
 ...classdatasketches_1_1ebpps__sketch-members.html |    61 +-
 .../master/classdatasketches_1_1ebpps__sketch.html |   317 +-
 ...ketches_1_1frequent__items__sketch-members.html |    61 +-
 ...assdatasketches_1_1frequent__items__sketch.html |   310 +-
 ..._1_1frequent__items__sketch_1_1row-members.html |    43 +-
 ...sketches_1_1frequent__items__sketch_1_1row.html |    83 +-
 ...sdatasketches_1_1hll__union__alloc-members.html |    63 +-
 .../classdatasketches_1_1hll__union__alloc.html    |   329 +-
 ...tches_1_1jaccard__similarity__base-members.html |    45 +-
 ...sdatasketches_1_1jaccard__similarity__base.html |   101 +-
 .../classdatasketches_1_1kll__sketch-members.html  |    73 +-
 docs/master/classdatasketches_1_1kll__sketch.html  |   473 +-
 ...atasketches_1_1kolmogorov__smirnov-members.html |    41 +-
 .../classdatasketches_1_1kolmogorov__smirnov.html  |    71 +-
 ...sdatasketches_1_1quantiles__sketch-members.html |    71 +-
 .../classdatasketches_1_1quantiles__sketch.html    |   457 +-
 ...ketches_1_1quantiles__sorted__view-members.html |    47 +-
 ...assdatasketches_1_1quantiles__sorted__view.html |   146 +-
 .../classdatasketches_1_1req__sketch-members.html  |    75 +-
 docs/master/classdatasketches_1_1req__sketch.html  |   496 +-
 ...ketches_1_1theta__a__not__b__alloc-members.html |    41 +-
 ...assdatasketches_1_1theta__a__not__b__alloc.html |    69 +-
 ...tasketches_1_1theta__base__builder-members.html |    43 +-
 .../classdatasketches_1_1theta__base__builder.html |   104 +-
 .../classdatasketches_1_1theta__base__builder.png  |   Bin 2747 -> 1077 bytes
 ...ches_1_1theta__intersection__alloc-members.html |    43 +-
 ...datasketches_1_1theta__intersection__alloc.html |    94 +-
 ...tasketches_1_1theta__sketch__alloc-members.html |    67 +-
 .../classdatasketches_1_1theta__sketch__alloc.html |   131 +-
 .../classdatasketches_1_1theta__sketch__alloc.png  |   Bin 2172 -> 1025 bytes
 ...atasketches_1_1theta__union__alloc-members.html |    41 +-
 .../classdatasketches_1_1theta__union__alloc.html  |    75 +-
 ..._1_1theta__union__alloc_1_1builder-members.html |    45 +-
 ...sketches_1_1theta__union__alloc_1_1builder.html |    82 +-
 ...asketches_1_1theta__union__alloc_1_1builder.png |   Bin 637 -> 622 bytes
 ...ssdatasketches_1_1tuple__a__not__b-members.html |    41 +-
 .../classdatasketches_1_1tuple__a__not__b.html     |    78 +-
 .../classdatasketches_1_1tuple__a__not__b.png      |   Bin 911 -> 0 bytes
 ...tasketches_1_1tuple__base__builder-members.html |    43 +-
 .../classdatasketches_1_1tuple__base__builder.html |    67 +-
 .../classdatasketches_1_1tuple__base__builder.png  |   Bin 1111 -> 1076 bytes
 ...atasketches_1_1tuple__intersection-members.html |    43 +-
 .../classdatasketches_1_1tuple__intersection.html  |   103 +-
 .../classdatasketches_1_1tuple__intersection.png   |   Bin 1184 -> 0 bytes
 ...classdatasketches_1_1tuple__sketch-members.html |    57 +-
 .../master/classdatasketches_1_1tuple__sketch.html |   258 +-
 docs/master/classdatasketches_1_1tuple__sketch.png |   Bin 5337 -> 0 bytes
 .../classdatasketches_1_1tuple__union-members.html |    41 +-
 docs/master/classdatasketches_1_1tuple__union.html |    84 +-
 docs/master/classdatasketches_1_1tuple__union.png  |   Bin 1095 -> 0 bytes
 ...ketches_1_1tuple__union_1_1builder-members.html |    51 +-
 ...assdatasketches_1_1tuple__union_1_1builder.html |    96 +-
 ...lassdatasketches_1_1tuple__union_1_1builder.png |   Bin 1006 -> 981 bytes
 ...es_1_1update__array__tuple__sketch-members.html |   111 +-
 ...tasketches_1_1update__array__tuple__sketch.html |   203 +-
 ...atasketches_1_1update__array__tuple__sketch.png |   Bin 2464 -> 2436 bytes
 ...e__array__tuple__sketch_1_1builder-members.html |    51 +-
 ...1_1update__array__tuple__sketch_1_1builder.html |    94 +-
 ..._1_1update__array__tuple__sketch_1_1builder.png |   Bin 1323 -> 1289 bytes
 ...es_1_1update__theta__sketch__alloc-members.html |    87 +-
 ...tasketches_1_1update__theta__sketch__alloc.html |   443 +-
 ...atasketches_1_1update__theta__sketch__alloc.png |   Bin 1635 -> 1599 bytes
 ...e__theta__sketch__alloc_1_1builder-members.html |    45 +-
 ...1_1update__theta__sketch__alloc_1_1builder.html |    90 +-
 ..._1_1update__theta__sketch__alloc_1_1builder.png |   Bin 682 -> 666 bytes
 ...asketches_1_1update__tuple__sketch-members.html |    83 +-
 ...classdatasketches_1_1update__tuple__sketch.html |   444 +-
 .../classdatasketches_1_1update__tuple__sketch.png |   Bin 1911 -> 1238 bytes
 ..._1update__tuple__sketch_1_1builder-members.html |    51 +-
 ...etches_1_1update__tuple__sketch_1_1builder.html |    96 +-
 ...ketches_1_1update__tuple__sketch_1_1builder.png |   Bin 1006 -> 981 bytes
 ...ssdatasketches_1_1var__opt__sketch-members.html |    61 +-
 .../classdatasketches_1_1var__opt__sketch.html     |   327 +-
 ...assdatasketches_1_1var__opt__union-members.html |    49 +-
 .../classdatasketches_1_1var__opt__union.html      |   163 +-
 ...ped__compact__theta__sketch__alloc-members.html |    55 +-
 ..._1_1wrapped__compact__theta__sketch__alloc.html |   201 +-
 ...s_1_1wrapped__compact__theta__sketch__alloc.png |   Bin 1164 -> 1129 bytes
 docs/master/classes.html                           |    73 +-
 docs/master/common__defs_8hpp_source.html          |   292 +-
 ...compact__theta__sketch__parser_8hpp_source.html |   192 +-
 ...t__theta__sketch__parser__impl_8hpp_source.html |   354 +-
 docs/master/compression__data_8hpp_source.html     | 12090 +++++++++---------
 .../conditional__back__inserter_8hpp_source.html   |   182 +-
 docs/master/conditional__forward_8hpp_source.html  |   210 +-
 docs/master/count__min_8hpp_source.html            |   463 +-
 docs/master/count__min__impl_8hpp_source.html      |  1132 +-
 docs/master/count__zeros_8hpp_source.html          |   292 +-
 .../coupon__iterator-internal_8hpp_source.html     |   158 +-
 docs/master/coupon__iterator_8hpp_source.html      |   144 +-
 docs/master/cpc__common_8hpp_source.html           |   178 +-
 docs/master/cpc__compressor_8hpp_source.html       |   358 +-
 docs/master/cpc__compressor__impl_8hpp_source.html |  1576 ++-
 docs/master/cpc__confidence_8hpp_source.html       |   382 +-
 docs/master/cpc__sketch_8hpp_source.html           |   433 +-
 docs/master/cpc__sketch__impl_8hpp_source.html     |  1838 ++-
 docs/master/cpc__union_8hpp_source.html            |   227 +-
 docs/master/cpc__union__impl_8hpp_source.html      |   778 +-
 docs/master/cpc__util_8hpp_source.html             |   324 +-
 docs/master/density__sketch_8hpp_source.html       |   388 +-
 docs/master/density__sketch__impl_8hpp_source.html |  1193 +-
 .../dir_00b03cb5ae954e8a2b89b347e34477b0.html      |    43 +-
 .../dir_0449671fe79755ed26e25ef166543162.html      |    43 +-
 .../dir_0bcb9827d33186afae8dcf178a314956.html      |    79 +-
 .../dir_0c72de7c01a0490d64173f294d65fe37.html      |    47 +-
 .../dir_10f6c93aee96669dfb32574207aeb69c.html      |    43 +-
 .../dir_11a63523d45f2cb33b1e510397fbe77e.html      |    47 +-
 .../dir_11fbc4217d50ab21044e5ad6614aede5.html      |    77 +-
 .../dir_135820457b1e8e8dc5343e26fb29c1f8.html      |    43 +-
 .../dir_14b95f261231c5f650b9b0a09b57a6c5.html      |    43 +-
 .../dir_2629d1132294f29f2b0f1e3bcedeca02.html      |    43 +-
 .../dir_33f2f37c686242631bbdb651f95cf35d.html      |    53 +-
 .../dir_3f8742d40c9573c3b90638004faf146b.html      |    95 +-
 .../dir_577378e109fcef5e822b70d599376114.html      |    59 +-
 .../dir_70f016e26945e18c18bc29cf7b499574.html      |    51 +-
 .../dir_82f3a10095a8f2296c0cf5c491a57b02.html      |    43 +-
 .../dir_aa059cbaaa7f4410839cee554e9ff9ba.html      |   107 +-
 .../dir_bc45e258c7269dbde5716543a4c54103.html      |    43 +-
 .../dir_bdd9a5d540de89e9fe90efdfc6973a4f.html      |    43 +-
 .../dir_cd6dde39990e390e8133ccee011656ea.html      |    43 +-
 .../dir_cf88e39abd5376065d05109bb16db9ef.html      |    51 +-
 .../dir_e0b5a940fd5435f299127cc9babd5c8d.html      |    47 +-
 .../dir_e96b5dfe115c13cdeb36484e37aec42e.html      |    43 +-
 .../dir_f1edaa446c592ba78db5fad06a956381.html      |    43 +-
 .../dir_fabb7854c43508dcbf81254d1daad42f.html      |    71 +-
 docs/master/doc.png                                |   Bin 0 -> 746 bytes
 docs/master/doc.svg                                |    12 -
 docs/master/docd.svg                               |    12 -
 docs/master/doxygen.css                            |  1082 +-
 docs/master/doxygen.svg                            |     4 +-
 docs/master/dynsections.js                         |    71 -
 docs/master/ebpps__sample_8hpp_source.html         |   352 +-
 docs/master/ebpps__sample__impl_8hpp_source.html   |  1118 +-
 docs/master/ebpps__sketch_8hpp_source.html         |   373 +-
 docs/master/ebpps__sketch__impl_8hpp_source.html   |  1178 +-
 docs/master/files.html                             |    63 +-
 docs/master/folderclosed.png                       |   Bin 0 -> 616 bytes
 docs/master/folderclosed.svg                       |    11 -
 docs/master/folderclosedd.svg                      |    11 -
 docs/master/folderopen.png                         |   Bin 0 -> 597 bytes
 docs/master/folderopen.svg                         |    17 -
 docs/master/folderopend.svg                        |    12 -
 .../frequent__items__sketch_8hpp_source.html       |   433 +-
 .../frequent__items__sketch__impl_8hpp_source.html |  1114 +-
 docs/master/functions.html                         |    58 +-
 docs/master/functions_b.html                       |    71 +-
 docs/master/functions_c.html                       |    73 +-
 docs/master/functions_d.html                       |    69 +-
 docs/master/functions_e.html                       |    92 +-
 docs/master/functions_f.html                       |    47 +-
 docs/master/functions_func.html                    |    60 +-
 docs/master/functions_func_b.html                  |    73 +-
 docs/master/functions_func_c.html                  |    75 +-
 docs/master/functions_func_d.html                  |    71 +-
 docs/master/functions_func_e.html                  |    90 +-
 docs/master/functions_func_f.html                  |    49 +-
 docs/master/functions_func_g.html                  |   345 +-
 docs/master/functions_func_h.html                  |    53 +-
 docs/master/functions_func_i.html                  |    88 +-
 docs/master/functions_func_j.html                  |    44 +-
 docs/master/functions_func_k.html                  |    44 +-
 docs/master/functions_func_l.html                  |    45 +-
 docs/master/functions_func_m.html                  |    50 +-
 docs/master/functions_func_n.html                  |    44 +-
 docs/master/functions_func_o.html                  |    51 +-
 docs/master/functions_func_q.html                  |    44 +-
 docs/master/functions_func_r.html                  |    55 +-
 docs/master/functions_func_s.html                  |   101 +-
 docs/master/functions_func_t.html                  |    88 +-
 docs/master/functions_func_u.html                  |    70 +-
 docs/master/functions_func_v.html                  |    44 +-
 docs/master/functions_func_w.html                  |    44 +-
 docs/master/functions_func_x.html                  |    44 +-
 docs/master/functions_g.html                       |   343 +-
 docs/master/functions_h.html                       |    51 +-
 docs/master/functions_i.html                       |    86 +-
 docs/master/functions_j.html                       |    42 +-
 docs/master/functions_k.html                       |    42 +-
 docs/master/functions_l.html                       |    43 +-
 docs/master/functions_m.html                       |    48 +-
 docs/master/functions_n.html                       |    42 +-
 docs/master/functions_o.html                       |    49 +-
 docs/master/functions_q.html                       |    48 +-
 docs/master/functions_r.html                       |    53 +-
 docs/master/functions_s.html                       |    99 +-
 docs/master/functions_t.html                       |    86 +-
 docs/master/functions_type.html                    |    48 +-
 docs/master/functions_u.html                       |    68 +-
 docs/master/functions_v.html                       |    42 +-
 docs/master/functions_w.html                       |    42 +-
 docs/master/functions_x.html                       |    42 +-
 docs/master/hierarchy.html                         |   143 +-
 docs/master/hll_8hpp_source.html                   |   551 +-
 docs/master/hll_8private_8hpp_source.html          |   108 +-
 docs/master/icon__estimator_8hpp_source.html       |   594 +-
 docs/master/index.html                             |    41 +-
 docs/master/inv__pow2__table_8hpp_source.html      |   260 +-
 docs/master/jquery.js                              |    11 +-
 docs/master/kll__helper_8hpp_source.html           |   274 +-
 docs/master/kll__helper__impl_8hpp_source.html     |   694 +-
 docs/master/kll__sketch_8hpp_source.html           |   671 +-
 docs/master/kll__sketch__impl_8hpp_source.html     |  2258 ++--
 docs/master/kolmogorov__smirnov_8hpp_source.html   |   138 +-
 .../kolmogorov__smirnov__impl_8hpp_source.html     |   208 +-
 docs/master/kxp__byte__lookup_8hpp_source.html     |   208 +-
 docs/master/memory__operations_8hpp_source.html    |   188 +-
 docs/master/menu.js                                |    97 +-
 docs/master/minus.svg                              |     8 -
 docs/master/minusd.svg                             |     8 -
 docs/master/namespacedatasketches.html             |   323 +-
 .../namespacedatasketches_1_1cpc__constants.html   |    53 +-
 .../namespacedatasketches_1_1ebpps__constants.html |    45 +-
 .../namespacedatasketches_1_1kll__constants.html   |    53 +-
 ...espacedatasketches_1_1quantiles__constants.html |    53 +-
 .../namespacedatasketches_1_1req__constants.html   |    53 +-
 .../namespacedatasketches_1_1theta__constants.html |    67 +-
 ...mespacedatasketches_1_1var__opt__constants.html |    49 +-
 docs/master/namespacemembers.html                  |   218 +-
 docs/master/namespacemembers_enum.html             |    46 +-
 docs/master/namespacemembers_eval.html             |    58 +-
 docs/master/namespacemembers_func.html             |    42 +-
 docs/master/namespacemembers_type.html             |   114 +-
 docs/master/namespacemembers_vars.html             |    88 +-
 docs/master/namespaces.html                        |   149 +-
 docs/master/nav_fd.png                             |   Bin 169 -> 0 bytes
 docs/master/nav_hd.png                             |   Bin 114 -> 0 bytes
 docs/master/optional_8hpp_source.html              |   342 +-
 docs/master/plus.svg                               |     9 -
 docs/master/plusd.svg                              |     9 -
 docs/master/quantiles__sketch_8hpp_source.html     |   670 +-
 .../quantiles__sketch__impl_8hpp_source.html       |  2752 ++--
 .../quantiles__sorted__view_8hpp_source.html       |   392 +-
 .../quantiles__sorted__view__impl_8hpp_source.html |   324 +-
 docs/master/req__common_8hpp_source.html           |   130 +-
 docs/master/req__compactor_8hpp_source.html        |   324 +-
 docs/master/req__compactor__impl_8hpp_source.html  |  1108 +-
 docs/master/req__sketch_8hpp_source.html           |   560 +-
 docs/master/req__sketch__impl_8hpp_source.html     |  1770 ++-
 .../reverse__purge__hash__map_8hpp_source.html     |   312 +-
 ...everse__purge__hash__map__impl_8hpp_source.html |   782 +-
 docs/master/search/all_0.html                      |    37 +
 docs/master/search/all_0.js                        |     6 +-
 docs/master/search/all_1.html                      |    37 +
 docs/master/search/all_1.js                        |    16 +-
 docs/master/search/all_10.html                     |    37 +
 docs/master/search/all_10.js                       |     8 +-
 docs/master/search/all_11.html                     |    37 +
 docs/master/search/all_11.js                       |    28 +-
 docs/master/search/all_12.html                     |    37 +
 docs/master/search/all_12.js                       |    58 +-
 docs/master/search/all_13.html                     |    37 +
 docs/master/search/all_13.js                       |    16 +-
 docs/master/search/all_14.html                     |    37 +
 docs/master/search/all_14.js                       |     8 +-
 docs/master/search/all_15.html                     |    37 +
 docs/master/search/all_15.js                       |     6 +-
 docs/master/search/all_16.html                     |    37 +
 docs/master/search/all_16.js                       |     2 +-
 docs/master/search/all_2.html                      |    37 +
 docs/master/search/all_2.js                        |    31 +-
 docs/master/search/all_3.html                      |    37 +
 docs/master/search/all_3.js                        |    41 +-
 docs/master/search/all_4.html                      |    37 +
 docs/master/search/all_4.js                        |    20 +-
 docs/master/search/all_5.html                      |    37 +
 docs/master/search/all_5.js                        |     6 +-
 docs/master/search/all_6.html                      |    37 +
 docs/master/search/all_6.js                        |    98 +-
 docs/master/search/all_7.html                      |    37 +
 docs/master/search/all_7.js                        |    20 +-
 docs/master/search/all_8.html                      |    37 +
 docs/master/search/all_8.js                        |    12 +-
 docs/master/search/all_9.html                      |    37 +
 docs/master/search/all_9.js                        |     4 +-
 docs/master/search/all_a.html                      |    37 +
 docs/master/search/all_a.js                        |     4 +-
 docs/master/search/all_b.html                      |    37 +
 docs/master/search/all_b.js                        |     3 +-
 docs/master/search/all_c.html                      |    37 +
 docs/master/search/all_c.js                        |    14 +-
 docs/master/search/all_d.html                      |    37 +
 docs/master/search/all_d.js                        |     6 +-
 docs/master/search/all_e.html                      |    37 +
 docs/master/search/all_e.js                        |     2 +-
 docs/master/search/all_f.html                      |    37 +
 docs/master/search/all_f.js                        |    10 +-
 docs/master/search/classes_0.html                  |    37 +
 docs/master/search/classes_0.js                    |     6 +-
 docs/master/search/classes_1.html                  |    37 +
 docs/master/search/classes_1.js                    |    12 +-
 docs/master/search/classes_10.html                 |    37 +
 docs/master/search/classes_10.js                   |     2 +-
 docs/master/search/classes_2.html                  |    37 +
 docs/master/search/classes_2.js                    |    14 +-
 docs/master/search/classes_3.html                  |    37 +
 docs/master/search/classes_3.js                    |     8 +-
 docs/master/search/classes_4.html                  |    37 +
 docs/master/search/classes_4.js                    |     2 +-
 docs/master/search/classes_5.html                  |    37 +
 docs/master/search/classes_5.js                    |     2 +-
 docs/master/search/classes_6.html                  |    37 +
 docs/master/search/classes_6.js                    |     6 +-
 docs/master/search/classes_7.html                  |    37 +
 docs/master/search/classes_7.js                    |     2 +-
 docs/master/search/classes_8.html                  |    37 +
 docs/master/search/classes_8.js                    |     4 +-
 docs/master/search/classes_9.html                  |    37 +
 docs/master/search/classes_9.js                    |     8 +-
 docs/master/search/classes_a.html                  |    37 +
 docs/master/search/classes_a.js                    |     4 +-
 docs/master/search/classes_b.html                  |    37 +
 docs/master/search/classes_b.js                    |     6 +-
 docs/master/search/classes_c.html                  |    37 +
 docs/master/search/classes_c.js                    |    40 +-
 docs/master/search/classes_d.html                  |    37 +
 docs/master/search/classes_d.js                    |     8 +-
 docs/master/search/classes_e.html                  |    37 +
 docs/master/search/classes_e.js                    |     8 +-
 docs/master/search/classes_f.html                  |    37 +
 docs/master/search/classes_f.js                    |     2 +-
 docs/master/search/close.svg                       |    19 +-
 docs/master/search/enums_0.html                    |    37 +
 docs/master/search/enums_0.js                      |     2 +-
 docs/master/search/enums_1.html                    |    37 +
 docs/master/search/enums_1.js                      |     2 +-
 docs/master/search/enumvalues_0.html               |    37 +
 docs/master/search/enumvalues_0.js                 |     6 +-
 docs/master/search/enumvalues_1.html               |    37 +
 docs/master/search/enumvalues_1.js                 |     4 +-
 docs/master/search/functions_0.html                |    37 +
 docs/master/search/functions_0.js                  |    10 +-
 docs/master/search/functions_1.html                |    37 +
 docs/master/search/functions_1.js                  |     6 +-
 docs/master/search/functions_10.html               |    37 +
 docs/master/search/functions_10.js                 |     4 +-
 docs/master/search/functions_11.html               |    37 +
 docs/master/search/functions_11.js                 |    22 +-
 docs/master/search/functions_12.html               |    37 +
 docs/master/search/functions_12.js                 |    18 +-
 docs/master/search/functions_13.html               |    37 +
 docs/master/search/functions_13.js                 |     6 +-
 docs/master/search/functions_14.html               |    37 +
 docs/master/search/functions_14.js                 |     2 +-
 docs/master/search/functions_15.html               |    37 +
 docs/master/search/functions_15.js                 |     2 +-
 docs/master/search/functions_16.html               |    37 +
 docs/master/search/functions_16.js                 |     2 +-
 docs/master/search/functions_2.html                |    37 +
 docs/master/search/functions_2.js                  |    18 +-
 docs/master/search/functions_3.html                |    37 +
 docs/master/search/functions_3.js                  |     8 +-
 docs/master/search/functions_4.html                |    37 +
 docs/master/search/functions_4.js                  |    18 +-
 docs/master/search/functions_5.html                |    37 +
 docs/master/search/functions_5.js                  |     4 +-
 docs/master/search/functions_6.html                |    37 +
 docs/master/search/functions_6.js                  |    98 +-
 docs/master/search/functions_7.html                |    37 +
 docs/master/search/functions_7.js                  |     6 +-
 docs/master/search/functions_8.html                |    37 +
 docs/master/search/functions_8.js                  |    10 +-
 docs/master/search/functions_9.html                |    37 +
 docs/master/search/functions_9.js                  |     2 +-
 docs/master/search/functions_a.html                |    37 +
 docs/master/search/functions_a.js                  |     2 +-
 docs/master/search/functions_b.html                |    37 +
 docs/master/search/functions_b.js                  |     2 +-
 docs/master/search/functions_c.html                |    37 +
 docs/master/search/functions_c.js                  |     2 +-
 docs/master/search/functions_d.html                |    37 +
 docs/master/search/functions_d.js                  |     2 +-
 docs/master/search/functions_e.html                |    37 +
 docs/master/search/functions_e.js                  |     2 +-
 docs/master/search/functions_f.html                |    37 +
 docs/master/search/functions_f.js                  |     2 +-
 docs/master/search/mag.svg                         |    24 -
 docs/master/search/mag_d.svg                       |    24 -
 docs/master/search/mag_sel.svg                     |    53 +-
 docs/master/search/mag_seld.svg                    |    31 -
 docs/master/search/namespaces_0.html               |    37 +
 docs/master/search/namespaces_0.js                 |    16 +-
 docs/master/search/nomatches.html                  |    13 +
 docs/master/search/pages_0.html                    |    37 +
 docs/master/search/pages_0.js                      |     2 +-
 docs/master/search/pages_1.js                      |     6 -
 docs/master/search/pages_2.js                      |     4 -
 docs/master/search/pages_3.js                      |     4 -
 docs/master/search/search.css                      |   122 +-
 docs/master/search/search.js                       |   188 +-
 docs/master/search/search_l.png                    |   Bin 0 -> 567 bytes
 docs/master/search/search_m.png                    |   Bin 0 -> 158 bytes
 docs/master/search/search_r.png                    |   Bin 0 -> 553 bytes
 docs/master/search/searchdata.js                   |     2 +-
 docs/master/search/typedefs_0.html                 |    37 +
 docs/master/search/typedefs_0.js                   |     6 +-
 docs/master/search/typedefs_1.html                 |    37 +
 docs/master/search/typedefs_1.js                   |     8 +-
 docs/master/search/typedefs_2.html                 |    37 +
 docs/master/search/typedefs_2.js                   |     4 +-
 docs/master/search/typedefs_3.html                 |    37 +
 docs/master/search/typedefs_3.js                   |     2 +-
 docs/master/search/typedefs_4.html                 |    37 +
 docs/master/search/typedefs_4.js                   |     4 +-
 docs/master/search/typedefs_5.html                 |    37 +
 docs/master/search/typedefs_5.js                   |     2 +-
 docs/master/search/typedefs_6.html                 |    37 +
 docs/master/search/typedefs_6.js                   |     2 +-
 docs/master/search/typedefs_7.html                 |    37 +
 docs/master/search/typedefs_7.js                   |     8 +-
 docs/master/search/typedefs_8.html                 |    37 +
 docs/master/search/typedefs_8.js                   |     4 +-
 docs/master/search/typedefs_9.html                 |    37 +
 docs/master/search/typedefs_9.js                   |     2 +-
 docs/master/search/variables_0.html                |    37 +
 docs/master/search/variables_0.js                  |     6 +-
 docs/master/search/variables_1.html                |    37 +
 docs/master/search/variables_1.js                  |     2 +-
 docs/master/search/variables_2.html                |    37 +
 docs/master/search/variables_2.js                  |    12 +-
 docs/master/serde_8hpp_source.html                 |   482 +-
 docs/master/splitbard.png                          |   Bin 282 -> 0 bytes
 ...fault__array__tuple__union__policy-members.html |    39 +-
 ...es_1_1default__array__tuple__union__policy.html |    45 +-
 .../structdatasketches_1_1serde-members.html       |    43 +-
 docs/master/structdatasketches_1_1serde.html       |    97 +-
 ...thmetic_3_54408b64e8a7918b8a177594393deb4e.html |   103 +-
 ...thmetic_3_b88db3e3815ed62e4ec1d940d0f8fcc8.html |    43 +-
 ...es_1_1serde_3_01std_1_1string_01_4-members.html |    43 +-
 ...tasketches_1_1serde_3_01std_1_1string_01_4.html |   101 +-
 docs/master/tab_ad.png                             |   Bin 135 -> 0 bytes
 docs/master/tab_bd.png                             |   Bin 173 -> 0 bytes
 docs/master/tab_hd.png                             |   Bin 180 -> 0 bytes
 docs/master/tab_sd.png                             |   Bin 188 -> 0 bytes
 docs/master/tabs.css                               |     2 +-
 docs/master/theta__a__not__b_8hpp_source.html      |   163 +-
 .../master/theta__a__not__b__impl_8hpp_source.html |   134 +-
 docs/master/theta__comparators_8hpp_source.html    |   142 +-
 docs/master/theta__constants_8hpp_source.html      |   138 +-
 docs/master/theta__helpers_8hpp_source.html        |   190 +-
 docs/master/theta__intersection_8hpp_source.html   |   197 +-
 .../theta__intersection__base_8hpp_source.html     |   164 +-
 ...heta__intersection__base__impl_8hpp_source.html |   292 +-
 .../theta__intersection__impl_8hpp_source.html     |   160 +-
 .../theta__jaccard__similarity_8hpp_source.html    |   122 +-
 ...eta__jaccard__similarity__base_8hpp_source.html |   294 +-
 .../theta__set__difference__base_8hpp_source.html  |   154 +-
 ...a__set__difference__base__impl_8hpp_source.html |   218 +-
 docs/master/theta__sketch_8hpp_source.html         |   839 +-
 docs/master/theta__sketch__impl_8hpp_source.html   |  2080 ++-
 docs/master/theta__union_8hpp_source.html          |   232 +-
 docs/master/theta__union__base_8hpp_source.html    |   170 +-
 .../theta__union__base__impl_8hpp_source.html      |   238 +-
 docs/master/theta__union__impl_8hpp_source.html    |   178 +-
 .../theta__update__sketch__base_8hpp_source.html   |   513 +-
 ...ta__update__sketch__base__impl_8hpp_source.html |   956 +-
 docs/master/tuple__a__not__b_8hpp_source.html      |   159 +-
 .../master/tuple__a__not__b__impl_8hpp_source.html |   116 +-
 docs/master/tuple__intersection_8hpp_source.html   |   227 +-
 .../tuple__intersection__impl_8hpp_source.html     |   146 +-
 .../tuple__jaccard__similarity_8hpp_source.html    |   126 +-
 docs/master/tuple__sketch_8hpp_source.html         |   839 +-
 docs/master/tuple__sketch__impl_8hpp_source.html   |  1509 +--
 docs/master/tuple__union_8hpp_source.html          |   256 +-
 docs/master/tuple__union__impl_8hpp_source.html    |   170 +-
 docs/master/u32__table_8hpp_source.html            |   216 +-
 docs/master/u32__table__impl_8hpp_source.html      |   578 +-
 docs/master/var__opt__sketch_8hpp_source.html      |   745 +-
 .../master/var__opt__sketch__impl_8hpp_source.html |  3637 +++---
 docs/master/var__opt__union_8hpp_source.html       |   426 +-
 docs/master/var__opt__union__impl_8hpp_source.html |  1343 +-
 docs/master/xxhash64_8h_source.html                |   414 +-
 559 files changed, 57037 insertions(+), 59604 deletions(-)

diff --git a/docs/master/AuxHashMap-internal_8hpp_source.html b/docs/master/AuxHashMap-internal_8hpp_source.html
index 8391dac..3e45324 100644
--- a/docs/master/AuxHashMap-internal_8hpp_source.html
+++ b/docs/master/AuxHashMap-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/AuxHashMap-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,291 +65,292 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">AuxHashMap-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">AuxHashMap-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _AUXHASHMAP_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _AUXHASHMAP_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &quot;HllUtil.hpp&quot;</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#include &quot;AuxHashMap.hpp&quot;</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span>AuxHashMap&lt;A&gt;::AuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A&amp; allocator):</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>lgConfigK(lgConfigK),</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>lgAuxArrInts(lgAuxArrInts),</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span>auxCount(0),</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>entries(1ULL &lt;&lt; lgAuxArrInts, 0, allocator)</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>{}</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::newAuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A&amp; allocator) {</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap&lt;A&gt;(lgAuxArrInts, lgConfigK, allocator);</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>}</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span> </div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::newAuxHashMap(<span class="keyword">const</span> AuxHashMap&amp; that) {</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (ahmAlloc(that.entries.get_allocator()).allocate(1)) AuxHashMap&lt;A&gt;(that);</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>}</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span> </div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::deserialize(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len,</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>                                          uint8_t lgConfigK,</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>                                          uint32_t auxCount, uint8_t lgAuxArrInts,</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>                                          <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A&amp; allocator) {</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>  uint8_t lgArrInts = lgAuxArrInts;</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>  <span class="keywordflow">if</span> (srcCompact) { <span class="comment">// early compact versions didn&#39;t use LgArr byte field so ignore input</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>    lgArrInts = HllUtil&lt;A&gt;::computeLgArrInts(HLL, auxCount, lgConfigK);</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>    lgArrInts = lgAuxArrInts;</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>  }</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>  </div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; lgConfigK) - 1;</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span> </div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>  AuxHashMap&lt;A&gt;* auxHashMap;</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>  <span class="keyword">const</span> uint32_t* auxPtr = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint32_t*<span class="keyword">&gt;</span>(bytes);</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>  <span class="keywordflow">if</span> (srcCompact) {</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>    <span class="keywordflow">if</span> (len &lt; auxCount * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) {</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>      <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input array too small to hold AuxHashMap image&quot;</span>);</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>    }</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>    auxHashMap = <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap&lt;A&gt;(lgArrInts, lgConfigK, allocator);</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; auxCount; ++i) {</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>      <span class="keyword">const</span> uint32_t pair = auxPtr[i];</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>      <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(pair) &amp; configKmask;</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>      <span class="keyword">const</span> uint8_t value = HllUtil&lt;A&gt;::getValue(pair);</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>      auxHashMap-&gt;mustAdd(slotNo, value);</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>    }</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>    uint32_t itemsToRead = 1 &lt;&lt; lgAuxArrInts;</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>    <span class="keywordflow">if</span> (len &lt; itemsToRead * <span class="keyword">sizeof</span>(uint32_t)) {</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>      <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input array too small to hold AuxHashMap image&quot;</span>);</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>    }</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>    auxHashMap = <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap&lt;A&gt;(lgArrInts, lgConfigK, allocator);</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; itemsToRead; ++i) {</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>      <span class="keyword">const</span> uint32_t pair = auxPtr[i];</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>      <span class="keywordflow">if</span> (pair == hll_constants::EMPTY) { <span class="keywordflow">continue</span>; }</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>      <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(pair) &amp; configKmask;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>      <span class="keyword">const</span> uint8_t value = HllUtil&lt;A&gt;::getValue(pair);</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>      auxHashMap-&gt;mustAdd(slotNo, value);</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>    }</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>  }</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span> </div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>  <span class="keywordflow">if</span> (auxHashMap-&gt;getAuxCount() != auxCount) {</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>    make_deleter()(auxHashMap);</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Deserialized AuxHashMap has wrong number of entries&quot;</span>);</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>  }</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span> </div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>  <span class="keywordflow">return</span> auxHashMap;                                    </div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>}</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span> </div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::deserialize(std::istream&amp; is, uint8_t lgConfigK,</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>                                          uint32_t auxCount, uint8_t lgAuxArrInts,</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>                                          <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A&amp; allocator) {</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>  uint8_t lgArrInts = lgAuxArrInts;</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>  <span class="keywordflow">if</span> (srcCompact) { <span class="comment">// early compact versions didn&#39;t use LgArr byte field so ignore input</span></div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>    lgArrInts = HllUtil&lt;A&gt;::computeLgArrInts(HLL, auxCount, lgConfigK);</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>    lgArrInts = lgAuxArrInts;</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>  }</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span> </div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>  AuxHashMap&lt;A&gt;* auxHashMap = <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap&lt;A&gt;(lgArrInts, lgConfigK, allocator);</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>  <span class="keyword">typedef</span> std::unique_ptr&lt;AuxHashMap&lt;A&gt;, std::function&lt;void(AuxHashMap&lt;A&gt;*)&gt;&gt; aux_hash_map_ptr;</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>  aux_hash_map_ptr aux_ptr(auxHashMap, auxHashMap-&gt;make_deleter());</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span> </div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; lgConfigK) - 1;</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span> </div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>  <span class="keywordflow">if</span> (srcCompact) {</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; auxCount; ++i) {</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>      <span class="keyword">const</span> <span class="keyword">auto</span> pair = read&lt;int&gt;(is);</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>      uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(pair) &amp; configKmask;</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>      uint8_t value = HllUtil&lt;A&gt;::getValue(pair);</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>      auxHashMap-&gt;mustAdd(slotNo, value);</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span>    }</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span>  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>    <span class="keyword">const</span> uint32_t itemsToRead = 1 &lt;&lt; lgAuxArrInts;</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span>    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; itemsToRead; ++i) {</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>      <span class="keyword">const</span> <span class="keyword">auto</span> pair = read&lt;int&gt;(is);</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>      <span class="keywordflow">if</span> (pair == hll_constants::EMPTY) { <span class="keywordflow">continue</span>; }</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span>      <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(pair) &amp; configKmask;</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>      <span class="keyword">const</span> uint8_t value = HllUtil&lt;A&gt;::getValue(pair);</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>      auxHashMap-&gt;mustAdd(slotNo, value);</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>    }</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span>  }</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span> </div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>  <span class="keywordflow">if</span> (auxHashMap-&gt;getAuxCount() != auxCount) {</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>    make_deleter()(auxHashMap);</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Deserialized AuxHashMap has wrong number of entries&quot;</span>);</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>  }</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span> </div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>  <span class="keywordflow">return</span> aux_ptr.release();</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>}</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span> </div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>std::function&lt;void(AuxHashMap&lt;A&gt;*)&gt; AuxHashMap&lt;A&gt;::make_deleter() {</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span>  <span class="keywordflow">return</span> [](AuxHashMap&lt;A&gt;* ptr) {</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span>    ahmAlloc alloc(ptr-&gt;entries.get_allocator());</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span>    ptr-&gt;~AuxHashMap();</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>    alloc.deallocate(ptr, 1);</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>  };</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>}</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span> </div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (ahmAlloc(entries.get_allocator()).allocate(1)) AuxHashMap&lt;A&gt;(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>}</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span> </div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span>uint32_t AuxHashMap&lt;A&gt;::getAuxCount()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span>  <span class="keywordflow">return</span> auxCount;</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span>}</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span> </div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span>uint32_t* AuxHashMap&lt;A&gt;::getAuxIntArr(){</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>  <span class="keywordflow">return</span> entries.data();</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span>}</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span>uint8_t AuxHashMap&lt;A&gt;::getLgAuxArrInts()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span>  <span class="keywordflow">return</span> lgAuxArrInts;</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>}</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span> </div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span>uint32_t AuxHashMap&lt;A&gt;::getCompactSizeBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>  <span class="keywordflow">return</span> auxCount &lt;&lt; 2;</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>}</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span> </div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span>uint32_t AuxHashMap&lt;A&gt;::getUpdatableSizeBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>  <span class="keywordflow">return</span> 4 &lt;&lt; lgAuxArrInts;</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span>}</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span> </div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span><span class="keywordtype">void</span> AuxHashMap&lt;A&gt;::mustAdd(uint32_t slotNo, uint8_t value) {</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>  <span class="keyword">const</span> int32_t index = find(entries.data(), lgAuxArrInts, lgConfigK, slotNo);</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>  <span class="keyword">const</span> uint32_t entry_pair = HllUtil&lt;A&gt;::pair(slotNo, value);</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span>  <span class="keywordflow">if</span> (index &gt;= 0) {</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Found a slotNo that should not be there: SlotNo: &quot;</span></div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span>                                + std::to_string(slotNo) + <span class="stringliteral">&quot;, Value: &quot;</span> + std::to_string(value));</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>  }</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span> </div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>  <span class="comment">// found empty entry</span></div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>  entries[~index] = entry_pair;</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>  ++auxCount;</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>  checkGrow();</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>}</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span> </div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>uint8_t AuxHashMap&lt;A&gt;::mustFindValueFor(uint32_t slotNo)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>  <span class="keyword">const</span> int32_t index = find(entries.data(), lgAuxArrInts, lgConfigK, slotNo);</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>  <span class="keywordflow">if</span> (index &gt;= 0) {</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>    <span class="keywordflow">return</span> HllUtil&lt;A&gt;::getValue(entries[index]);</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span>  }</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span> </div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;slotNo not found: &quot;</span> + std::to_string(slotNo));</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>}</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span> </div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span><span class="keywordtype">void</span> AuxHashMap&lt;A&gt;::mustReplace(uint32_t slotNo, uint8_t value) {</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>  <span class="keyword">const</span> int32_t idx = find(entries.data(), lgAuxArrInts, lgConfigK, slotNo);</div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>  <span class="keywordflow">if</span> (idx &gt;= 0) {</div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>    entries[idx] = HllUtil&lt;A&gt;::pair(slotNo, value);</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>    <span class="keywordflow">return</span>;</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span>  }</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span> </div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Pair not found: SlotNo: &quot;</span> + std::to_string(slotNo)</div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span>                              + <span class="stringliteral">&quot;, Value: &quot;</span> + std::to_string(value));</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span>}</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span> </div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span><span class="keywordtype">void</span> AuxHashMap&lt;A&gt;::checkGrow() {</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>  <span class="keywordflow">if</span> ((hll_constants::RESIZE_DENOM * auxCount) &gt; (hll_constants::RESIZE_NUMER * (1 &lt;&lt; lgAuxArrInts))) {</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>    growAuxSpace();</div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>  }</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>}</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span> </div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span><span class="keywordtype">void</span> AuxHashMap&lt;A&gt;::growAuxSpace() {</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> configKmask = (1 &lt;&lt; lgConfigK) - 1;</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> newArrLen = 1 &lt;&lt; ++lgAuxArrInts;</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>  vector_int entries_new(newArrLen, 0, entries.get_allocator());</div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; entries.size(); ++i) {</div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span>    <span class="keyword">const</span> uint32_t fetched = entries[i];</div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span>    <span class="keywordflow">if</span> (fetched != hll_constants::EMPTY) {</div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span>      <span class="comment">// find empty in new array</span></div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span>      <span class="keyword">const</span> int32_t idx = find(entries_new.data(), lgAuxArrInts, lgConfigK, fetched &amp; configKmask);</div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span>      entries_new[~idx] = fetched;</div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span>    }</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span>  }</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span>  entries = std::move(entries_new);</div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span>}</div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span> </div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span><span class="comment">//Searches the Aux arr hash table for an empty or a matching slotNo depending on the context.</span></div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span><span class="comment">//If entire entry is empty, returns one&#39;s complement of index = found empty.</span></div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span><span class="comment">//If entry contains given slotNo, returns its index = found slotNo.</span></div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span><span class="comment">//Continues searching.</span></div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span><span class="comment">//If the probe comes back to original index, throws an exception.</span></div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>int32_t AuxHashMap&lt;A&gt;::find(<span class="keyword">const</span> uint32_t* auxArr, uint8_t lgAuxArrInts, uint8_t lgConfigK, uint32_t slotNo) {</div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>  <span class="keyword">const</span> uint32_t auxArrMask = (1 &lt;&lt; lgAuxArrInts) - 1;</div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span>  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; lgConfigK) - 1;</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span>  uint32_t probe = slotNo &amp; auxArrMask;</div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span>  <span class="keyword">const</span> uint32_t loopIndex = probe;</div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span>  <span class="keywordflow">do</span> {</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span>    <span class="keyword">const</span> uint32_t arrVal = auxArr[probe];</div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span>    <span class="keywordflow">if</span> (arrVal == hll_constants::EMPTY) { <span class="comment">//Compares on entire entry</span></div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span>      <span class="keywordflow">return</span> ~probe; <span class="comment">//empty</span></div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span>    }</div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (slotNo == (arrVal &amp; configKmask)) { <span class="comment">//Compares only on slotNo</span></div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>      <span class="keywordflow">return</span> probe; <span class="comment">//found given slotNo, return probe = index into aux array</span></div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span>    }</div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span>    <span class="keyword">const</span> uint32_t stride = (slotNo &gt;&gt; lgAuxArrInts) | 1;</div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span>    probe = (probe + stride) &amp; auxArrMask;</div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span>  } <span class="keywordflow">while</span> (probe != loopIndex);</div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Key not found and no empty slots!&quot;</span>);</div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>}</div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span> </div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span>coupon_iterator&lt;A&gt; AuxHashMap&lt;A&gt;::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span>  <span class="keywordflow">return</span> coupon_iterator&lt;A&gt;(entries.data(), 1ULL &lt;&lt; lgAuxArrInts, 0, all);</div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>}</div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span> </div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>coupon_iterator&lt;A&gt; AuxHashMap&lt;A&gt;::end()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span>  <span class="keywordflow">return</span> coupon_iterator&lt;A&gt;(entries.data(), 1ULL &lt;&lt; lgAuxArrInts, 1ULL &lt;&lt; lgAuxArrInts, <span class="keyword">false</span>);</div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span>}</div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span> </div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span>}</div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno">  276</span> </div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno">  277</span><span class="preprocessor">#endif </span><span class="comment">// _AUXHASHMAP_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _AUXHASHMAP_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _AUXHASHMAP_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;HllUtil.hpp&quot;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;AuxHashMap.hpp&quot;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;AuxHashMap&lt;A&gt;::AuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A&amp; allocator):</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;lgConfigK(lgConfigK),</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;lgAuxArrInts(lgAuxArrInts),</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;auxCount(0),</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;entries(1ULL &lt;&lt; lgAuxArrInts, 0, allocator)</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;{}</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::newAuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A&amp; allocator) {</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap&lt;A&gt;(lgAuxArrInts, lgConfigK, allocator);</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;}</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::newAuxHashMap(<span class="keyword">const</span> AuxHashMap&amp; that) {</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (ahmAlloc(that.entries.get_allocator()).allocate(1)) AuxHashMap&lt;A&gt;(that);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;}</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::deserialize(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len,</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;                                          uint8_t lgConfigK,</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;                                          uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;                                          <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A&amp; allocator) {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  uint8_t lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  <span class="keywordflow">if</span> (srcCompact) { <span class="comment">// early compact versions didn&#39;t use LgArr byte field so ignore input</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    lgArrInts = HllUtil&lt;A&gt;::computeLgArrInts(HLL, auxCount, lgConfigK);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; lgConfigK) - 1;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  AuxHashMap&lt;A&gt;* auxHashMap;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  <span class="keyword">const</span> uint32_t* auxPtr = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint32_t*<span class="keyword">&gt;</span>(bytes);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  <span class="keywordflow">if</span> (srcCompact) {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="keywordflow">if</span> (len &lt; auxCount * <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>)) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input array too small to hold AuxHashMap image&quot;</span>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    }</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    auxHashMap = <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap&lt;A&gt;(lgArrInts, lgConfigK, allocator);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; auxCount; ++i) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;      <span class="keyword">const</span> uint32_t pair = auxPtr[i];</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;      <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(pair) &amp; configKmask;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;      <span class="keyword">const</span> uint8_t value = HllUtil&lt;A&gt;::getValue(pair);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;      auxHashMap-&gt;mustAdd(slotNo, value);</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    uint32_t itemsToRead = 1 &lt;&lt; lgAuxArrInts;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordflow">if</span> (len &lt; itemsToRead * <span class="keyword">sizeof</span>(uint32_t)) {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;      <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input array too small to hold AuxHashMap image&quot;</span>);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    }</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    auxHashMap = <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap&lt;A&gt;(lgArrInts, lgConfigK, allocator);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; itemsToRead; ++i) {</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;      <span class="keyword">const</span> uint32_t pair = auxPtr[i];</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;      <span class="keywordflow">if</span> (pair == hll_constants::EMPTY) { <span class="keywordflow">continue</span>; }</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;      <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(pair) &amp; configKmask;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;      <span class="keyword">const</span> uint8_t value = HllUtil&lt;A&gt;::getValue(pair);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      auxHashMap-&gt;mustAdd(slotNo, value);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  }</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="keywordflow">if</span> (auxHashMap-&gt;getAuxCount() != auxCount) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    make_deleter()(auxHashMap);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Deserialized AuxHashMap has wrong number of entries&quot;</span>);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  }</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160; </div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  <span class="keywordflow">return</span> auxHashMap;                                    </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;}</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160; </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::deserialize(std::istream&amp; is, uint8_t lgConfigK,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;                                          uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;                                          <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A&amp; allocator) {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  uint8_t lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  <span class="keywordflow">if</span> (srcCompact) { <span class="comment">// early compact versions didn&#39;t use LgArr byte field so ignore input</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    lgArrInts = HllUtil&lt;A&gt;::computeLgArrInts(HLL, auxCount, lgConfigK);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    lgArrInts = lgAuxArrInts;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  AuxHashMap&lt;A&gt;* auxHashMap = <span class="keyword">new</span> (ahmAlloc(allocator).allocate(1)) AuxHashMap&lt;A&gt;(lgArrInts, lgConfigK, allocator);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  <span class="keyword">typedef</span> std::unique_ptr&lt;AuxHashMap&lt;A&gt;, std::function&lt;void(AuxHashMap&lt;A&gt;*)&gt;&gt; aux_hash_map_ptr;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  aux_hash_map_ptr aux_ptr(auxHashMap, auxHashMap-&gt;make_deleter());</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; lgConfigK) - 1;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160; </div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  <span class="keywordflow">if</span> (srcCompact) {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; auxCount; ++i) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;      <span class="keyword">const</span> <span class="keyword">auto</span> pair = read&lt;int&gt;(is);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(pair) &amp; configKmask;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;      uint8_t value = HllUtil&lt;A&gt;::getValue(pair);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;      auxHashMap-&gt;mustAdd(slotNo, value);</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  } <span class="keywordflow">else</span> { <span class="comment">// updatable</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <span class="keyword">const</span> uint32_t itemsToRead = 1 &lt;&lt; lgAuxArrInts;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; itemsToRead; ++i) {</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;      <span class="keyword">const</span> <span class="keyword">auto</span> pair = read&lt;int&gt;(is);</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;      <span class="keywordflow">if</span> (pair == hll_constants::EMPTY) { <span class="keywordflow">continue</span>; }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;      <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(pair) &amp; configKmask;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;      <span class="keyword">const</span> uint8_t value = HllUtil&lt;A&gt;::getValue(pair);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;      auxHashMap-&gt;mustAdd(slotNo, value);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    }</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  }</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160; </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="keywordflow">if</span> (auxHashMap-&gt;getAuxCount() != auxCount) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    make_deleter()(auxHashMap);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Deserialized AuxHashMap has wrong number of entries&quot;</span>);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  }</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="keywordflow">return</span> aux_ptr.release();</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;}</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160; </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;std::function&lt;void(AuxHashMap&lt;A&gt;*)&gt; AuxHashMap&lt;A&gt;::make_deleter() {</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  <span class="keywordflow">return</span> [](AuxHashMap&lt;A&gt;* ptr) {</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    ahmAlloc alloc(ptr-&gt;entries.get_allocator());</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    ptr-&gt;~AuxHashMap();</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    alloc.deallocate(ptr, 1);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  };</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;}</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160; </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;AuxHashMap&lt;A&gt;* AuxHashMap&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (ahmAlloc(entries.get_allocator()).allocate(1)) AuxHashMap&lt;A&gt;(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;}</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;uint32_t AuxHashMap&lt;A&gt;::getAuxCount()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  <span class="keywordflow">return</span> auxCount;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;}</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160; </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;uint32_t* AuxHashMap&lt;A&gt;::getAuxIntArr(){</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  <span class="keywordflow">return</span> entries.data();</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;}</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;uint8_t AuxHashMap&lt;A&gt;::getLgAuxArrInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  <span class="keywordflow">return</span> lgAuxArrInts;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;}</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160; </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;uint32_t AuxHashMap&lt;A&gt;::getCompactSizeBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  <span class="keywordflow">return</span> auxCount &lt;&lt; 2;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;}</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160; </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;uint32_t AuxHashMap&lt;A&gt;::getUpdatableSizeBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  <span class="keywordflow">return</span> 4 &lt;&lt; lgAuxArrInts;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;}</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="keywordtype">void</span> AuxHashMap&lt;A&gt;::mustAdd(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  <span class="keyword">const</span> int32_t index = find(entries.data(), lgAuxArrInts, lgConfigK, slotNo);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;  <span class="keyword">const</span> uint32_t entry_pair = HllUtil&lt;A&gt;::pair(slotNo, value);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  <span class="keywordflow">if</span> (index &gt;= 0) {</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Found a slotNo that should not be there: SlotNo: &quot;</span></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;                                + std::to_string(slotNo) + <span class="stringliteral">&quot;, Value: &quot;</span> + std::to_string(value));</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  }</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160; </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;  <span class="comment">// found empty entry</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  entries[~index] = entry_pair;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  ++auxCount;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  checkGrow();</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;}</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160; </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;uint8_t AuxHashMap&lt;A&gt;::mustFindValueFor(uint32_t slotNo)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="keyword">const</span> int32_t index = find(entries.data(), lgAuxArrInts, lgConfigK, slotNo);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  <span class="keywordflow">if</span> (index &gt;= 0) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <span class="keywordflow">return</span> HllUtil&lt;A&gt;::getValue(entries[index]);</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  }</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160; </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;slotNo not found: &quot;</span> + std::to_string(slotNo));</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;}</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160; </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="keywordtype">void</span> AuxHashMap&lt;A&gt;::mustReplace(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;  <span class="keyword">const</span> int32_t idx = find(entries.data(), lgAuxArrInts, lgConfigK, slotNo);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;  <span class="keywordflow">if</span> (idx &gt;= 0) {</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    entries[idx] = HllUtil&lt;A&gt;::pair(slotNo, value);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;  }</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160; </div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Pair not found: SlotNo: &quot;</span> + std::to_string(slotNo)</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;                              + <span class="stringliteral">&quot;, Value: &quot;</span> + std::to_string(value));</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;}</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="keywordtype">void</span> AuxHashMap&lt;A&gt;::checkGrow() {</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  <span class="keywordflow">if</span> ((hll_constants::RESIZE_DENOM * auxCount) &gt; (hll_constants::RESIZE_NUMER * (1 &lt;&lt; lgAuxArrInts))) {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    growAuxSpace();</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  }</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;}</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160; </div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="keywordtype">void</span> AuxHashMap&lt;A&gt;::growAuxSpace() {</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> configKmask = (1 &lt;&lt; lgConfigK) - 1;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> newArrLen = 1 &lt;&lt; ++lgAuxArrInts;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  vector_int entries_new(newArrLen, 0, entries.get_allocator());</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; entries.size(); ++i) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    <span class="keyword">const</span> uint32_t fetched = entries[i];</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    <span class="keywordflow">if</span> (fetched != hll_constants::EMPTY) {</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;      <span class="comment">// find empty in new array</span></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;      <span class="keyword">const</span> int32_t idx = find(entries_new.data(), lgAuxArrInts, lgConfigK, fetched &amp; configKmask);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;      entries_new[~idx] = fetched;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    }</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  entries = std::move(entries_new);</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;}</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160; </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="comment">//Searches the Aux arr hash table for an empty or a matching slotNo depending on the context.</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment">//If entire entry is empty, returns one&#39;s complement of index = found empty.</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="comment">//If entry contains given slotNo, returns its index = found slotNo.</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="comment">//Continues searching.</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="comment">//If the probe comes back to original index, throws an exception.</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;int32_t AuxHashMap&lt;A&gt;::find(<span class="keyword">const</span> uint32_t* auxArr, uint8_t lgAuxArrInts, uint8_t lgConfigK, uint32_t slotNo) {</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  <span class="keyword">const</span> uint32_t auxArrMask = (1 &lt;&lt; lgAuxArrInts) - 1;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; lgConfigK) - 1;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  uint32_t probe = slotNo &amp; auxArrMask;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  <span class="keyword">const</span> uint32_t loopIndex = probe;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <span class="keyword">const</span> uint32_t arrVal = auxArr[probe];</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    <span class="keywordflow">if</span> (arrVal == hll_constants::EMPTY) { <span class="comment">//Compares on entire entry</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;      <span class="keywordflow">return</span> ~probe; <span class="comment">//empty</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;    }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (slotNo == (arrVal &amp; configKmask)) { <span class="comment">//Compares only on slotNo</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;      <span class="keywordflow">return</span> probe; <span class="comment">//found given slotNo, return probe = index into aux array</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    }</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    <span class="keyword">const</span> uint32_t stride = (slotNo &gt;&gt; lgAuxArrInts) | 1;</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    probe = (probe + stride) &amp; auxArrMask;</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;  } <span class="keywordflow">while</span> (probe != loopIndex);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Key not found and no empty slots!&quot;</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;}</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160; </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;coupon_iterator&lt;A&gt; AuxHashMap&lt;A&gt;::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  <span class="keywordflow">return</span> coupon_iterator&lt;A&gt;(entries.data(), 1ULL &lt;&lt; lgAuxArrInts, 0, all);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;}</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160; </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;coupon_iterator&lt;A&gt; AuxHashMap&lt;A&gt;::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  <span class="keywordflow">return</span> coupon_iterator&lt;A&gt;(entries.data(), 1ULL &lt;&lt; lgAuxArrInts, 1ULL &lt;&lt; lgAuxArrInts, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;}</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160; </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;}</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160; </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _AUXHASHMAP_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/AuxHashMap_8hpp_source.html b/docs/master/AuxHashMap_8hpp_source.html
index 522edd8..9465d4b 100644
--- a/docs/master/AuxHashMap_8hpp_source.html
+++ b/docs/master/AuxHashMap_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/AuxHashMap.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,98 +65,99 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">AuxHashMap.hpp</div></div>
+  <div class="headertitle">
+<div class="title">AuxHashMap.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _AUXHASHMAP_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _AUXHASHMAP_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &lt;iostream&gt;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &lt;functional&gt;</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="preprocessor">#include &quot;coupon_iterator.hpp&quot;</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span><span class="keyword">class </span>AuxHashMap final {</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>  <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span>    AuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>    <span class="keyword">static</span> AuxHashMap* newAuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>    <span class="keyword">static</span> AuxHashMap* newAuxHashMap(<span class="keyword">const</span> AuxHashMap&lt;A&gt;&amp; that);</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>    <span class="keyword">static</span> AuxHashMap* deserialize(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len,</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>                                   uint8_t lgConfigK,</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>                                   uint32_t auxCount, uint8_t lgAuxArrInts,</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>                                   <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>    <span class="keyword">static</span> AuxHashMap* deserialize(std::istream&amp; is, uint8_t lgConfigK,</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>                                   uint32_t auxCount, uint8_t lgAuxArrInts,</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>                                   <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>    <span class="keyword">virtual</span> ~AuxHashMap() = <span class="keywordflow">default</span>;</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>    <span class="keyword">static</span> std::function&lt;void(AuxHashMap&lt;A&gt;*)&gt; make_deleter();</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>    </div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>    AuxHashMap* copy() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>    uint32_t getUpdatableSizeBytes() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>    uint32_t getCompactSizeBytes() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span> </div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>    uint32_t getAuxCount() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>    uint32_t* getAuxIntArr();</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>    uint8_t getLgAuxArrInts() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span> </div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>    coupon_iterator&lt;A&gt; begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>    coupon_iterator&lt;A&gt; end() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>    <span class="keywordtype">void</span> mustAdd(uint32_t slotNo, uint8_t value);</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>    uint8_t mustFindValueFor(uint32_t slotNo) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>    <span class="keywordtype">void</span> mustReplace(uint32_t slotNo, uint8_t value);</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span> </div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>  <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>    <span class="keyword">typedef</span> <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;AuxHashMap&lt;A&gt;&gt; ahmAlloc;</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>    <span class="keyword">using </span>vector_int = std::vector&lt;uint32_t, typename std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;uint32_t&gt;&gt;;</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span> </div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>    <span class="comment">// static so it can be used when resizing</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>    <span class="keyword">static</span> int32_t find(<span class="keyword">const</span> uint32_t* auxArr, uint8_t lgAuxArrInts, uint8_t lgConfigK, uint32_t slotNo);</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span> </div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>    <span class="keywordtype">void</span> checkGrow();</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>    <span class="keywordtype">void</span> growAuxSpace();</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span> </div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>    <span class="keyword">const</span> uint8_t lgConfigK;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>    uint8_t lgAuxArrInts;</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>    uint32_t auxCount;</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>    vector_int entries;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>};</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>}</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span> </div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span><span class="preprocessor">#include &quot;AuxHashMap-internal.hpp&quot;</span></div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span> </div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span><span class="preprocessor">#endif </span><span class="comment">/* _AUXHASHMAP_HPP_ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _AUXHASHMAP_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _AUXHASHMAP_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &quot;coupon_iterator.hpp&quot;</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword">class </span>AuxHashMap final {</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    AuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keyword">static</span> AuxHashMap* newAuxHashMap(uint8_t lgAuxArrInts, uint8_t lgConfigK, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keyword">static</span> AuxHashMap* newAuxHashMap(<span class="keyword">const</span> AuxHashMap&lt;A&gt;&amp; that);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keyword">static</span> AuxHashMap* deserialize(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len,</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;                                   uint8_t lgConfigK,</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;                                   uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;                                   <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">static</span> AuxHashMap* deserialize(std::istream&amp; is, uint8_t lgConfigK,</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;                                   uint32_t auxCount, uint8_t lgAuxArrInts,</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;                                   <span class="keywordtype">bool</span> srcCompact, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="keyword">virtual</span> ~AuxHashMap() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keyword">static</span> std::function&lt;void(AuxHashMap&lt;A&gt;*)&gt; make_deleter();</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    AuxHashMap* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    uint32_t getUpdatableSizeBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    uint32_t getCompactSizeBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    uint32_t getAuxCount() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    uint32_t* getAuxIntArr();</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    uint8_t getLgAuxArrInts() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    coupon_iterator&lt;A&gt; begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    coupon_iterator&lt;A&gt; end() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keywordtype">void</span> mustAdd(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    uint8_t mustFindValueFor(uint32_t slotNo) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keywordtype">void</span> mustReplace(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keyword">typedef</span> <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;AuxHashMap&lt;A&gt;&gt; ahmAlloc;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="keyword">using</span> vector_int = std::vector&lt;uint32_t, typename std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;uint32_t&gt;&gt;;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160; </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="comment">// static so it can be used when resizing</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keyword">static</span> int32_t find(<span class="keyword">const</span> uint32_t* auxArr, uint8_t lgAuxArrInts, uint8_t lgConfigK, uint32_t slotNo);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordtype">void</span> checkGrow();</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keywordtype">void</span> growAuxSpace();</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keyword">const</span> uint8_t lgConfigK;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    uint8_t lgAuxArrInts;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    uint32_t auxCount;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    vector_int entries;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;};</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160; </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;}</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="preprocessor">#include &quot;AuxHashMap-internal.hpp&quot;</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _AUXHASHMAP_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/CompositeInterpolationXTable-internal_8hpp_source.html b/docs/master/CompositeInterpolationXTable-internal_8hpp_source.html
index d50ac13..f3d66b8 100644
--- a/docs/master/CompositeInterpolationXTable-internal_8hpp_source.html
+++ b/docs/master/CompositeInterpolationXTable-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/CompositeInterpolationXTable-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,823 +65,824 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">CompositeInterpolationXTable-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">CompositeInterpolationXTable-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;HllUtil.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="preprocessor">#include &quot;CompositeInterpolationXTable.hpp&quot;</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#include &lt;exception&gt;</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t numXArrValues = 257;</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span> </div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span><span class="keyword">static</span> <span class="keyword">const</span> uint32_t yStrides[] =</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>  {1, 2, 3, 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 20480, 40960, 81920};</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span> </div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>uint32_t CompositeInterpolationXTable&lt;A&gt;::get_y_stride(uint8_t logK) {</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>  <span class="keywordflow">if</span> (logK &lt; hll_constants::MIN_LOG_K || logK &gt; hll_constants::MAX_LOG_K) {</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;logK must be in range [&quot;</span> + std::to_string(hll_constants::MIN_LOG_K)</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>                                + <span class="stringliteral">&quot;, &quot;</span> + std::to_string(hll_constants::MAX_LOG_K) + <span class="stringliteral">&quot;]. Found: &quot;</span></div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>                                + std::to_string(logK));</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>  }</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>  <span class="keywordflow">return</span> yStrides[logK - hll_constants::MIN_LOG_K];</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>}</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span> </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>uint32_t CompositeInterpolationXTable&lt;A&gt;::get_x_arr_length() {</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>  <span class="keywordflow">return</span> numXArrValues;</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>}</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> xArray[18][numXArrValues] = {</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>{</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>  10.767999803534, 11.237701481774, 11.722738717438, 12.223246391222,</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>  12.739366773787, 13.271184824495, 13.818759686650, 14.382159835785,</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>  14.961390904922, 15.556414447178, 16.167227058768, 16.793705840034,</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>  17.435831011559, 18.093368824077, 18.766214022468, 19.454114555153,</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>  20.156877376380, 20.874309118151, 21.606085061388, 22.351926834624,</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>  23.111406651437, 23.884222842419, 24.669953053285, 25.468324695415,</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>  26.278740385032, 27.100807701976, 27.934264623663, 28.778498012717,</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>  29.633064579479, 30.497559091830, 31.371415928956, 32.254248998304,</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>  33.145649456017, 34.045084140394, 34.952069032314, 35.866210502243,</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>  36.787128772113, 37.714316067007, 38.647432342061, 39.586020708848,</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>  40.529738186256, 41.478377527525, 42.431435504179, 43.388619067416,</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>  44.349650659292, 45.314111448463, 46.281805382722, 47.252472240229,</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>  48.225969481651, 49.202042512440, 50.180350422249, 51.160761480664,</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>  52.143032445587, 53.127233235412, 54.112986437616, 55.100182392694,</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>  56.088558030701, 57.078156023607, 58.068788167275, 59.060493030644,</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>  60.053033784417, 61.046284072738, 62.040286486621, 63.034929032992,</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>  64.030027371399, 65.025588917110, 66.021614945599, 67.018177418440,</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>  68.015186786528, 69.012467972526, 70.010014322660, 71.007638150468,</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>  72.005472777573, 73.003558069130, 74.001925061314, 75.000323809106,</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>  75.998875046818, 76.997735309722, 77.996356820987, 78.995236661037,</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>  79.994185446564, 80.993179953574, 81.991936172868, 82.991277726952,</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>  83.990564675011, 84.990016215330, 85.989354175963, 86.988664031183,</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>  87.988038383374, 88.987487931153, 89.987011275632, 90.986376635228,</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>  91.985802667485, 92.985125933965, 93.984894049744, 94.984597185523,</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>  95.984374633793, 96.983987641198, 97.983728001025, 98.983151114601,</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>  99.982917278162, 100.982752268263, 101.982610588914, 102.982425129077,</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>  103.982425883214, 104.982193814993, 105.982188025268, 106.982005912713,</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>  107.981949640254, 108.981777381902, 109.981767708570, 110.981785341504,</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>  111.981686149156, 112.981635012054, 113.981557303839, 114.981412817204,</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>  115.981636136290, 116.981451847734, 117.981619278961, 118.981656205677,</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>  119.981462628717, 120.981648197593, 121.981672839888, 122.981536601882,</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>  123.981424780957, 124.981245233627, 125.981297203177, 126.981469882453,</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>  127.981420558510, 128.981470958251, 129.981803124940, 130.981454077005,</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span>  131.981307772677, 132.981136552712, 133.981060440468, 134.980764897921,</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>  135.980250123519, 136.979947889981, 137.979778713731, 138.979651075854,</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>  139.979521006237, 140.979619490143, 141.979418214464, 142.979378742690,</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>  143.979006714929, 144.978789085341, 145.978940618746, 146.978699584620,</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>  147.978509489139, 148.978375065557, 149.978382007245, 150.978320879037,</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>  151.978431501891, 152.978357310224, 153.978079953131, 154.977867908315,</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>  155.977897282267, 156.977732141540, 157.977285841428, 158.977381755450,</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>  159.977107808858, 160.976898092463, 161.976945065052, 162.976415653211,</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>  163.976063254486, 164.976168718176, 165.976009634854, 166.975746910144,</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>  167.975365498336, 168.975302031315, 169.975145815395, 170.975048401084,</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>  171.974904933990, 172.974962856090, 173.974307743427, 174.974505556696,</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>  175.974404122880, 176.974154794798, 177.973936891006, 178.973909768514,</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>  179.973629325330, 180.973396428571, 181.973041798012, 182.972922327014,</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>  183.972453839631, 184.972389341638, 185.971978290400, 186.971721489488,</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>  187.971610992921, 188.971432541974, 189.970886522529, 190.970636748690,</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>  191.970543849249, 192.970222044828, 193.969945219163, 194.969816174441,</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>  195.969660267113, 196.969306217626, 197.969283141670, 198.968952697752,</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>  199.968650726389, 200.968771498143, 201.969063388798, 202.968624157712,</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>  203.968385122471, 204.968459873029, 205.968253426841, 206.968128284823,</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span>  207.968002441937, 208.967981887571, 209.967853843352, 210.967653026858,</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>  211.967601511385, 212.967479077297, 213.967293002672, 214.967265475369,</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>  215.967098197208, 216.966915139758, 217.966680984700, 218.966156974161,</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>  219.965788928685, 220.965578199561, 221.965550145047, 222.965055562297,</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>  223.965041228123, 224.965088576052, 225.964951649635, 226.964837079061,</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>  227.964949815142, 228.964753278386, 229.964358666956, 230.964158288467,</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>  231.964118659643, 232.964105599719, 233.964013041408, 234.963810178150,</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>  235.963847138572, 236.963634735645, 237.963596910032, 238.963659218725,</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>  239.963498440155, 240.963445597658, 241.963141291971, 242.962684055746,</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>  243.962664757583, 244.962762174588, 245.962862664373, 246.962595237647,</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>  247.962493432533, 248.962292518484, 249.962622934132, 250.962187495200,</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>  251.962038306920, 252.961926735684, 253.961867248643, 254.961699581530,</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>  255.961371028199</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span>},</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span><span class="comment">// log K = 5</span></div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>{</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span>  22.304000309384, 23.261989079230, 24.249656493833, 25.267226901899,</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>  26.314781734430, 27.392414068382, 28.500177845081, 29.638044883897,</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>  30.805888087516, 32.003714838418, 33.231360682863, 34.488477823483,</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span>  35.774924122967, 37.090293268866, 38.434292452116, 39.806594197334,</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>  41.206691028159, 42.634002763091, 44.088065403269, 45.568286128520,</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>  47.074066947685, 48.604745105475, 50.159729872619, 51.738339282229,</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>  53.339805618020, 54.963435280656, 56.608464119077, 58.274038434156,</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span>  59.959403900602, 61.663926660982, 63.386737477574, 65.127093833107,</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span>  66.884091606686, 68.656959698762, 70.445052178435, 72.247581860591,</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>  74.063607663774, 75.892531705810, 77.733879994604, 79.586788509372,</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>  81.450593478752, 83.324645303244, 85.208482496209, 87.101116685537,</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>  89.002152917959, 90.911090999940, 92.827275073114, 94.750224301260,</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>  96.679773715696, 98.615214511699, 100.556211548644, 102.502148428334,</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>  104.452899214344, 106.407767504404, 108.366625832228, 110.329564692634,</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>  112.295481742874, 114.264715056639, 116.236769512562, 118.211214593179,</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>  120.188376370012, 122.167746134232, 124.148833002551, 126.131612799989,</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span>  128.116072530208, 130.102155735854, 132.089449244974, 134.077816832908,</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>  136.067404409248, 138.057703527432, 140.049350564796, 142.041756984355,</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>  144.034780624078, 146.028584459531, 148.022894428003, 150.017952482368,</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span>  152.013358245376, 154.009157360372, 156.005076955043, 158.001501688538,</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span>  159.998043891849, 161.995141096448, 163.992507770330, 165.990019741406,</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span>  167.987379363144, 169.985323168231, 171.983371903769, 173.981134136378,</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>  175.979306888599, 177.977458741010, 179.975994045101, 181.974478508488,</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>  183.973329438036, 185.972061903815, 187.971014174496, 189.969582278901,</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>  191.968450510061, 193.967607022497, 195.966726931677, 197.965915341472,</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span>  199.964910588293, 201.964427852336, 203.964308576556, 205.963778587196,</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span>  207.963244179225, 209.962423156859, 211.961859295409, 213.961171237132,</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>  215.960624048009, 217.959980906604, 219.959156277574, 221.958692298143,</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>  223.958335010302, 225.958329061602, 227.957722024027, 229.957134954397,</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>  231.956897929205, 233.956901572571, 235.956650770311, 237.956593290745,</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span>  239.956700470895, 241.956192761863, 243.956003327600, 245.955794901574,</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span>  247.955501305446, 249.954960233132, 251.954510187803, 253.954252376340,</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span>  255.954011943050, 257.953388008439, 259.953139524693, 261.952918466928,</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span>  263.952432910213, 265.952485387126, 267.952763908808, 269.952510701682,</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span>  271.952383356830, 273.951921008979, 275.951766755515, 277.951697578478,</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span>  279.951700548755, 281.951805228218, 283.951934023417, 285.952140722678,</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span>  287.952063941231, 289.951717207670, 291.951294241955, 293.950937111819,</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span>  295.950900506385, 297.950320403388, 299.949546547128, 301.949474819234,</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>  303.949155377395, 305.948725010033, 307.948408553357, 309.948120512731,</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span>  311.947897212148, 313.947738181662, 315.947255247579, 317.946631669691,</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span>  319.946302193308, 321.945855881155, 323.945603079048, 325.944930145876,</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span>  327.945048538923, 329.944795565500, 331.944227346318, 333.943705422222,</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span>  335.943231918970, 337.942333069602, 339.942354997227, 341.941890952026,</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span>  343.941346276351, 345.940653575739, 347.940019001109, 349.940026817951,</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>  351.938944534275, 353.938172407151, 355.937584534690, 357.937041224148,</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>  359.936673631279, 361.936179855216, 363.936105840596, 365.935367434940,</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span>  367.935295315770, 369.934793960370, 371.934314961518, 373.933949277377,</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span>  375.933420587284, 377.933148188654, 379.932379363314, 381.931900192237,</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>  383.930951130857, 385.930667541762, 387.930025971711, 389.929529183966,</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>  391.929116798157, 393.928361940635, 395.927673611921, 397.927111110912,</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>  399.926483516685, 401.925799510661, 403.924918492428, 405.924540208915,</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>  407.924014467935, 409.923779779206, 411.922979548363, 413.922515268061,</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span>  415.922148908645, 417.921643066153, 419.921126587639, 421.920766647684,</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>  423.920642824255, 425.920411492484, 427.920603679205, 429.920445437023,</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span>  431.920286509746, 433.919789058392, 435.919408587813, 437.918873200300,</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span>  439.918417416574, 441.918192491069, 443.918376503567, 445.917692006023,</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>  447.917132642691, 449.917217997363, 451.916924115487, 453.916662151474,</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span>  455.916485288107, 457.915879851633, 459.915842501592, 461.915547354915,</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>  463.914995141359, 465.914585759187, 467.914144928428, 469.913956069337,</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>  471.913046082896, 473.912468624617, 475.912322983182, 477.912118100240,</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span>  479.911923664773, 481.911518944025, 483.911023761757, 485.910386539830,</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span>  487.910092345284, 489.910153786770, 491.909575245360, 493.908973823502,</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span>  495.908577061168, 497.908550221055, 499.908127020659, 501.907710605296,</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>  503.907806972566, 505.907336571662, 507.907081330259, 509.906648846180,</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>  511.906201574892</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>},</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span><span class="comment">// log K = 6</span></div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>{</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>  45.375999854524, 46.820948326168, 48.298703712049, 49.809402685314,</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>  51.353165756275, 52.929933710602, 54.539893242468, 56.183033892089,</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>  57.859217068495, 59.568519998303, 61.310801009963, 63.085886926328,</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>  64.893798324934, 66.734230191052, 68.607173306372, 70.512210309984,</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>  72.449265953981, 74.418007054647, 76.417910710559, 78.448929349152,</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>  80.510585932256, 82.602514696500, 84.724061528721, 86.875166381330,</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>  89.055217833675, 91.263852803721, 93.500342620773, 95.764451518395,</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>  98.055566319691, 100.373234086043, 102.716794393386, 105.085599217566,</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span>  107.479363461004, 109.897282858060, 112.338907676111, 114.803401103124,</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>  117.290259931022, 119.799265623507, 122.329323908482, 124.879681624600,</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>  127.450299022993, 130.040239267142, 132.648756733593, 135.275366525219,</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>  137.919720233989, 140.580778017562, 143.258128898839, 145.951552244700,</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>  148.660145472460, 151.383257444852, 154.120434694643, 156.871202914301,</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>  159.634634288797, 162.410377522877, 165.198249005575, 167.997420145534,</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span>  170.807579918337, 173.628020587905, 176.458633641294, 179.298282098581,</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>  182.147449731726, 185.005094444186, 187.870899328937, 190.744709255561,</div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>  193.625572419776, 196.513740460772, 199.408599560293, 202.309940032246,</div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>  205.217132295894, 208.129828601313, 211.047995735211, 213.970919426104,</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>  216.899109829571, 219.832024990852, 222.769136305806, 225.710258431247,</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span>  228.655217514772, 231.603984417526, 234.555642012353, 237.510635882749,</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span>  240.468820458907, 243.429903849174, 246.393192036307, 249.359251612075,</div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>  252.327416912482, 255.297598046767, 258.269777722144, 261.244337060733,</div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span>  264.219958654591, 267.197643910088, 270.177202282129, 273.157339433786,</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span>  276.139287129066, 279.122276848731, 282.107226383752, 285.092136000673,</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span>  288.078230550129, 291.065256815999, 294.053160971001, 297.042401030971,</div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>  300.031784889467, 303.022502412860, 306.013581138287, 309.005124942334,</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span>  311.996910583050, 314.989635544162, 317.982189300799, 320.975762085573,</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>  323.969719809182, 326.963672522149, 329.958419674913, 332.953046205989,</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>  335.948338966110, 338.943201657934, 341.938798787180, 344.935321901459,</div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>  347.931089897905, 350.927355153871, 353.923731760523, 356.920383399325,</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>  359.916863372939, 362.914245241722, 365.911216314347, 368.908636150615,</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>  371.905028432797, 374.901981729273, 377.899718967915, 380.897391911925,</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>  383.894945428721, 386.892974193389, 389.890517424427, 392.889050804732,</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>  395.886893560179, 398.884852345719, 401.883235933616, 404.881805247652,</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>  407.880049402262, 410.878410789472, 413.876755787854, 416.875140105536,</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>  419.873758096660, 422.872739431833, 425.871627898739, 428.870663138631,</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>  431.869475472357, 434.868378059774, 437.867537661532, 440.866274620049,</div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span>  443.865086570094, 446.864282236320, 449.863630871851, 452.862772062678,</div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span>  455.861877807413, 458.860680461949, 461.859728874700, 464.858478829514,</div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span>  467.857314559298, 470.856707830759, 473.855641079729, 476.854880576501,</div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span>  479.853812351976, 482.852666825246, 485.851471230749, 488.850997731659,</div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span>  491.850420535006, 494.849118717584, 497.848645341646, 500.848230362352,</div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span>  503.847546143645, 506.847285358235, 509.846275998715, 512.845599444922,</div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span>  515.845441684852, 518.844522015985, 521.843923976006, 524.843281639782,</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span>  527.842399994830, 530.841152548296, 533.840788827465, 536.840058715879,</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span>  539.839578267778, 542.839076801367, 545.838441853502, 548.837925005355,</div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span>  551.837456112430, 554.837041819817, 557.836916936797, 560.836116071833,</div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span>  563.834832988710, 566.834107840572, 569.832763471368, 572.831700689757,</div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span>  575.832050680783, 578.831190216307, 581.831249402778, 584.830325442080,</div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span>  587.828993643112, 590.827962761832, 593.827454067745, 596.825833598259,</div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span>  599.824193205007, 602.822806340644, 605.822276069352, 608.821423024191,</div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span>  611.820006110523, 614.819016304854, 617.818220240160, 620.817311827644,</div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span>  623.816286470744, 626.815211383752, 629.815077535810, 632.813925717940,</div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span>  635.813392704099, 638.812424935595, 641.811289306882, 644.809932622788,</div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>  647.808609610738, 650.807771758015, 653.806851303878, 656.805452367508,</div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>  659.804133900742, 662.803103749985, 665.801910649522, 668.800969589926,</div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span>  671.798796938405, 674.798110719805, 677.797843657187, 680.797711918663,</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span>  683.796449689643, 686.794998006462, 689.794205385109, 692.792836542916,</div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span>  695.792195299304, 698.790778974184, 701.790704644168, 704.790168225574,</div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span>  707.789261680438, 710.788674453657, 713.787207421297, 716.786043303658,</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span>  719.784740017888, 722.783523691482, 725.782739693893, 728.781695938105,</div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span>  731.780295310459, 734.778719103047, 737.778056368816, 740.777014963309,</div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span>  743.776470087777, 746.774710218241, 749.773897180146, 752.772555359445,</div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span>  755.771799417720, 758.770328749569, 761.768940347768, 764.768630836408,</div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span>  767.767399121425</div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>},</div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span><span class="comment">// log K = 7</span></div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span>{</div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span>  91.554623, 93.970317, 96.431113, 98.937264, 101.488909, 104.086010, 106.728780, 109.417062,</div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span>  112.150914, 114.930279, 117.755065, 120.625143, 123.540431, 126.500927, 129.506371, 132.556551,</div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>  135.651450, 138.790477, 141.973357, 145.200176, 148.470504, 151.783478, 155.139376, 158.537455,</div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>  161.977357, 165.458477, 168.980630, 172.543258, 176.145951, 179.788203, 183.469266, 187.188166,</div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span>  190.945533, 194.739618, 198.570460, 202.437447, 206.339379, 210.276276, 214.247092, 218.251243,</div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span>  222.288169, 226.357728, 230.458810, 234.590263, 238.751826, 242.942859, 247.162518, 251.410098,</div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span>  255.685517, 259.987202, 264.314569, 268.667458, 273.044873, 277.445418, 281.869296, 286.316796,</div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span>  290.785471, 295.276055, 299.788143, 304.319743, 308.869691, 313.438842, 318.026761, 322.632499,</div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>  327.254588, 331.892954, 336.547483, 341.217702, 345.901880, 350.601214, 355.313731, 360.038868,</div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span>  364.777348, 369.526476, 374.288795, 379.061811, 383.846122, 388.640850, 393.446218, 398.260691,</div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span>  403.084626, 407.916053, 412.755659, 417.604951, 422.461448, 427.324128, 432.195028, 437.072269,</div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>  441.956190, 446.846167, 451.741463, 456.641868, 461.549478, 466.461280, 471.377098, 476.297446,</div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span>  481.222717, 486.151860, 491.085033, 496.022133, 500.962856, 505.906586, 510.853868, 515.802981,</div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span>  520.755460, 525.711123, 530.668833, 535.629910, 540.592334, 545.557764, 550.525455, 555.494082,</div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span>  560.463996, 565.436164, 570.410847, 575.385933, 580.361996, 585.339352, 590.318151, 595.300216,</div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span>  600.281543, 605.264482, 610.250114, 615.236608, 620.222025, 625.208433, 630.195367, 635.183997,</div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno">  276</span>  640.172271, 645.162589, 650.153647, 655.144276, 660.133923, 665.123818, 670.115789, 675.109169,</div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno">  277</span>  680.103270, 685.097349, 690.091960, 695.086028, 700.080326, 705.075670, 710.069697, 715.065265,</div>
-<div class="line"><a id="l00278" name="l00278"></a><span class="lineno">  278</span>  720.062426, 725.058529, 730.054916, 735.050560, 740.048508, 745.044790, 750.041067, 755.037833,</div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno">  279</span>  760.035090, 765.033371, 770.029865, 775.025946, 780.022408, 785.021534, 790.018699, 795.016742,</div>
-<div class="line"><a id="l00280" name="l00280"></a><span class="lineno">  280</span>  800.013947, 805.012680, 810.009483, 815.007921, 820.008589, 825.007658, 830.007411, 835.006892,</div>
-<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span>  840.006917, 845.006362, 850.004606, 855.003367, 860.001219, 864.999491, 869.999131, 874.998190,</div>
-<div class="line"><a id="l00282" name="l00282"></a><span class="lineno">  282</span>  879.998460, 884.997482, 889.995952, 894.995130, 899.994555, 904.993474, 909.991434, 914.990519,</div>
-<div class="line"><a id="l00283" name="l00283"></a><span class="lineno">  283</span>  919.991564, 924.992234, 929.993901, 934.992310, 939.992013, 944.993341, 949.993576, 954.992981,</div>
-<div class="line"><a id="l00284" name="l00284"></a><span class="lineno">  284</span>  959.993548, 964.993781, 969.993129, 974.994050, 979.994706, 984.994372, 989.994395, 994.995339,</div>
-<div class="line"><a id="l00285" name="l00285"></a><span class="lineno">  285</span>  999.995544, 1004.995498, 1009.996864, 1014.997829, 1019.996531, 1024.996724, 1029.997574, 1034.998591,</div>
-<div class="line"><a id="l00286" name="l00286"></a><span class="lineno">  286</span>  1039.997807, 1044.998954, 1050.000113, 1055.000633, 1060.000845, 1065.000760, 1070.000907, 1075.001248,</div>
-<div class="line"><a id="l00287" name="l00287"></a><span class="lineno">  287</span>  1080.001187, 1084.999775, 1089.999105, 1094.999647, 1100.001983, 1105.003468, 1110.004542, 1115.005170,</div>
-<div class="line"><a id="l00288" name="l00288"></a><span class="lineno">  288</span>  1120.006517, 1125.006493, 1130.006837, 1135.008369, 1140.006966, 1145.009225, 1150.008497, 1155.009589,</div>
-<div class="line"><a id="l00289" name="l00289"></a><span class="lineno">  289</span>  1160.009558, 1165.011395, 1170.009739, 1175.011131, 1180.013303, 1185.012525, 1190.014190, 1195.016399,</div>
-<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span>  1200.016087, 1205.016715, 1210.018008, 1215.018108, 1220.019677, 1225.020269, 1230.019468, 1235.020515,</div>
-<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span>  1240.021850, 1245.020961, 1250.019785, 1255.020253, 1260.020623, 1265.020156, 1270.020625, 1275.019028,</div>
-<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span>  1280.019972</div>
-<div class="line"><a id="l00293" name="l00293"></a><span class="lineno">  293</span>},</div>
-<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span><span class="comment">// log K = 8</span></div>
-<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span>{</div>
-<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span>  183.877784, 188.720097, 193.652407, 198.675131, 203.788397, 208.992238, 214.286620, 219.671580,</div>
-<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span>  225.147277, 230.713559, 236.370208, 242.117078, 247.953569, 253.880078, 259.895869, 266.000405,</div>
-<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span>  272.193694, 278.474457, 284.843102, 291.298228, 297.839692, 304.466434, 311.177471, 317.972674,</div>
-<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span>  324.850719, 331.811076, 338.852902, 345.974709, 353.175880, 360.455237, 367.811613, 375.244484,</div>
-<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span>  382.752472, 390.334218, 397.988777, 405.714596, 413.510671, 421.376147, 429.308973, 437.308197,</div>
-<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span>  445.372302, 453.500121, 461.690796, 469.942249, 478.253652, 486.623402, 495.049662, 503.532193,</div>
-<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span>  512.068670, 520.658371, 529.299186, 537.990886, 546.732097, 555.520093, 564.355935, 573.235689,</div>
-<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span>  582.159345, 591.126063, 600.133321, 609.181348, 618.267848, 627.392384, 636.552822, 645.748152,</div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span>  654.977601, 664.239902, 673.534497, 682.859448, 692.213983, 701.598606, 711.009376, 720.446781,</div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span>  729.910995, 739.397888, 748.908546, 758.443812, 768.000572, 777.577584, 787.174815, 796.791250,</div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno">  306</span>  806.427107, 816.079660, 825.748493, 835.435992, 845.136828, 854.854141, 864.583886, 874.328396,</div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span>  884.085720, 893.855568, 903.637568, 913.431080, 923.234553, 933.049830, 942.873895, 952.707793,</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span>  962.551743, 972.402421, 982.263001, 992.131464, 1002.006941, 1011.888460, 1021.777462, 1031.671376,</div>
-<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span>  1041.569600, 1051.476632, 1061.386996, 1071.302834, 1081.224251, 1091.148847, 1101.080297, 1111.013589,</div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span>  1120.951962, 1130.893360, 1140.838011, 1150.786112, 1160.737100, 1170.689817, 1180.646908, 1190.604979,</div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span>  1200.565150, 1210.527894, 1220.492169, 1230.460128, 1240.429764, 1250.401749, 1260.373274, 1270.349608,</div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span>  1280.325544, 1290.302087, 1300.279074, 1310.257850, 1320.238948, 1330.221273, 1340.203554, 1350.186669,</div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span>  1360.171345, 1370.156233, 1380.142561, 1390.129535, 1400.119177, 1410.107938, 1420.097171, 1430.087586,</div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span>  1440.077831, 1450.067996, 1460.060299, 1470.050059, 1480.042995, 1490.035101, 1500.026878, 1510.021128,</div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span>  1520.014262, 1530.008487, 1540.002895, 1549.996342, 1559.991075, 1569.986665, 1579.981202, 1589.976021,</div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno">  316</span>  1599.969512, 1609.964051, 1619.959210, 1629.957092, 1639.953516, 1649.948113, 1659.946715, 1669.945253,</div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno">  317</span>  1679.941736, 1689.938651, 1699.937600, 1709.936396, 1719.933608, 1729.931040, 1739.930316, 1749.927141,</div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno">  318</span>  1759.922600, 1769.920847, 1779.918614, 1789.915707, 1799.913000, 1809.910958, 1819.908532, 1829.906905,</div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span>  1839.903410, 1849.904217, 1859.901705, 1869.898815, 1879.898869, 1889.899032, 1899.899113, 1909.896164,</div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno">  320</span>  1919.893199, 1929.894515, 1939.894965, 1949.893184, 1959.892164, 1969.890794, 1979.889035, 1989.888005,</div>
-<div class="line"><a id="l00321" name="l00321"></a><span class="lineno">  321</span>  1999.888538, 2009.888252, 2019.888976, 2029.890242, 2039.890655, 2049.891065, 2059.891068, 2069.889204,</div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno">  322</span>  2079.891120, 2089.892462, 2099.892479, 2109.891814, 2119.893049, 2129.893705, 2139.893471, 2149.894162,</div>
-<div class="line"><a id="l00323" name="l00323"></a><span class="lineno">  323</span>  2159.894213, 2169.895041, 2179.895987, 2189.894721, 2199.894028, 2209.896005, 2219.898683, 2229.898673,</div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno">  324</span>  2239.898012, 2249.898018, 2259.898215, 2269.899380, 2279.902590, 2289.903144, 2299.902047, 2309.904214,</div>
-<div class="line"><a id="l00325" name="l00325"></a><span class="lineno">  325</span>  2319.903812, 2329.904180, 2339.902528, 2349.903057, 2359.903089, 2369.904512, 2379.902563, 2389.905522,</div>
-<div class="line"><a id="l00326" name="l00326"></a><span class="lineno">  326</span>  2399.903653, 2409.902313, 2419.904452, 2429.905949, 2439.905059, 2449.904954, 2459.904977, 2469.905111,</div>
-<div class="line"><a id="l00327" name="l00327"></a><span class="lineno">  327</span>  2479.904049, 2489.903762, 2499.902022, 2509.904352, 2519.903272, 2529.901643, 2539.900789, 2549.903045,</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno">  328</span>  2559.904334</div>
-<div class="line"><a id="l00329" name="l00329"></a><span class="lineno">  329</span>},</div>
-<div class="line"><a id="l00330" name="l00330"></a><span class="lineno">  330</span><span class="comment">// log K = 9</span></div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno">  331</span>{</div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno">  332</span>  368.528954, 378.224619, 388.100156, 398.155846, 408.391912, 418.808631, 429.406377, 440.185048,</div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno">  333</span>  451.144613, 462.284693, 473.604932, 485.105306, 496.784844, 508.643147, 520.679581, 532.893098,</div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno">  334</span>  545.282616, 557.848295, 570.587645, 583.500268, 596.584345, 609.838697, 623.261582, 636.851681,</div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno">  335</span>  650.607666, 664.527320, 678.608336, 692.849674, 707.248088, 721.803089, 736.511331, 751.372034,</div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span>  766.381798, 781.538178, 796.839808, 812.283881, 827.867995, 843.588520, 859.444318, 875.432109,</div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno">  337</span>  891.550599, 907.795630, 924.165943, 940.657393, 957.268601, 973.995685, 990.837235, 1007.789667,</div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno">  338</span>  1024.850025, 1042.016602, 1059.286426, 1076.658199, 1094.126523, 1111.689346, 1129.345589, 1147.092119,</div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno">  339</span>  1164.926795, 1182.844471, 1200.846880, 1218.929006, 1237.088281, 1255.322930, 1273.630393, 1292.007269,</div>
-<div class="line"><a id="l00340" name="l00340"></a><span class="lineno">  340</span>  1310.452948, 1328.963430, 1347.538768, 1366.176566, 1384.871299, 1403.626249, 1422.434094, 1441.295238,</div>
-<div class="line"><a id="l00341" name="l00341"></a><span class="lineno">  341</span>  1460.208340, 1479.169853, 1498.179265, 1517.234855, 1536.335403, 1555.477305, 1574.659180, 1593.881592,</div>
-<div class="line"><a id="l00342" name="l00342"></a><span class="lineno">  342</span>  1613.139378, 1632.433516, 1651.764587, 1671.127255, 1690.519577, 1709.942250, 1729.393153, 1748.871689,</div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno">  343</span>  1768.377142, 1787.907209, 1807.464755, 1827.043146, 1846.641976, 1866.263022, 1885.903553, 1905.564908,</div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno">  344</span>  1925.240581, 1944.936723, 1964.648221, 1984.375489, 2004.117246, 2023.875053, 2043.644075, 2063.423514,</div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno">  345</span>  2083.218689, 2103.026148, 2122.840475, 2142.669046, 2162.505619, 2182.351758, 2202.205963, 2222.068658,</div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno">  346</span>  2241.939010, 2261.814547, 2281.701803, 2301.591894, 2321.490728, 2341.393208, 2361.298412, 2381.211528,</div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno">  347</span>  2401.132345, 2421.057721, 2440.985510, 2460.916691, 2480.851468, 2500.792645, 2520.738446, 2540.683395,</div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno">  348</span>  2560.634603, 2580.586307, 2600.540530, 2620.497170, 2640.458137, 2660.421783, 2680.386186, 2700.352664,</div>
-<div class="line"><a id="l00349" name="l00349"></a><span class="lineno">  349</span>  2720.321411, 2740.291944, 2760.264068, 2780.238910, 2800.212546, 2820.185829, 2840.163952, 2860.142145,</div>
-<div class="line"><a id="l00350" name="l00350"></a><span class="lineno">  350</span>  2880.120568, 2900.102466, 2920.081981, 2940.062964, 2960.046262, 2980.029101, 3000.012591, 3019.998424,</div>
-<div class="line"><a id="l00351" name="l00351"></a><span class="lineno">  351</span>  3039.983637, 3059.969573, 3079.955927, 3099.942114, 3119.930348, 3139.919614, 3159.909130, 3179.899816,</div>
-<div class="line"><a id="l00352" name="l00352"></a><span class="lineno">  352</span>  3199.892231, 3219.885316, 3239.878917, 3259.871675, 3279.865195, 3299.856210, 3319.848871, 3339.840385,</div>
-<div class="line"><a id="l00353" name="l00353"></a><span class="lineno">  353</span>  3359.834158, 3379.830660, 3399.826361, 3419.822855, 3439.814714, 3459.813765, 3479.808673, 3499.804339,</div>
-<div class="line"><a id="l00354" name="l00354"></a><span class="lineno">  354</span>  3519.797785, 3539.791012, 3559.789885, 3579.785152, 3599.780237, 3619.775480, 3639.772724, 3659.768920,</div>
-<div class="line"><a id="l00355" name="l00355"></a><span class="lineno">  355</span>  3679.765735, 3699.766361, 3719.765048, 3739.762845, 3759.761526, 3779.757598, 3799.755719, 3819.751149,</div>
-<div class="line"><a id="l00356" name="l00356"></a><span class="lineno">  356</span>  3839.750182, 3859.749673, 3879.749344, 3899.749939, 3919.749060, 3939.748385, 3959.750520, 3979.750055,</div>
-<div class="line"><a id="l00357" name="l00357"></a><span class="lineno">  357</span>  3999.750104, 4019.749963, 4039.748453, 4059.746737, 4079.744522, 4099.744430, 4119.741804, 4139.740704,</div>
-<div class="line"><a id="l00358" name="l00358"></a><span class="lineno">  358</span>  4159.742056, 4179.740063, 4199.739155, 4219.741718, 4239.743433, 4259.743115, 4279.743265, 4299.745518,</div>
-<div class="line"><a id="l00359" name="l00359"></a><span class="lineno">  359</span>  4319.746682, 4339.750491, 4359.748549, 4379.747226, 4399.750319, 4419.750379, 4439.752339, 4459.750561,</div>
-<div class="line"><a id="l00360" name="l00360"></a><span class="lineno">  360</span>  4479.750612, 4499.747862, 4519.750693, 4539.747476, 4559.749051, 4579.750603, 4599.750089, 4619.754781,</div>
-<div class="line"><a id="l00361" name="l00361"></a><span class="lineno">  361</span>  4639.755536, 4659.758879, 4679.762145, 4699.762199, 4719.763886, 4739.765081, 4759.765681, 4779.765427,</div>
-<div class="line"><a id="l00362" name="l00362"></a><span class="lineno">  362</span>  4799.767582, 4819.769915, 4839.770107, 4859.769398, 4879.768976, 4899.768288, 4919.768786, 4939.768607,</div>
-<div class="line"><a id="l00363" name="l00363"></a><span class="lineno">  363</span>  4959.772822, 4979.772833, 4999.775808, 5019.773468, 5039.776181, 5059.770860, 5079.773006, 5099.773136,</div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno">  364</span>  5119.772474</div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno">  365</span>},</div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno">  366</span><span class="comment">// log K = 10</span></div>
-<div class="line"><a id="l00367" name="l00367"></a><span class="lineno">  367</span>{</div>
-<div class="line"><a id="l00368" name="l00368"></a><span class="lineno">  368</span>  737.833738, 757.236338, 776.997875, 797.119465, 817.602058, 838.445349, 859.650320, 881.216437,</div>
-<div class="line"><a id="l00369" name="l00369"></a><span class="lineno">  369</span>  903.143414, 925.430957, 948.079220, 971.086231, 994.451449, 1018.173846, 1042.251928, 1066.683804,</div>
-<div class="line"><a id="l00370" name="l00370"></a><span class="lineno">  370</span>  1091.467648, 1116.601416, 1142.083017, 1167.909918, 1194.079097, 1220.588887, 1247.435099, 1274.614860,</div>
-<div class="line"><a id="l00371" name="l00371"></a><span class="lineno">  371</span>  1302.125360, 1329.962942, 1358.123177, 1386.601609, 1415.396299, 1444.501692, 1473.913256, 1503.628515,</div>
-<div class="line"><a id="l00372" name="l00372"></a><span class="lineno">  372</span>  1533.642054, 1563.948888, 1594.544067, 1625.424305, 1656.582169, 1688.016543, 1719.718553, 1751.685990,</div>
-<div class="line"><a id="l00373" name="l00373"></a><span class="lineno">  373</span>  1783.912130, 1816.393610, 1849.122123, 1882.095124, 1915.305647, 1948.748605, 1982.419843, 2016.313904,</div>
-<div class="line"><a id="l00374" name="l00374"></a><span class="lineno">  374</span>  2050.422277, 2084.742618, 2119.270601, 2153.998538, 2188.920843, 2224.034736, 2259.333960, 2294.812594,</div>
-<div class="line"><a id="l00375" name="l00375"></a><span class="lineno">  375</span>  2330.467059, 2366.291844, 2402.281356, 2438.428954, 2474.734330, 2511.187839, 2547.786319, 2584.527356,</div>
-<div class="line"><a id="l00376" name="l00376"></a><span class="lineno">  376</span>  2621.406814, 2658.418551, 2695.554270, 2732.812564, 2770.190157, 2807.682744, 2845.287138, 2882.995251,</div>
-<div class="line"><a id="l00377" name="l00377"></a><span class="lineno">  377</span>  2920.807982, 2958.719996, 2996.728771, 3034.826885, 3073.014082, 3111.287116, 3149.642093, 3188.073159,</div>
-<div class="line"><a id="l00378" name="l00378"></a><span class="lineno">  378</span>  3226.577352, 3265.156836, 3303.803738, 3342.515111, 3381.291514, 3420.130671, 3459.024315, 3497.974631,</div>
-<div class="line"><a id="l00379" name="l00379"></a><span class="lineno">  379</span>  3536.978221, 3576.034737, 3615.138610, 3654.285859, 3693.480455, 3732.715296, 3771.991792, 3811.305300,</div>
-<div class="line"><a id="l00380" name="l00380"></a><span class="lineno">  380</span>  3850.654870, 3890.041152, 3929.457167, 3968.905021, 4008.381466, 4047.886976, 4087.419414, 4126.978997,</div>
-<div class="line"><a id="l00381" name="l00381"></a><span class="lineno">  381</span>  4166.562624, 4206.166726, 4245.793284, 4285.445151, 4325.113012, 4364.802795, 4404.506274, 4444.228475,</div>
-<div class="line"><a id="l00382" name="l00382"></a><span class="lineno">  382</span>  4483.965191, 4523.719569, 4563.487708, 4603.267460, 4643.060387, 4682.865430, 4722.680718, 4762.503248,</div>
-<div class="line"><a id="l00383" name="l00383"></a><span class="lineno">  383</span>  4802.341326, 4842.185529, 4882.039088, 4921.900432, 4961.772625, 5001.649566, 5041.534380, 5081.425809,</div>
-<div class="line"><a id="l00384" name="l00384"></a><span class="lineno">  384</span>  5121.323013, 5161.224908, 5201.130560, 5241.044625, 5280.962456, 5320.882373, 5360.810007, 5400.740058,</div>
-<div class="line"><a id="l00385" name="l00385"></a><span class="lineno">  385</span>  5440.673843, 5480.606748, 5520.547394, 5560.493520, 5600.438100, 5640.383853, 5680.335386, 5720.292400,</div>
-<div class="line"><a id="l00386" name="l00386"></a><span class="lineno">  386</span>  5760.250576, 5800.212705, 5840.172984, 5880.134991, 5920.097923, 5960.060294, 6000.031177, 6040.003398,</div>
-<div class="line"><a id="l00387" name="l00387"></a><span class="lineno">  387</span>  6079.981696, 6119.954349, 6159.929074, 6199.908569, 6239.886163, 6279.863659, 6319.838261, 6359.815405,</div>
-<div class="line"><a id="l00388" name="l00388"></a><span class="lineno">  388</span>  6399.795170, 6439.777225, 6479.755885, 6519.738857, 6559.723169, 6599.708549, 6639.695186, 6679.679788,</div>
-<div class="line"><a id="l00389" name="l00389"></a><span class="lineno">  389</span>  6719.663289, 6759.651052, 6799.634129, 6839.624763, 6879.615013, 6919.605584, 6959.591310, 6999.586006,</div>
-<div class="line"><a id="l00390" name="l00390"></a><span class="lineno">  390</span>  7039.577399, 7079.565236, 7119.557222, 7159.548481, 7199.533025, 7239.519648, 7279.511781, 7319.507639,</div>
-<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span>  7359.506105, 7399.497488, 7439.494944, 7479.491545, 7519.488415, 7559.480534, 7599.475646, 7639.470315,</div>
-<div class="line"><a id="l00392" name="l00392"></a><span class="lineno">  392</span>  7679.468730, 7719.460928, 7759.455834, 7799.455686, 7839.451758, 7879.446841, 7919.443884, 7959.444138,</div>
-<div class="line"><a id="l00393" name="l00393"></a><span class="lineno">  393</span>  7999.443141, 8039.446339, 8079.445285, 8119.444120, 8159.443157, 8199.446480, 8239.438893, 8279.437597,</div>
-<div class="line"><a id="l00394" name="l00394"></a><span class="lineno">  394</span>  8319.439714, 8359.441566, 8399.440754, 8439.439156, 8479.440112, 8519.442365, 8559.444795, 8599.444497,</div>
-<div class="line"><a id="l00395" name="l00395"></a><span class="lineno">  395</span>  8639.446714, 8679.449177, 8719.447620, 8759.443423, 8799.445995, 8839.446170, 8879.449622, 8919.450486,</div>
-<div class="line"><a id="l00396" name="l00396"></a><span class="lineno">  396</span>  8959.450372, 8999.449731, 9039.448449, 9079.452579, 9119.451596, 9159.454020, 9199.456651, 9239.460902,</div>
-<div class="line"><a id="l00397" name="l00397"></a><span class="lineno">  397</span>  9279.460419, 9319.461322, 9359.464611, 9399.467790, 9439.471448, 9479.468426, 9519.462982, 9559.464881,</div>
-<div class="line"><a id="l00398" name="l00398"></a><span class="lineno">  398</span>  9599.462983, 9639.461706, 9679.457284, 9719.457023, 9759.455648, 9799.458786, 9839.456980, 9879.457411,</div>
-<div class="line"><a id="l00399" name="l00399"></a><span class="lineno">  399</span>  9919.454971, 9959.451735, 9999.451916, 10039.443939, 10079.435325, 10119.432142, 10159.431313, 10199.431306,</div>
-<div class="line"><a id="l00400" name="l00400"></a><span class="lineno">  400</span>  10239.429671</div>
-<div class="line"><a id="l00401" name="l00401"></a><span class="lineno">  401</span>},</div>
-<div class="line"><a id="l00402" name="l00402"></a><span class="lineno">  402</span><span class="comment">// log K = 11</span></div>
-<div class="line"><a id="l00403" name="l00403"></a><span class="lineno">  403</span>{</div>
-<div class="line"><a id="l00404" name="l00404"></a><span class="lineno">  404</span>  1476.444530, 1515.260638, 1554.794859, 1595.048761, 1636.023652, 1677.720065, 1720.138513, 1763.279158,</div>
-<div class="line"><a id="l00405" name="l00405"></a><span class="lineno">  405</span>  1807.141823, 1851.724811, 1897.027530, 1943.048153, 1989.784818, 2037.234835, 2085.395149, 2134.263580,</div>
-<div class="line"><a id="l00406" name="l00406"></a><span class="lineno">  406</span>  2183.834818, 2234.105548, 2285.071077, 2336.726064, 2389.065940, 2442.084276, 2495.776521, 2550.134177,</div>
-<div class="line"><a id="l00407" name="l00407"></a><span class="lineno">  407</span>  2605.153465, 2660.825522, 2717.142881, 2774.098631, 2831.683790, 2889.889911, 2948.711233, 3008.137464,</div>
-<div class="line"><a id="l00408" name="l00408"></a><span class="lineno">  408</span>  3068.158605, 3128.766926, 3189.951984, 3251.704129, 3314.013826, 3376.873018, 3440.270569, 3504.194851,</div>
-<div class="line"><a id="l00409" name="l00409"></a><span class="lineno">  409</span>  3568.636295, 3633.586039, 3699.031630, 3764.962925, 3831.371336, 3898.245744, 3965.574384, 4033.345701,</div>
-<div class="line"><a id="l00410" name="l00410"></a><span class="lineno">  410</span>  4101.550888, 4170.180686, 4239.221393, 4308.664143, 4378.497100, 4448.712735, 4519.296212, 4590.243535,</div>
-<div class="line"><a id="l00411" name="l00411"></a><span class="lineno">  411</span>  4661.538747, 4733.174738, 4805.142002, 4877.427081, 4950.019513, 5022.915001, 5096.098561, 5169.567185,</div>
-<div class="line"><a id="l00412" name="l00412"></a><span class="lineno">  412</span>  5243.312012, 5317.314578, 5391.572253, 5466.077564, 5540.821377, 5615.792025, 5690.985894, 5766.392174,</div>
-<div class="line"><a id="l00413" name="l00413"></a><span class="lineno">  413</span>  5842.007403, 5917.816734, 5993.815607, 6069.999957, 6146.362662, 6222.895187, 6299.592875, 6376.440778,</div>
-<div class="line"><a id="l00414" name="l00414"></a><span class="lineno">  414</span>  6453.443173, 6530.588182, 6607.874560, 6685.288536, 6762.829840, 6840.490840, 6918.272948, 6996.164556,</div>
-<div class="line"><a id="l00415" name="l00415"></a><span class="lineno">  415</span>  7074.161694, 7152.259404, 7230.451098, 7308.737035, 7387.113244, 7465.575350, 7544.120230, 7622.733447,</div>
-<div class="line"><a id="l00416" name="l00416"></a><span class="lineno">  416</span>  7701.427750, 7780.188044, 7859.016102, 7937.904850, 8016.853624, 8095.860379, 8174.919884, 8254.034842,</div>
-<div class="line"><a id="l00417" name="l00417"></a><span class="lineno">  417</span>  8333.197794, 8412.405307, 8491.657429, 8570.946804, 8650.278289, 8729.648657, 8809.056098, 8888.496764,</div>
-<div class="line"><a id="l00418" name="l00418"></a><span class="lineno">  418</span>  8967.966663, 9047.466051, 9126.993636, 9206.547289, 9286.127523, 9365.733732, 9445.361201, 9525.008810,</div>
-<div class="line"><a id="l00419" name="l00419"></a><span class="lineno">  419</span>  9604.680107, 9684.363532, 9764.066435, 9843.787987, 9923.523567, 10003.272886, 10083.037524, 10162.811803,</div>
-<div class="line"><a id="l00420" name="l00420"></a><span class="lineno">  420</span>  10242.597755, 10322.402415, 10402.216522, 10482.042584, 10561.877077, 10641.722187, 10721.570740, 10801.435848,</div>
-<div class="line"><a id="l00421" name="l00421"></a><span class="lineno">  421</span>  10881.301249, 10961.178474, 11041.059765, 11120.951444, 11200.845806, 11280.746075, 11360.652145, 11440.567398,</div>
-<div class="line"><a id="l00422" name="l00422"></a><span class="lineno">  422</span>  11520.476709, 11600.395391, 11680.316855, 11760.241900, 11840.170134, 11920.103548, 12000.038206, 12079.975425,</div>
-<div class="line"><a id="l00423" name="l00423"></a><span class="lineno">  423</span>  12159.912459, 12239.857191, 12319.802744, 12399.754385, 12479.707055, 12559.658981, 12639.614004, 12719.566502,</div>
-<div class="line"><a id="l00424" name="l00424"></a><span class="lineno">  424</span>  12799.526877, 12879.488833, 12959.451231, 13039.416480, 13119.388158, 13199.360789, 13279.334923, 13359.298927,</div>
-<div class="line"><a id="l00425" name="l00425"></a><span class="lineno">  425</span>  13439.261641, 13519.235871, 13599.204919, 13679.181082, 13759.157391, 13839.137425, 13919.112545, 13999.096522,</div>
-<div class="line"><a id="l00426" name="l00426"></a><span class="lineno">  426</span>  14079.082789, 14159.060487, 14239.040581, 14319.025236, 14399.006995, 14478.994078, 14558.980576, 14638.962774,</div>
-<div class="line"><a id="l00427" name="l00427"></a><span class="lineno">  427</span>  14718.952192, 14798.938522, 14878.931501, 14958.919062, 15038.907891, 15118.897247, 15198.889129, 15278.881057,</div>
-<div class="line"><a id="l00428" name="l00428"></a><span class="lineno">  428</span>  15358.873272, 15438.867627, 15518.861931, 15598.858206, 15678.850014, 15758.849382, 15838.847872, 15918.837658,</div>
-<div class="line"><a id="l00429" name="l00429"></a><span class="lineno">  429</span>  15998.837920, 16078.831305, 16158.827345, 16238.815546, 16318.817302, 16398.814389, 16478.815820, 16558.811634,</div>
-<div class="line"><a id="l00430" name="l00430"></a><span class="lineno">  430</span>  16638.808126, 16718.807170, 16798.805652, 16878.813389, 16958.806543, 17038.807885, 17118.813146, 17198.813752,</div>
-<div class="line"><a id="l00431" name="l00431"></a><span class="lineno">  431</span>  17278.817574, 17358.820511, 17438.819443, 17518.814262, 17598.815511, 17678.814160, 17758.816726, 17838.817584,</div>
-<div class="line"><a id="l00432" name="l00432"></a><span class="lineno">  432</span>  17918.814197, 17998.821276, 18078.822342, 18158.828474, 18238.822064, 18318.826732, 18398.827758, 18478.827319,</div>
-<div class="line"><a id="l00433" name="l00433"></a><span class="lineno">  433</span>  18558.834153, 18638.835651, 18718.839105, 18798.840903, 18878.836463, 18958.836015, 19038.836351, 19118.832583,</div>
-<div class="line"><a id="l00434" name="l00434"></a><span class="lineno">  434</span>  19198.829856, 19278.822953, 19358.824866, 19438.823697, 19518.826538, 19598.826954, 19678.831393, 19758.822279,</div>
-<div class="line"><a id="l00435" name="l00435"></a><span class="lineno">  435</span>  19838.818757, 19918.808247, 19998.804516, 20078.809201, 20158.808900, 20238.806398, 20318.798516, 20398.802224,</div>
-<div class="line"><a id="l00436" name="l00436"></a><span class="lineno">  436</span>  20478.803179</div>
-<div class="line"><a id="l00437" name="l00437"></a><span class="lineno">  437</span>},</div>
-<div class="line"><a id="l00438" name="l00438"></a><span class="lineno">  438</span><span class="comment">// log K = 12</span></div>
-<div class="line"><a id="l00439" name="l00439"></a><span class="lineno">  439</span>{</div>
-<div class="line"><a id="l00440" name="l00440"></a><span class="lineno">  440</span>  2953.666722, 3031.310137, 3110.389526, 3190.908699, 3272.865410, 3356.267166, 3441.114376, 3527.404284,</div>
-<div class="line"><a id="l00441" name="l00441"></a><span class="lineno">  441</span>  3615.136846, 3704.310976, 3794.924283, 3886.973846, 3980.451903, 4075.355844, 4171.681168, 4269.423939,</div>
-<div class="line"><a id="l00442" name="l00442"></a><span class="lineno">  442</span>  4368.569738, 4469.111760, 4571.043603, 4674.356370, 4779.038117, 4885.076002, 4992.460659, 5101.176875,</div>
-<div class="line"><a id="l00443" name="l00443"></a><span class="lineno">  443</span>  5211.214098, 5322.553631, 5435.184633, 5549.088369, 5664.258175, 5780.673987, 5898.312682, 6017.158593,</div>
-<div class="line"><a id="l00444" name="l00444"></a><span class="lineno">  444</span>  6137.195815, 6258.397951, 6380.761679, 6504.261630, 6628.870413, 6754.585867, 6881.374325, 7009.206926,</div>
-<div class="line"><a id="l00445" name="l00445"></a><span class="lineno">  445</span>  7138.080376, 7267.979175, 7398.866805, 7530.722851, 7663.531580, 7797.269872, 7931.907340, 8067.451667,</div>
-<div class="line"><a id="l00446" name="l00446"></a><span class="lineno">  446</span>  8203.855692, 8341.091306, 8479.155031, 8618.026003, 8757.682272, 8898.095612, 9039.253787, 9181.124777,</div>
-<div class="line"><a id="l00447" name="l00447"></a><span class="lineno">  447</span>  9323.694329, 9466.944202, 9610.861899, 9755.403639, 9900.578346, 10046.356477, 10192.718770, 10339.635914,</div>
-<div class="line"><a id="l00448" name="l00448"></a><span class="lineno">  448</span>  10487.081762, 10635.066232, 10783.560130, 10932.549371, 11082.024055, 11231.949071, 11382.332885, 11533.122831,</div>
-<div class="line"><a id="l00449" name="l00449"></a><span class="lineno">  449</span>  11684.327555, 11835.935533, 11987.926999, 12140.281619, 12292.994375, 12446.046449, 12599.411083, 12753.088314,</div>
-<div class="line"><a id="l00450" name="l00450"></a><span class="lineno">  450</span>  12907.079745, 13061.355923, 13215.895621, 13370.722085, 13525.795736, 13681.095971, 13836.645692, 13992.405906,</div>
-<div class="line"><a id="l00451" name="l00451"></a><span class="lineno">  451</span>  14148.380716, 14304.566860, 14460.959382, 14617.539754, 14774.296125, 14931.214508, 15088.271748, 15245.493870,</div>
-<div class="line"><a id="l00452" name="l00452"></a><span class="lineno">  452</span>  15402.867309, 15560.380994, 15718.035423, 15875.801492, 16033.687891, 16191.701231, 16349.808763, 16508.026001,</div>
-<div class="line"><a id="l00453" name="l00453"></a><span class="lineno">  453</span>  16666.336068, 16824.745049, 16983.259302, 17141.848044, 17300.504517, 17459.240272, 17618.060296, 17776.914688,</div>
-<div class="line"><a id="l00454" name="l00454"></a><span class="lineno">  454</span>  17935.848010, 18094.852645, 18253.914288, 18413.023567, 18572.168358, 18731.376016, 18890.631505, 19049.948196,</div>
-<div class="line"><a id="l00455" name="l00455"></a><span class="lineno">  455</span>  19209.279260, 19368.638871, 19528.043860, 19687.498901, 19846.941765, 20006.443084, 20165.973535, 20325.525957,</div>
-<div class="line"><a id="l00456" name="l00456"></a><span class="lineno">  456</span>  20485.109520, 20644.729917, 20804.363876, 20964.021778, 21123.698687, 21283.379344, 21443.080536, 21602.821439,</div>
-<div class="line"><a id="l00457" name="l00457"></a><span class="lineno">  457</span>  21762.568135, 21922.305338, 22082.065878, 22241.856145, 22401.629436, 22561.435266, 22721.262644, 22881.080478,</div>
-<div class="line"><a id="l00458" name="l00458"></a><span class="lineno">  458</span>  23040.916036, 23200.734053, 23360.583255, 23520.433188, 23680.275065, 23840.132678, 24000.012847, 24159.886135,</div>
-<div class="line"><a id="l00459" name="l00459"></a><span class="lineno">  459</span>  24319.788338, 24479.654024, 24639.540316, 24799.466449, 24959.369335, 25119.276072, 25279.186502, 25439.091982,</div>
-<div class="line"><a id="l00460" name="l00460"></a><span class="lineno">  460</span>  25599.020083, 25758.930671, 25918.847522, 26078.773060, 26238.704021, 26398.647566, 26558.603366, 26718.539855,</div>
-<div class="line"><a id="l00461" name="l00461"></a><span class="lineno">  461</span>  26878.464425, 27038.402892, 27198.344989, 27358.270906, 27518.203448, 27678.169545, 27838.133625, 27998.111630,</div>
-<div class="line"><a id="l00462" name="l00462"></a><span class="lineno">  462</span>  28158.064264, 28318.032491, 28477.994153, 28637.950838, 28797.910362, 28957.884994, 29117.861910, 29277.814384,</div>
-<div class="line"><a id="l00463" name="l00463"></a><span class="lineno">  463</span>  29437.774223, 29597.762256, 29757.729819, 29917.688497, 30077.675371, 30237.667941, 30397.639431, 30557.644527,</div>
-<div class="line"><a id="l00464" name="l00464"></a><span class="lineno">  464</span>  30717.622991, 30877.622641, 31037.598941, 31197.601527, 31357.599118, 31517.585221, 31677.569983, 31837.556138,</div>
-<div class="line"><a id="l00465" name="l00465"></a><span class="lineno">  465</span>  31997.527880, 32157.500622, 32317.491709, 32477.504936, 32637.501123, 32797.516330, 32957.547336, 33117.541765,</div>
-<div class="line"><a id="l00466" name="l00466"></a><span class="lineno">  466</span>  33277.561207, 33437.554332, 33597.564988, 33757.565321, 33917.561180, 34077.580598, 34237.597132, 34397.598246,</div>
-<div class="line"><a id="l00467" name="l00467"></a><span class="lineno">  467</span>  34557.617536, 34717.623318, 34877.649722, 35037.645029, 35197.681143, 35357.700478, 35517.701804, 35677.734383,</div>
-<div class="line"><a id="l00468" name="l00468"></a><span class="lineno">  468</span>  35837.736494, 35997.737103, 36157.732045, 36317.741539, 36477.735602, 36637.761491, 36797.742508, 36957.734137,</div>
-<div class="line"><a id="l00469" name="l00469"></a><span class="lineno">  469</span>  37117.742952, 37277.789218, 37437.793798, 37597.779066, 37757.796449, 37917.794116, 38077.804399, 38237.797507,</div>
-<div class="line"><a id="l00470" name="l00470"></a><span class="lineno">  470</span>  38397.788049, 38557.768583, 38717.768279, 38877.752553, 39037.747349, 39197.737646, 39357.774395, 39517.752643,</div>
-<div class="line"><a id="l00471" name="l00471"></a><span class="lineno">  471</span>  39677.753347, 39837.740038, 39997.719486, 40157.709578, 40317.708657, 40477.719261, 40637.726978, 40797.711139,</div>
-<div class="line"><a id="l00472" name="l00472"></a><span class="lineno">  472</span>  40957.707784</div>
-<div class="line"><a id="l00473" name="l00473"></a><span class="lineno">  473</span>},</div>
-<div class="line"><a id="l00474" name="l00474"></a><span class="lineno">  474</span><span class="comment">// log K = 13</span></div>
-<div class="line"><a id="l00475" name="l00475"></a><span class="lineno">  475</span>{</div>
-<div class="line"><a id="l00476" name="l00476"></a><span class="lineno">  476</span>  5908.111420, 6063.410343, 6221.578483, 6382.623803, 6546.553966, 6713.369171, 6883.070010, 7055.656719,</div>
-<div class="line"><a id="l00477" name="l00477"></a><span class="lineno">  477</span>  7231.129758, 7409.486672, 7590.720089, 7774.822139, 7961.786850, 8151.601206, 8344.261218, 8539.750086,</div>
-<div class="line"><a id="l00478" name="l00478"></a><span class="lineno">  478</span>  8738.048786, 8939.141702, 9143.011205, 9349.645220, 9559.003557, 9771.078383, 9985.846791, 10203.277103,</div>
-<div class="line"><a id="l00479" name="l00479"></a><span class="lineno">  479</span>  10423.349219, 10646.031323, 10871.293001, 11099.111735, 11329.434411, 11562.255804, 11797.522109, 12035.204106,</div>
-<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span>  12275.263649, 12517.670237, 12762.388671, 13009.375491, 13258.587519, 13510.006825, 13763.564399, 14019.227089,</div>
-<div class="line"><a id="l00481" name="l00481"></a><span class="lineno">  481</span>  14276.975295, 14536.745792, 14798.511796, 15062.215057, 15327.806593, 15595.257499, 15864.529774, 16135.586770,</div>
-<div class="line"><a id="l00482" name="l00482"></a><span class="lineno">  482</span>  16408.362074, 16682.849583, 16958.977019, 17236.708221, 17515.990972, 17796.798914, 18079.096585, 18362.834517,</div>
-<div class="line"><a id="l00483" name="l00483"></a><span class="lineno">  483</span>  18647.959152, 18934.452073, 19222.251998, 19511.366053, 19801.717928, 20093.269020, 20385.960319, 20679.772736,</div>
-<div class="line"><a id="l00484" name="l00484"></a><span class="lineno">  484</span>  20974.698498, 21270.684814, 21567.671010, 21865.649193, 22164.581341, 22464.423293, 22765.172894, 23066.785452,</div>
-<div class="line"><a id="l00485" name="l00485"></a><span class="lineno">  485</span>  23369.201089, 23672.387494, 23976.354000, 24281.072155, 24586.465328, 24892.557323, 25199.303712, 25506.654130,</div>
-<div class="line"><a id="l00486" name="l00486"></a><span class="lineno">  486</span>  25814.626835, 26123.148009, 26432.247046, 26741.889610, 27052.042135, 27362.685181, 27673.761784, 27985.292246,</div>
-<div class="line"><a id="l00487" name="l00487"></a><span class="lineno">  487</span>  28297.219809, 28609.572368, 28922.317633, 29235.448741, 29548.944253, 29862.766175, 30176.910610, 30491.363107,</div>
-<div class="line"><a id="l00488" name="l00488"></a><span class="lineno">  488</span>  30806.103787, 31121.126024, 31436.412153, 31751.975134, 32067.737444, 32383.768560, 32700.017044, 33016.458300,</div>
-<div class="line"><a id="l00489" name="l00489"></a><span class="lineno">  489</span>  33333.101934, 33649.904492, 33966.923435, 34284.105041, 34601.429152, 34918.876076, 35236.481998, 35554.235511,</div>
-<div class="line"><a id="l00490" name="l00490"></a><span class="lineno">  490</span>  35872.093847, 36190.101572, 36508.190892, 36826.420800, 37144.739624, 37463.138566, 37781.598984, 38100.191087,</div>
-<div class="line"><a id="l00491" name="l00491"></a><span class="lineno">  491</span>  38418.846511, 38737.587005, 39056.391321, 39375.255819, 39694.182864, 40013.173503, 40332.221146, 40651.311460,</div>
-<div class="line"><a id="l00492" name="l00492"></a><span class="lineno">  492</span>  40970.465534, 41289.697002, 41608.913381, 41928.242461, 42247.585089, 42566.988678, 42886.409594, 43205.849396,</div>
-<div class="line"><a id="l00493" name="l00493"></a><span class="lineno">  493</span>  43525.322840, 43844.784209, 44164.327769, 44483.869861, 44803.383648, 45122.975593, 45442.593765, 45762.258110,</div>
-<div class="line"><a id="l00494" name="l00494"></a><span class="lineno">  494</span>  46081.937012, 46401.605265, 46721.295022, 47041.004034, 47360.695978, 47680.435451, 48000.192231, 48319.953839,</div>
-<div class="line"><a id="l00495" name="l00495"></a><span class="lineno">  495</span>  48639.726508, 48959.506239, 49279.318744, 49599.117846, 49918.951926, 50238.772730, 50558.620076, 50878.455501,</div>
-<div class="line"><a id="l00496" name="l00496"></a><span class="lineno">  496</span>  51198.285377, 51518.135316, 51837.976134, 52157.809260, 52477.635805, 52797.492063, 53117.368983, 53437.262930,</div>
-<div class="line"><a id="l00497" name="l00497"></a><span class="lineno">  497</span>  53757.142921, 54077.026859, 54396.907345, 54716.835955, 55036.713062, 55356.640827, 55676.537369, 55996.488865,</div>
-<div class="line"><a id="l00498" name="l00498"></a><span class="lineno">  498</span>  56316.420754, 56636.355217, 56956.329593, 57276.245282, 57596.202473, 57916.159021, 58236.077854, 58556.010303,</div>
-<div class="line"><a id="l00499" name="l00499"></a><span class="lineno">  499</span>  58875.938110, 59195.924442, 59515.871947, 59835.838035, 60155.809948, 60475.808167, 60795.765545, 61115.766398,</div>
-<div class="line"><a id="l00500" name="l00500"></a><span class="lineno">  500</span>  61435.725825, 61755.677959, 62075.688445, 62395.647263, 62715.609853, 63035.591787, 63355.588060, 63675.579841,</div>
-<div class="line"><a id="l00501" name="l00501"></a><span class="lineno">  501</span>  63995.560980, 64315.552298, 64635.582956, 64955.538779, 65275.512154, 65595.490993, 65915.477332, 66235.470693,</div>
-<div class="line"><a id="l00502" name="l00502"></a><span class="lineno">  502</span>  66555.483426, 66875.455452, 67195.455039, 67515.435090, 67835.418300, 68155.401870, 68475.404599, 68795.452423,</div>
-<div class="line"><a id="l00503" name="l00503"></a><span class="lineno">  503</span>  69115.474466, 69435.450344, 69755.439668, 70075.479966, 70395.468204, 70715.475957, 71035.472807, 71355.513734,</div>
-<div class="line"><a id="l00504" name="l00504"></a><span class="lineno">  504</span>  71675.486047, 71995.450475, 72315.443410, 72635.425138, 72955.481520, 73275.482426, 73595.476688, 73915.469540,</div>
-<div class="line"><a id="l00505" name="l00505"></a><span class="lineno">  505</span>  74235.426693, 74555.381683, 74875.368981, 75195.429157, 75515.480428, 75835.517265, 76155.557945, 76475.556134,</div>
-<div class="line"><a id="l00506" name="l00506"></a><span class="lineno">  506</span>  76795.579451, 77115.605924, 77435.604178, 77755.572770, 78075.576305, 78395.562526, 78715.547599, 79035.551674,</div>
-<div class="line"><a id="l00507" name="l00507"></a><span class="lineno">  507</span>  79355.540615, 79675.575726, 79995.547586, 80315.544278, 80635.546227, 80955.555617, 81275.540591, 81595.549538,</div>
-<div class="line"><a id="l00508" name="l00508"></a><span class="lineno">  508</span>  81915.550079</div>
-<div class="line"><a id="l00509" name="l00509"></a><span class="lineno">  509</span>},</div>
-<div class="line"><a id="l00510" name="l00510"></a><span class="lineno">  510</span><span class="comment">// log K = 14</span></div>
-<div class="line"><a id="l00511" name="l00511"></a><span class="lineno">  511</span>{</div>
-<div class="line"><a id="l00512" name="l00512"></a><span class="lineno">  512</span>  11817.000969, 12127.609164, 12443.958867, 12766.059919, 13093.926347, 13427.563687, 13766.972021, 14112.158775,</div>
-<div class="line"><a id="l00513" name="l00513"></a><span class="lineno">  513</span>  14463.118632, 14819.833221, 15182.310838, 15550.514164, 15924.452624, 16304.097682, 16689.414687, 17080.390156,</div>
-<div class="line"><a id="l00514" name="l00514"></a><span class="lineno">  514</span>  17476.985675, 17879.171048, 18286.913146, 18700.171223, 19118.909859, 19543.074108, 19972.606221, 20407.466793,</div>
-<div class="line"><a id="l00515" name="l00515"></a><span class="lineno">  515</span>  20847.600290, 21292.965548, 21743.489087, 22199.109276, 22659.760749, 23125.379711, 23595.914325, 24071.277989,</div>
-<div class="line"><a id="l00516" name="l00516"></a><span class="lineno">  516</span>  24551.407611, 25036.233071, 25525.671155, 26019.641791, 26518.074136, 27020.885189, 27528.004081, 28039.347478,</div>
-<div class="line"><a id="l00517" name="l00517"></a><span class="lineno">  517</span>  28554.818908, 29074.343878, 29597.869471, 30125.254970, 30656.449891, 31191.351228, 31729.908970, 32272.003587,</div>
-<div class="line"><a id="l00518" name="l00518"></a><span class="lineno">  518</span>  32817.586623, 33366.531359, 33918.769390, 34474.232727, 35032.798601, 35594.423192, 36159.024745, 36726.469786,</div>
-<div class="line"><a id="l00519" name="l00519"></a><span class="lineno">  519</span>  37296.712851, 37869.686035, 38445.278953, 39023.442285, 39604.084062, 40187.147209, 40772.503600, 41360.148758,</div>
-<div class="line"><a id="l00520" name="l00520"></a><span class="lineno">  520</span>  41949.978377, 42541.929077, 43135.892496, 43731.836459, 44329.664552, 44929.334224, 45530.772542, 46133.919152,</div>
-<div class="line"><a id="l00521" name="l00521"></a><span class="lineno">  521</span>  46738.746702, 47345.120215, 47953.051656, 48562.469011, 49173.281212, 49785.453501, 50398.908717, 51013.645932,</div>
-<div class="line"><a id="l00522" name="l00522"></a><span class="lineno">  522</span>  51629.563526, 52246.635759, 52864.820434, 53484.057447, 54104.303719, 54725.504675, 55347.680019, 55970.744363,</div>
-<div class="line"><a id="l00523" name="l00523"></a><span class="lineno">  523</span>  56594.688890, 57219.458967, 57844.949821, 58471.197998, 59098.180259, 59725.774793, 60354.058215, 60982.962558,</div>
-<div class="line"><a id="l00524" name="l00524"></a><span class="lineno">  524</span>  61612.427469, 62242.448368, 62873.013426, 63504.106743, 64135.672742, 64767.665213, 65400.082326, 66032.949331,</div>
-<div class="line"><a id="l00525" name="l00525"></a><span class="lineno">  525</span>  66666.219558, 67299.817447, 67933.801373, 68568.092593, 69202.717636, 69837.643507, 70472.852133, 71108.305774,</div>
-<div class="line"><a id="l00526" name="l00526"></a><span class="lineno">  526</span>  71744.023189, 72380.016332, 73016.168118, 73652.560876, 74289.210741, 74926.041959, 75563.048434, 76200.207724,</div>
-<div class="line"><a id="l00527" name="l00527"></a><span class="lineno">  527</span>  76837.505542, 77474.999283, 78112.608284, 78750.375633, 79388.254423, 80026.267074, 80664.419197, 81302.602941,</div>
-<div class="line"><a id="l00528" name="l00528"></a><span class="lineno">  528</span>  81940.909776, 82579.321050, 83217.801329, 83856.420605, 84495.098999, 85133.832545, 85772.588001, 86411.448347,</div>
-<div class="line"><a id="l00529" name="l00529"></a><span class="lineno">  529</span>  87050.399262, 87689.358100, 88328.463714, 88967.516990, 89606.618839, 90245.788934, 90884.986443, 91524.243962,</div>
-<div class="line"><a id="l00530" name="l00530"></a><span class="lineno">  530</span>  92163.523370, 92802.835394, 93442.198790, 94081.633840, 94721.043838, 95360.482304, 96000.002974, 96639.518339,</div>
-<div class="line"><a id="l00531" name="l00531"></a><span class="lineno">  531</span>  97279.069377, 97918.584802, 98558.189888, 99197.773242, 99837.390001, 100476.994827, 101116.655652, 101756.293703,</div>
-<div class="line"><a id="l00532" name="l00532"></a><span class="lineno">  532</span>  102395.977437, 103035.662337, 103675.360919, 104315.063845, 104954.783621, 105594.504004, 106234.229823, 106874.056079,</div>
-<div class="line"><a id="l00533" name="l00533"></a><span class="lineno">  533</span>  107513.846129, 108153.562857, 108793.393622, 109433.202056, 110072.966808, 110712.777026, 111352.577741, 111992.441538,</div>
-<div class="line"><a id="l00534" name="l00534"></a><span class="lineno">  534</span>  112632.256702, 113272.083743, 113911.943484, 114551.818432, 115191.687411, 115831.584194, 116471.522453, 117111.338979,</div>
-<div class="line"><a id="l00535" name="l00535"></a><span class="lineno">  535</span>  117751.192777, 118391.070556, 119030.991702, 119670.888488, 120310.801509, 120950.761000, 121590.691826, 122230.618394,</div>
-<div class="line"><a id="l00536" name="l00536"></a><span class="lineno">  536</span>  122870.618097, 123510.616056, 124150.552363, 124790.488946, 125430.445483, 126070.428297, 126710.409643, 127350.398562,</div>
-<div class="line"><a id="l00537" name="l00537"></a><span class="lineno">  537</span>  127990.397846, 128630.413222, 129270.354937, 129910.365912, 130550.332174, 131190.259646, 131830.280970, 132470.304278,</div>
-<div class="line"><a id="l00538" name="l00538"></a><span class="lineno">  538</span>  133110.295205, 133750.312426, 134390.364847, 135030.321000, 135670.319926, 136310.335570, 136950.324790, 137590.338289,</div>
-<div class="line"><a id="l00539" name="l00539"></a><span class="lineno">  539</span>  138230.368657, 138870.374084, 139510.447896, 140150.468353, 140790.441338, 141430.438424, 142070.440787, 142710.431348,</div>
-<div class="line"><a id="l00540" name="l00540"></a><span class="lineno">  540</span>  143350.433770, 143990.493350, 144630.548409, 145270.549935, 145910.530486, 146550.488808, 147190.510290, 147830.509426,</div>
-<div class="line"><a id="l00541" name="l00541"></a><span class="lineno">  541</span>  148470.575641, 149110.541845, 149750.592427, 150390.634921, 151030.706500, 151670.646574, 152310.624482, 152950.686127,</div>
-<div class="line"><a id="l00542" name="l00542"></a><span class="lineno">  542</span>  153590.659153, 154230.646236, 154870.720079, 155510.614028, 156150.596142, 156790.659641, 157430.633386, 158070.649047,</div>
-<div class="line"><a id="l00543" name="l00543"></a><span class="lineno">  543</span>  158710.591350, 159350.585980, 159990.557711, 160630.530183, 161270.499427, 161910.521323, 162550.516603, 163190.482792,</div>
-<div class="line"><a id="l00544" name="l00544"></a><span class="lineno">  544</span>  163830.422631</div>
-<div class="line"><a id="l00545" name="l00545"></a><span class="lineno">  545</span>},</div>
-<div class="line"><a id="l00546" name="l00546"></a><span class="lineno">  546</span><span class="comment">// log K = 15</span></div>
-<div class="line"><a id="l00547" name="l00547"></a><span class="lineno">  547</span>{</div>
-<div class="line"><a id="l00548" name="l00548"></a><span class="lineno">  548</span>  23634.780143, 24256.008404, 24888.717596, 25532.934303, 26188.680791, 26855.965949, 27534.798395, 28225.179199,</div>
-<div class="line"><a id="l00549" name="l00549"></a><span class="lineno">  549</span>  28927.099457, 29640.545847, 30365.501013, 31101.936533, 31849.825685, 32609.111850, 33379.755958, 34161.706474,</div>
-<div class="line"><a id="l00550" name="l00550"></a><span class="lineno">  550</span>  34954.912131, 35759.291030, 36574.778310, 37401.280667, 38238.742234, 39087.060449, 39946.133936, 40815.861824,</div>
-<div class="line"><a id="l00551" name="l00551"></a><span class="lineno">  551</span>  41696.151280, 42586.877221, 43487.927203, 44399.169293, 45320.460825, 46251.693279, 47192.741847, 48143.464216,</div>
-<div class="line"><a id="l00552" name="l00552"></a><span class="lineno">  552</span>  49103.716679, 50073.349113, 51052.208336, 52040.138165, 53036.993192, 54042.604241, 55056.838449, 56079.501709,</div>
-<div class="line"><a id="l00553" name="l00553"></a><span class="lineno">  553</span>  57110.434199, 58149.484623, 59196.455710, 60251.226284, 61313.593108, 62383.385277, 63460.484960, 64544.666337,</div>
-<div class="line"><a id="l00554" name="l00554"></a><span class="lineno">  554</span>  65635.763495, 66733.629361, 67838.096489, 68948.987037, 70066.117363, 71189.338133, 72318.464573, 73453.423815,</div>
-<div class="line"><a id="l00555" name="l00555"></a><span class="lineno">  555</span>  74593.923438, 75739.864335, 76891.058098, 78047.391508, 79208.654009, 80374.753680, 81545.514022, 82720.817799,</div>
-<div class="line"><a id="l00556" name="l00556"></a><span class="lineno">  556</span>  83900.405263, 85084.273208, 86272.263471, 87464.134340, 88659.829437, 89859.204804, 91062.115479, 92268.425863,</div>
-<div class="line"><a id="l00557" name="l00557"></a><span class="lineno">  557</span>  93478.041907, 94690.804589, 95906.647693, 97125.398400, 98347.018145, 99571.305992, 100798.274503, 102027.737913,</div>
-<div class="line"><a id="l00558" name="l00558"></a><span class="lineno">  558</span>  103259.574749, 104493.727918, 105730.035415, 106968.465700, 108208.988306, 109451.445144, 110695.748927, 111941.827269,</div>
-<div class="line"><a id="l00559" name="l00559"></a><span class="lineno">  559</span>  113189.666448, 114439.093665, 115690.116530, 116942.608958, 118196.501294, 119451.722652, 120708.276299, 121966.046247,</div>
-<div class="line"><a id="l00560" name="l00560"></a><span class="lineno">  560</span>  123225.027480, 124485.082349, 125746.201609, 127008.357433, 128271.416054, 129535.417336, 130800.297278, 132066.008820,</div>
-<div class="line"><a id="l00561" name="l00561"></a><span class="lineno">  561</span>  133332.483576, 134599.733640, 135867.681429, 137136.303792, 138405.538969, 139675.413251, 140945.839375, 142216.787412,</div>
-<div class="line"><a id="l00562" name="l00562"></a><span class="lineno">  562</span>  143488.232199, 144760.234976, 146032.650196, 147305.459198, 148578.703708, 149852.356585, 151126.347770, 152400.641475,</div>
-<div class="line"><a id="l00563" name="l00563"></a><span class="lineno">  563</span>  153675.275168, 154950.179904, 156225.390849, 157500.864126, 158776.585926, 160052.504602, 161328.716398, 162605.171897,</div>
-<div class="line"><a id="l00564" name="l00564"></a><span class="lineno">  564</span>  163881.825931, 165158.677102, 166435.646121, 167712.814846, 168990.136047, 170267.619890, 171545.238277, 172823.011460,</div>
-<div class="line"><a id="l00565" name="l00565"></a><span class="lineno">  565</span>  174100.890250, 175378.821293, 176656.920467, 177935.093547, 179213.318173, 180491.692642, 181770.130424, 183048.727206,</div>
-<div class="line"><a id="l00566" name="l00566"></a><span class="lineno">  566</span>  184327.217835, 185605.921891, 186884.657773, 188163.418059, 189442.221838, 190721.122201, 192000.068271, 193279.087882,</div>
-<div class="line"><a id="l00567" name="l00567"></a><span class="lineno">  567</span>  194558.139554, 195837.195523, 197116.400538, 198395.612565, 199674.831001, 200954.101970, 202233.365695, 203512.639968,</div>
-<div class="line"><a id="l00568" name="l00568"></a><span class="lineno">  568</span>  204792.003319, 206071.379608, 207350.730914, 208630.080321, 209909.544216, 211189.014497, 212468.508049, 213748.055445,</div>
-<div class="line"><a id="l00569" name="l00569"></a><span class="lineno">  569</span>  215027.584964, 216307.216078, 217586.896296, 218866.477232, 220146.109506, 221425.767458, 222705.465633, 223985.129542,</div>
-<div class="line"><a id="l00570" name="l00570"></a><span class="lineno">  570</span>  225264.797531, 226544.544335, 227824.304232, 229104.031191, 230383.739676, 231663.424684, 232943.198829, 234222.906969,</div>
-<div class="line"><a id="l00571" name="l00571"></a><span class="lineno">  571</span>  235502.669185, 236782.475696, 238062.262723, 239342.090234, 240622.002668, 241901.911022, 243181.742902, 244461.690551,</div>
-<div class="line"><a id="l00572" name="l00572"></a><span class="lineno">  572</span>  245741.531359, 247021.432644, 248301.277604, 249581.168404, 250861.094078, 252141.038818, 253421.065594, 254701.020169,</div>
-<div class="line"><a id="l00573" name="l00573"></a><span class="lineno">  573</span>  255980.887518, 257260.848328, 258540.873565, 259820.905666, 261100.908594, 262380.854763, 263660.862699, 264940.834842,</div>
-<div class="line"><a id="l00574" name="l00574"></a><span class="lineno">  574</span>  266220.775656, 267500.745402, 268780.761926, 270060.823540, 271340.798715, 272620.823081, 273900.881190, 275180.928531,</div>
-<div class="line"><a id="l00575" name="l00575"></a><span class="lineno">  575</span>  276460.914606, 277740.919081, 279020.967358, 280301.002010, 281581.054314, 282861.097638, 284141.109728, 285421.181335,</div>
-<div class="line"><a id="l00576" name="l00576"></a><span class="lineno">  576</span>  286701.182750, 287981.231437, 289261.342952, 290541.328315, 291821.320901, 293101.395969, 294381.402286, 295661.374812,</div>
-<div class="line"><a id="l00577" name="l00577"></a><span class="lineno">  577</span>  296941.357112, 298221.462446, 299501.443884, 300781.429735, 302061.512800, 303341.459364, 304621.530042, 305901.507763,</div>
-<div class="line"><a id="l00578" name="l00578"></a><span class="lineno">  578</span>  307181.541613, 308461.506346, 309741.474814, 311021.458944, 312301.373851, 313581.258984, 314861.222655, 316141.192042,</div>
-<div class="line"><a id="l00579" name="l00579"></a><span class="lineno">  579</span>  317421.179698, 318701.162346, 319981.143104, 321261.185706, 322541.120379, 323821.065555, 325100.961639, 326380.920540,</div>
-<div class="line"><a id="l00580" name="l00580"></a><span class="lineno">  580</span>  327660.786948</div>
-<div class="line"><a id="l00581" name="l00581"></a><span class="lineno">  581</span>},</div>
-<div class="line"><a id="l00582" name="l00582"></a><span class="lineno">  582</span><span class="comment">// log K = 16</span></div>
-<div class="line"><a id="l00583" name="l00583"></a><span class="lineno">  583</span>{</div>
-<div class="line"><a id="l00584" name="l00584"></a><span class="lineno">  584</span>  47270.338530, 48512.804588, 49778.235006, 51066.679846, 52378.178287, 53712.756179, 55070.430016, 56451.198432,</div>
-<div class="line"><a id="l00585" name="l00585"></a><span class="lineno">  585</span>  57855.044557, 59281.941569, 60731.855114, 62204.727445, 63700.498656, 65219.087806, 66760.381754, 68324.278827,</div>
-<div class="line"><a id="l00586" name="l00586"></a><span class="lineno">  586</span>  69910.681844, 71519.442760, 73150.426782, 74803.469853, 76478.400456, 78175.038414, 79893.184924, 81632.639705,</div>
-<div class="line"><a id="l00587" name="l00587"></a><span class="lineno">  587</span>  83393.214587, 85174.662642, 86976.739912, 88799.210643, 90641.829434, 92504.355605, 94386.478165, 96287.925119,</div>
-<div class="line"><a id="l00588" name="l00588"></a><span class="lineno">  588</span>  98208.422967, 100147.694840, 102105.387259, 104081.226364, 106074.916897, 108086.136683, 110114.560800, 112159.857579,</div>
-<div class="line"><a id="l00589" name="l00589"></a><span class="lineno">  589</span>  114221.724675, 116299.785348, 118393.731853, 120503.258946, 122627.958417, 124767.540962, 126921.668848, 129090.003274,</div>
-<div class="line"><a id="l00590" name="l00590"></a><span class="lineno">  590</span>  131272.204811, 133467.918004, 135676.870426, 137898.595565, 140132.829694, 142379.269230, 144637.536478, 146907.321805,</div>
-<div class="line"><a id="l00591" name="l00591"></a><span class="lineno">  591</span>  149188.299797, 151480.151490, 153782.571459, 156095.292246, 158417.834407, 160749.983694, 163091.465145, 165441.984077,</div>
-<div class="line"><a id="l00592" name="l00592"></a><span class="lineno">  592</span>  167801.236994, 170168.903670, 172544.767987, 174928.494171, 177319.918928, 179718.624717, 182124.426670, 184537.056818,</div>
-<div class="line"><a id="l00593" name="l00593"></a><span class="lineno">  593</span>  186956.260737, 189381.869001, 191813.551321, 194251.107949, 196694.280093, 199142.910671, 201596.663557, 204055.453662,</div>
-<div class="line"><a id="l00594" name="l00594"></a><span class="lineno">  594</span>  206519.090402, 208987.322132, 211460.079506, 213936.962995, 216417.945039, 218902.907481, 221391.594168, 223883.857806,</div>
-<div class="line"><a id="l00595" name="l00595"></a><span class="lineno">  595</span>  226379.519239, 228878.478995, 231380.515508, 233885.422831, 236393.251620, 238903.734661, 241416.885791, 243932.462444,</div>
-<div class="line"><a id="l00596" name="l00596"></a><span class="lineno">  596</span>  246450.361381, 248970.497360, 251492.768859, 254017.059221, 256543.244066, 259071.366198, 261601.098326, 264132.472390,</div>
-<div class="line"><a id="l00597" name="l00597"></a><span class="lineno">  597</span>  266665.477130, 269200.003838, 271735.898262, 274273.128446, 276811.699617, 279351.334667, 281892.176977, 284434.126935,</div>
-<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span>  286977.141855, 289520.993664, 292065.816286, 294611.452586, 297157.986206, 299705.252956, 302253.226506, 304801.859484,</div>
-<div class="line"><a id="l00599" name="l00599"></a><span class="lineno">  599</span>  307351.170990, 309901.148395, 312451.594894, 315002.530644, 317553.961670, 320105.951895, 322658.553440, 325211.299379,</div>
-<div class="line"><a id="l00600" name="l00600"></a><span class="lineno">  600</span>  327764.626147, 330318.311300, 332872.331048, 335426.696106, 337981.358498, 340536.275072, 343091.446562, 345646.972942,</div>
-<div class="line"><a id="l00601" name="l00601"></a><span class="lineno">  601</span>  348202.757347, 350758.693296, 353314.808579, 355871.203754, 358427.702337, 360984.491079, 363541.449032, 366098.493281,</div>
-<div class="line"><a id="l00602" name="l00602"></a><span class="lineno">  602</span>  368655.687887, 371213.030472, 373770.561193, 376328.233445, 378886.001706, 381443.937538, 384001.856504, 386559.857503,</div>
-<div class="line"><a id="l00603" name="l00603"></a><span class="lineno">  603</span>  389117.926075, 391676.219835, 394234.530250, 396792.812601, 399351.291660, 401909.794770, 404468.330377, 407026.964781,</div>
-<div class="line"><a id="l00604" name="l00604"></a><span class="lineno">  604</span>  409585.614496, 412144.407471, 414703.175858, 417261.980659, 419820.958264, 422379.863083, 424938.751186, 427497.927620,</div>
-<div class="line"><a id="l00605" name="l00605"></a><span class="lineno">  605</span>  430056.993719, 432616.066348, 435175.266190, 437734.382772, 440293.531277, 442852.711332, 445412.016423, 447971.502143,</div>
-<div class="line"><a id="l00606" name="l00606"></a><span class="lineno">  606</span>  450530.798765, 453090.167199, 455649.502729, 458208.951251, 460768.459694, 463328.053373, 465887.570627, 468447.239271,</div>
-<div class="line"><a id="l00607" name="l00607"></a><span class="lineno">  607</span>  471006.792818, 473566.544068, 476126.194227, 478685.887605, 481245.577573, 483805.348711, 486365.028302, 488924.844568,</div>
-<div class="line"><a id="l00608" name="l00608"></a><span class="lineno">  608</span>  491484.612666, 494044.321666, 496604.011864, 499163.799789, 501723.629793, 504283.493711, 506843.290195, 509403.157856,</div>
-<div class="line"><a id="l00609" name="l00609"></a><span class="lineno">  609</span>  511962.990320, 514522.941350, 517082.791953, 519642.848656, 522202.833761, 524762.686522, 527322.632758, 529882.529037,</div>
-<div class="line"><a id="l00610" name="l00610"></a><span class="lineno">  610</span>  532442.420851, 535002.422317, 537562.386309, 540122.357425, 542682.434171, 545242.468829, 547802.466694, 550362.492718,</div>
-<div class="line"><a id="l00611" name="l00611"></a><span class="lineno">  611</span>  552922.461624, 555482.539495, 558042.531431, 560602.467437, 563162.648952, 565722.750610, 568282.702877, 570842.810092,</div>
-<div class="line"><a id="l00612" name="l00612"></a><span class="lineno">  612</span>  573402.917604, 575962.999235, 578523.081937, 581083.162584, 583643.265455, 586203.287883, 588763.260931, 591323.292027,</div>
-<div class="line"><a id="l00613" name="l00613"></a><span class="lineno">  613</span>  593883.252456, 596443.273935, 599003.353442, 601563.492606, 604123.421135, 606683.438234, 609243.605174, 611803.638038,</div>
-<div class="line"><a id="l00614" name="l00614"></a><span class="lineno">  614</span>  614363.628593, 616923.690580, 619483.675256, 622043.744171, 624603.673246, 627163.577236, 629723.677960, 632283.670157,</div>
-<div class="line"><a id="l00615" name="l00615"></a><span class="lineno">  615</span>  634843.692958, 637403.576097, 639963.511752, 642523.482942, 645083.419327, 647643.330711, 650203.272467, 652763.290376,</div>
-<div class="line"><a id="l00616" name="l00616"></a><span class="lineno">  616</span>  655323.267522</div>
-<div class="line"><a id="l00617" name="l00617"></a><span class="lineno">  617</span>},</div>
-<div class="line"><a id="l00618" name="l00618"></a><span class="lineno">  618</span><span class="comment">// log K = 17</span></div>
-<div class="line"><a id="l00619" name="l00619"></a><span class="lineno">  619</span>{</div>
-<div class="line"><a id="l00620" name="l00620"></a><span class="lineno">  620</span>  94541.455324, 97026.403245, 99557.280165, 102134.178452, 104757.187033, 107426.362674, 110141.726029, 112903.278005,</div>
-<div class="line"><a id="l00621" name="l00621"></a><span class="lineno">  621</span>  115710.975458, 118564.785344, 121464.629896, 124410.377345, 127401.910279, 130439.087070, 133521.683723, 136649.499031,</div>
-<div class="line"><a id="l00622" name="l00622"></a><span class="lineno">  622</span>  139822.321627, 143039.848320, 146301.785984, 149607.844773, 152957.695333, 156350.945326, 159787.233040, 163266.157476,</div>
-<div class="line"><a id="l00623" name="l00623"></a><span class="lineno">  623</span>  166787.301371, 170350.201319, 173954.353438, 177599.302692, 181284.526367, 185009.507089, 188773.757457, 192576.638207,</div>
-<div class="line"><a id="l00624" name="l00624"></a><span class="lineno">  624</span>  196417.619925, 200296.089540, 204211.494530, 208163.221220, 212150.613086, 216173.056150, 220229.879308, 224320.462264,</div>
-<div class="line"><a id="l00625" name="l00625"></a><span class="lineno">  625</span>  228444.146459, 232600.284426, 236788.187347, 241007.264352, 245256.725247, 249535.938618, 253844.217048, 258180.876528,</div>
-<div class="line"><a id="l00626" name="l00626"></a><span class="lineno">  626</span>  262545.282090, 266936.686787, 271354.453768, 275797.958112, 280266.429404, 284759.298770, 289275.861948, 293815.386243,</div>
-<div class="line"><a id="l00627" name="l00627"></a><span class="lineno">  627</span>  298377.390708, 302961.087179, 307565.895452, 312191.173759, 316836.362522, 321500.721532, 326183.652758, 330884.723656,</div>
-<div class="line"><a id="l00628" name="l00628"></a><span class="lineno">  628</span>  335603.197219, 340338.617624, 345090.316855, 349857.860719, 354640.538362, 359438.001710, 364249.638745, 369074.940533,</div>
-<div class="line"><a id="l00629" name="l00629"></a><span class="lineno">  629</span>  373913.351331, 378764.438864, 383627.767868, 388502.854215, 393389.259584, 398286.483436, 403194.238263, 408111.948151,</div>
-<div class="line"><a id="l00630" name="l00630"></a><span class="lineno">  630</span>  413039.292303, 417975.909674, 422921.304084, 427875.195485, 432837.200959, 437807.062429, 442784.399966, 447768.726662,</div>
-<div class="line"><a id="l00631" name="l00631"></a><span class="lineno">  631</span>  452760.032525, 457757.794185, 462761.810279, 467771.737196, 472787.226777, 477808.283249, 482834.411114, 487865.521166,</div>
-<div class="line"><a id="l00632" name="l00632"></a><span class="lineno">  632</span>  492901.275392, 497941.616150, 502986.164281, 508034.749030, 513087.210697, 518143.298172, 523202.692981, 528265.454984,</div>
-<div class="line"><a id="l00633" name="l00633"></a><span class="lineno">  633</span>  533331.384435, 538400.437943, 543472.278711, 548546.790172, 553623.737338, 558703.047575, 563784.666463, 568868.524932,</div>
-<div class="line"><a id="l00634" name="l00634"></a><span class="lineno">  634</span>  573954.251207, 579041.935016, 584131.557779, 589222.910016, 594315.786547, 599410.314112, 604506.227555, 609603.610432,</div>
-<div class="line"><a id="l00635" name="l00635"></a><span class="lineno">  635</span>  614702.124262, 619801.918486, 624902.903258, 630005.085347, 635107.990499, 640211.847431, 645316.755403, 650422.424613,</div>
-<div class="line"><a id="l00636" name="l00636"></a><span class="lineno">  636</span>  655529.009211, 660636.166872, 665744.170495, 670852.806947, 675962.099161, 681072.042796, 686182.458370, 691293.269596,</div>
-<div class="line"><a id="l00637" name="l00637"></a><span class="lineno">  637</span>  696404.763335, 701516.635253, 706628.965299, 711741.575313, 716854.769083, 721968.220605, 727082.027784, 732196.114131,</div>
-<div class="line"><a id="l00638" name="l00638"></a><span class="lineno">  638</span>  737310.594653, 742425.339665, 747540.295793, 752655.505647, 757770.968129, 762886.636891, 768002.527720, 773118.559142,</div>
-<div class="line"><a id="l00639" name="l00639"></a><span class="lineno">  639</span>  778234.871441, 783351.273881, 788467.944809, 793584.599211, 798701.497594, 803818.484285, 808935.619316, 814053.067243,</div>
-<div class="line"><a id="l00640" name="l00640"></a><span class="lineno">  640</span>  819170.390229, 824287.946609, 829405.450988, 834523.054071, 839640.856519, 844758.800102, 849876.719924, 854994.831607,</div>
-<div class="line"><a id="l00641" name="l00641"></a><span class="lineno">  641</span>  860112.896788, 865231.116455, 870349.453898, 875467.910756, 880586.444976, 885705.102070, 890823.822978, 895942.513436,</div>
-<div class="line"><a id="l00642" name="l00642"></a><span class="lineno">  642</span>  901061.120048, 906179.716020, 911298.587548, 916417.583647, 921536.507373, 926655.570709, 931774.690027, 936893.879961,</div>
-<div class="line"><a id="l00643" name="l00643"></a><span class="lineno">  643</span>  942012.956398, 947132.142141, 952251.503479, 957370.815448, 962490.012685, 967609.521437, 972729.002837, 977848.339983,</div>
-<div class="line"><a id="l00644" name="l00644"></a><span class="lineno">  644</span>  982967.824448, 988087.392216, 993206.992691, 998326.635354, 1003446.304388, 1008565.985024, 1013685.706678, 1018805.581548,</div>
-<div class="line"><a id="l00645" name="l00645"></a><span class="lineno">  645</span>  1023925.239073, 1029045.157502, 1034165.035124, 1039284.843524, 1044404.676526, 1049524.620186, 1054644.441170, 1059764.409794,</div>
-<div class="line"><a id="l00646" name="l00646"></a><span class="lineno">  646</span>  1064884.318434, 1070004.338968, 1075124.268749, 1080244.471055, 1085364.528193, 1090484.511927, 1095604.595114, 1100724.598478,</div>
-<div class="line"><a id="l00647" name="l00647"></a><span class="lineno">  647</span>  1105844.666500, 1110964.804168, 1116084.864159, 1121204.874577, 1126325.062599, 1131445.152321, 1136565.301592, 1141685.638897,</div>
-<div class="line"><a id="l00648" name="l00648"></a><span class="lineno">  648</span>  1146805.806800, 1151925.790859, 1157045.932640, 1162166.112443, 1167286.221698, 1172406.273611, 1177526.581875, 1182646.832239,</div>
-<div class="line"><a id="l00649" name="l00649"></a><span class="lineno">  649</span>  1187766.882661, 1192886.884388, 1198006.962839, 1203127.084377, 1208246.959060, 1213366.976076, 1218486.763464, 1223606.758568,</div>
-<div class="line"><a id="l00650" name="l00650"></a><span class="lineno">  650</span>  1228726.721761, 1233846.593404, 1238966.815228, 1244086.865449, 1249206.854850, 1254326.996667, 1259447.092239, 1264567.198081,</div>
-<div class="line"><a id="l00651" name="l00651"></a><span class="lineno">  651</span>  1269687.499091, 1274807.474194, 1279927.244161, 1285047.273317, 1290167.090035, 1295287.035620, 1300406.888764, 1305526.667946,</div>
-<div class="line"><a id="l00652" name="l00652"></a><span class="lineno">  652</span>  1310646.540340</div>
-<div class="line"><a id="l00653" name="l00653"></a><span class="lineno">  653</span>},</div>
-<div class="line"><a id="l00654" name="l00654"></a><span class="lineno">  654</span><span class="comment">// log K = 18</span></div>
-<div class="line"><a id="l00655" name="l00655"></a><span class="lineno">  655</span>{</div>
-<div class="line"><a id="l00656" name="l00656"></a><span class="lineno">  656</span>  189083.688921, 194053.597973, 199115.342781, 204269.157017, 209515.195566, 214853.553887, 220284.295855, 225807.399998,</div>
-<div class="line"><a id="l00657" name="l00657"></a><span class="lineno">  657</span>  231422.826900, 237130.469824, 242930.139690, 248821.634191, 254804.718978, 260879.073467, 267044.289594, 273299.936993,</div>
-<div class="line"><a id="l00658" name="l00658"></a><span class="lineno">  658</span>  279645.549742, 286080.586199, 292604.521050, 299216.651567, 305916.376160, 312702.908374, 319575.536730, 326533.420485,</div>
-<div class="line"><a id="l00659" name="l00659"></a><span class="lineno">  659</span>  333575.639430, 340701.388339, 347909.713977, 355199.642852, 362570.108280, 370020.154080, 377548.652175, 385154.413997,</div>
-<div class="line"><a id="l00660" name="l00660"></a><span class="lineno">  660</span>  392836.374125, 400593.371525, 408424.172521, 416327.671123, 424302.406749, 432347.292674, 440461.014310, 448642.241683,</div>
-<div class="line"><a id="l00661" name="l00661"></a><span class="lineno">  661</span>  456889.603709, 465201.946081, 473577.749277, 482015.802141, 490514.770444, 499073.243760, 507689.794308, 516363.149230,</div>
-<div class="line"><a id="l00662" name="l00662"></a><span class="lineno">  662</span>  525091.902823, 533874.850510, 542710.434311, 551597.433198, 560534.241273, 569520.019389, 578553.034265, 587632.180111,</div>
-<div class="line"><a id="l00663" name="l00663"></a><span class="lineno">  663</span>  596756.084542, 605923.440522, 615133.037840, 624383.626242, 633673.841133, 643002.674316, 652368.578283, 661770.556501,</div>
-<div class="line"><a id="l00664" name="l00664"></a><span class="lineno">  664</span>  671207.605795, 680678.417768, 690181.818697, 699716.780471, 709282.084973, 718876.864175, 728499.951143, 738150.280049,</div>
-<div class="line"><a id="l00665" name="l00665"></a><span class="lineno">  665</span>  747827.053968, 757529.236597, 767255.784062, 777006.100829, 786779.065927, 796573.507429, 806388.828153, 816223.976258,</div>
-<div class="line"><a id="l00666" name="l00666"></a><span class="lineno">  666</span>  826078.608350, 835951.751956, 845842.493689, 855750.225870, 865674.190527, 875613.809349, 885568.425527, 895537.272219,</div>
-<div class="line"><a id="l00667" name="l00667"></a><span class="lineno">  667</span>  905519.763307, 915515.310346, 925523.353103, 935543.172648, 945574.292664, 955616.280042, 965668.428231, 975730.535479,</div>
-<div class="line"><a id="l00668" name="l00668"></a><span class="lineno">  668</span>  985802.055447, 995882.596628, 1005971.583108, 1016068.664992, 1026173.649961, 1036285.774891, 1046404.955770, 1056530.588186,</div>
-<div class="line"><a id="l00669" name="l00669"></a><span class="lineno">  669</span>  1066662.648243, 1076800.535542, 1086944.269881, 1097093.058652, 1107247.076183, 1117405.990557, 1127569.310917, 1137737.011345,</div>
-<div class="line"><a id="l00670" name="l00670"></a><span class="lineno">  670</span>  1147908.717700, 1158084.362020, 1168263.501029, 1178446.221907, 1188632.206842, 1198821.131431, 1209013.020373, 1219207.570786,</div>
-<div class="line"><a id="l00671" name="l00671"></a><span class="lineno">  671</span>  1229404.854893, 1239604.423801, 1249806.433263, 1260010.619993, 1270216.819018, 1280424.774173, 1290634.560600, 1300846.097203,</div>
-<div class="line"><a id="l00672" name="l00672"></a><span class="lineno">  672</span>  1311059.128630, 1321273.628402, 1331489.832488, 1341707.300774, 1351925.947953, 1362145.802925, 1372366.802414, 1382588.547896,</div>
-<div class="line"><a id="l00673" name="l00673"></a><span class="lineno">  673</span>  1392811.264776, 1403035.227449, 1413259.922280, 1423485.322819, 1433711.916106, 1443938.981360, 1454166.596984, 1464394.761679,</div>
-<div class="line"><a id="l00674" name="l00674"></a><span class="lineno">  674</span>  1474623.684212, 1484853.156422, 1495083.020146, 1505313.735890, 1515544.731764, 1525776.086634, 1536007.742073, 1546239.679012,</div>
-<div class="line"><a id="l00675" name="l00675"></a><span class="lineno">  675</span>  1556472.212370, 1566704.988763, 1576937.965495, 1587171.446007, 1597405.292186, 1607639.395274, 1617873.660775, 1628108.037273,</div>
-<div class="line"><a id="l00676" name="l00676"></a><span class="lineno">  676</span>  1638342.741799, 1648577.832828, 1658813.325573, 1669048.803784, 1679284.679963, 1689520.927615, 1699757.050010, 1709993.263665,</div>
-<div class="line"><a id="l00677" name="l00677"></a><span class="lineno">  677</span>  1720229.557663, 1730466.102090, 1740702.604009, 1750939.618504, 1761176.930182, 1771414.210528, 1781651.713742, 1791889.218503,</div>
-<div class="line"><a id="l00678" name="l00678"></a><span class="lineno">  678</span>  1802126.805234, 1812364.257333, 1822602.054007, 1832839.687792, 1843077.871973, 1853315.944762, 1863554.202066, 1873792.633125,</div>
-<div class="line"><a id="l00679" name="l00679"></a><span class="lineno">  679</span>  1884030.883830, 1894269.182711, 1904507.712050, 1914746.469507, 1924985.484753, 1935224.245956, 1945463.225215, 1955702.268883,</div>
-<div class="line"><a id="l00680" name="l00680"></a><span class="lineno">  680</span>  1965941.321722, 1976180.037370, 1986419.052784, 1996658.429579, 2006897.450283, 2017136.904971, 2027376.240039, 2037615.549295,</div>
-<div class="line"><a id="l00681" name="l00681"></a><span class="lineno">  681</span>  2047855.197425, 2058094.765906, 2068334.279787, 2078573.820075, 2088813.469730, 2099053.348620, 2109293.174176, 2119533.012704,</div>
-<div class="line"><a id="l00682" name="l00682"></a><span class="lineno">  682</span>  2129772.820132, 2140012.744709, 2150252.607739, 2160492.533017, 2170732.406422, 2180972.400110, 2191212.436319, 2201452.637894,</div>
-<div class="line"><a id="l00683" name="l00683"></a><span class="lineno">  683</span>  2211692.339292, 2221932.460057, 2232172.746036, 2242412.892705, 2252653.174824, 2262893.432271, 2273134.002270, 2283374.311008,</div>
-<div class="line"><a id="l00684" name="l00684"></a><span class="lineno">  684</span>  2293614.537881, 2303854.703732, 2314095.191374, 2324335.236186, 2334575.624526, 2344816.313269, 2355056.224171, 2365296.361285,</div>
-<div class="line"><a id="l00685" name="l00685"></a><span class="lineno">  685</span>  2375537.048184, 2385777.280284, 2396017.222502, 2406257.145546, 2416497.272190, 2426737.212210, 2436977.500856, 2447217.897426,</div>
-<div class="line"><a id="l00686" name="l00686"></a><span class="lineno">  686</span>  2457458.423605, 2467698.536697, 2477938.448096, 2488178.544726, 2498418.640441, 2508658.160374, 2518898.274852, 2529138.509345,</div>
-<div class="line"><a id="l00687" name="l00687"></a><span class="lineno">  687</span>  2539378.310538, 2549617.989497, 2559857.504886, 2570097.363128, 2580337.195261, 2590576.878833, 2600816.572159, 2611055.930087,</div>
-<div class="line"><a id="l00688" name="l00688"></a><span class="lineno">  688</span>  2621295.625004</div>
-<div class="line"><a id="l00689" name="l00689"></a><span class="lineno">  689</span>},</div>
-<div class="line"><a id="l00690" name="l00690"></a><span class="lineno">  690</span><span class="comment">// log K = 19</span></div>
-<div class="line"><a id="l00691" name="l00691"></a><span class="lineno">  691</span>{</div>
-<div class="line"><a id="l00692" name="l00692"></a><span class="lineno">  692</span>  378168.156126, 388107.986863, 398231.517433, 408539.178530, 419031.252008, 429707.954086, 440569.365328, 451615.642722,</div>
-<div class="line"><a id="l00693" name="l00693"></a><span class="lineno">  693</span>  462846.490174, 474261.790112, 485861.190310, 497644.259253, 509610.438730, 521759.095095, 534089.573442, 546600.981190,</div>
-<div class="line"><a id="l00694" name="l00694"></a><span class="lineno">  694</span>  559292.272697, 572162.409622, 585210.331052, 598434.669889, 611834.157416, 625407.271721, 639152.543961, 653068.262294,</div>
-<div class="line"><a id="l00695" name="l00695"></a><span class="lineno">  695</span>  667152.777393, 681404.241581, 695820.778241, 710400.501586, 725141.425404, 740041.558661, 755098.503731, 770310.107475,</div>
-<div class="line"><a id="l00696" name="l00696"></a><span class="lineno">  696</span>  785674.192935, 801188.297422, 816849.950298, 832656.623960, 848606.198026, 864696.151343, 880923.487841, 897285.841319,</div>
-<div class="line"><a id="l00697" name="l00697"></a><span class="lineno">  697</span>  913780.530043, 930405.131973, 947156.655545, 964032.974599, 981030.762278, 998147.499138, 1015380.659035, 1032727.149847,</div>
-<div class="line"><a id="l00698" name="l00698"></a><span class="lineno">  698</span>  1050184.616751, 1067750.330789, 1085421.716664, 1103195.771853, 1121069.796650, 1139041.324454, 1157107.373802, 1175265.377022,</div>
-<div class="line"><a id="l00699" name="l00699"></a><span class="lineno">  699</span>  1193513.201704, 1211847.872855, 1230267.133114, 1248768.293478, 1267348.634472, 1286005.987451, 1304738.187318, 1323542.421988,</div>
-<div class="line"><a id="l00700" name="l00700"></a><span class="lineno">  700</span>  1342416.458954, 1361357.807871, 1380364.530293, 1399434.095493, 1418564.587724, 1437754.116682, 1457000.254889, 1476301.275902,</div>
-<div class="line"><a id="l00701" name="l00701"></a><span class="lineno">  701</span>  1495654.977143, 1515059.332212, 1534512.821906, 1554013.130304, 1573558.585534, 1593147.244450, 1612777.978405, 1632448.600136,</div>
-<div class="line"><a id="l00702" name="l00702"></a><span class="lineno">  702</span>  1652157.704100, 1671904.308928, 1691686.012962, 1711501.716352, 1731349.849417, 1751229.053668, 1771138.423208, 1791076.196899,</div>
-<div class="line"><a id="l00703" name="l00703"></a><span class="lineno">  703</span>  1811041.338260, 1831032.177526, 1851048.091817, 1871088.096683, 1891150.317142, 1911234.619162, 1931339.423184, 1951463.947205,</div>
-<div class="line"><a id="l00704" name="l00704"></a><span class="lineno">  704</span>  1971606.994543, 1991767.606441, 2011945.852451, 2032140.098239, 2052349.709954, 2072574.274980, 2092812.387905, 2113063.537955,</div>
-<div class="line"><a id="l00705" name="l00705"></a><span class="lineno">  705</span>  2133327.750182, 2153603.787963, 2173890.933053, 2194188.225246, 2214496.333997, 2234814.120065, 2255140.753372, 2275476.675949,</div>
-<div class="line"><a id="l00706" name="l00706"></a><span class="lineno">  706</span>  2295820.689602, 2316172.220323, 2336530.258616, 2356894.932256, 2377266.633368, 2397645.173978, 2418028.419639, 2438417.586475,</div>
-<div class="line"><a id="l00707" name="l00707"></a><span class="lineno">  707</span>  2458812.422593, 2479211.306360, 2499615.253217, 2520023.375080, 2540436.051898, 2560851.967345, 2581271.569076, 2601694.318944,</div>
-<div class="line"><a id="l00708" name="l00708"></a><span class="lineno">  708</span>  2622120.693963, 2642549.418269, 2662981.070023, 2683415.520909, 2703852.500003, 2724291.876933, 2744733.213126, 2765177.477758,</div>
-<div class="line"><a id="l00709" name="l00709"></a><span class="lineno">  709</span>  2785623.320019, 2806070.985142, 2826520.234343, 2846971.203929, 2867423.303616, 2887876.396540, 2908331.739769, 2928788.290672,</div>
-<div class="line"><a id="l00710" name="l00710"></a><span class="lineno">  710</span>  2949245.276635, 2969704.620226, 2990164.657583, 3010625.841710, 3031087.855626, 3051550.619090, 3072014.642350, 3092479.163042,</div>
-<div class="line"><a id="l00711" name="l00711"></a><span class="lineno">  711</span>  3112944.278087, 3133410.101603, 3153876.719100, 3174343.414117, 3194810.517970, 3215278.762802, 3235747.174277, 3256216.390486,</div>
-<div class="line"><a id="l00712" name="l00712"></a><span class="lineno">  712</span>  3276685.652553, 3297155.394593, 3317625.911419, 3338096.547090, 3358567.567862, 3379038.637659, 3399510.649493, 3419983.382105,</div>
-<div class="line"><a id="l00713" name="l00713"></a><span class="lineno">  713</span>  3440456.231853, 3460929.496047, 3481403.703904, 3501877.874941, 3522351.898403, 3542825.527074, 3563300.038829, 3583775.102749,</div>
-<div class="line"><a id="l00714" name="l00714"></a><span class="lineno">  714</span>  3604249.896903, 3624724.967423, 3645201.027293, 3665676.534460, 3686152.061202, 3706628.308333, 3727104.271827, 3747580.803335,</div>
-<div class="line"><a id="l00715" name="l00715"></a><span class="lineno">  715</span>  3768057.710876, 3788534.660048, 3809011.720864, 3829489.164523, 3849967.204462, 3870445.043912, 3890923.080446, 3911400.767281,</div>
-<div class="line"><a id="l00716" name="l00716"></a><span class="lineno">  716</span>  3931879.061622, 3952357.218696, 3972836.284463, 3993314.516935, 4013793.278282, 4034272.661280, 4054751.814018, 4075230.503334,</div>
-<div class="line"><a id="l00717" name="l00717"></a><span class="lineno">  717</span>  4095708.557968, 4116187.919814, 4136667.714093, 4157147.152355, 4177627.302553, 4198107.383728, 4218587.174918, 4239066.631662,</div>
-<div class="line"><a id="l00718" name="l00718"></a><span class="lineno">  718</span>  4259545.994167, 4280026.100110, 4300506.380609, 4320986.617208, 4341466.696312, 4361945.995732, 4382426.527708, 4402907.058309,</div>
-<div class="line"><a id="l00719" name="l00719"></a><span class="lineno">  719</span>  4423386.556967, 4443867.498542, 4464348.284664, 4484828.344391, 4505309.026083, 4525789.774619, 4546270.396129, 4566750.818685,</div>
-<div class="line"><a id="l00720" name="l00720"></a><span class="lineno">  720</span>  4587231.362126, 4607711.356124, 4628191.883250, 4648673.308942, 4669153.953372, 4689634.118530, 4710114.637510, 4730595.217429,</div>
-<div class="line"><a id="l00721" name="l00721"></a><span class="lineno">  721</span>  4751075.358693, 4771555.492921, 4792035.313408, 4812516.057037, 4832995.761283, 4853475.977619, 4873956.732160, 4894436.879314,</div>
-<div class="line"><a id="l00722" name="l00722"></a><span class="lineno">  722</span>  4914917.149285, 4935397.069776, 4955877.550351, 4976357.852728, 4996838.246842, 5017318.023169, 5037798.008344, 5058278.290403,</div>
-<div class="line"><a id="l00723" name="l00723"></a><span class="lineno">  723</span>  5078757.968956, 5099237.419344, 5119716.759591, 5140195.935830, 5160675.636320, 5181154.980843, 5201633.780713, 5222113.031789,</div>
-<div class="line"><a id="l00724" name="l00724"></a><span class="lineno">  724</span>  5242591.881577</div>
-<div class="line"><a id="l00725" name="l00725"></a><span class="lineno">  725</span>},</div>
-<div class="line"><a id="l00726" name="l00726"></a><span class="lineno">  726</span><span class="comment">// log K = 20</span></div>
-<div class="line"><a id="l00727" name="l00727"></a><span class="lineno">  727</span>{</div>
-<div class="line"><a id="l00728" name="l00728"></a><span class="lineno">  728</span>  756337.090537, 776216.744995, 796463.785646, 817079.035290, 838063.221300, 859416.678362, 881139.576270, 903232.151726,</div>
-<div class="line"><a id="l00729" name="l00729"></a><span class="lineno">  729</span>  925693.940877, 948524.600346, 971723.442348, 995289.632784, 1019222.059448, 1043519.402588, 1068180.163485, 1093202.854610,</div>
-<div class="line"><a id="l00730" name="l00730"></a><span class="lineno">  730</span>  1118585.515820, 1144326.031845, 1170421.828997, 1196870.617641, 1223669.453959, 1250815.679160, 1278306.298944, 1306137.726017,</div>
-<div class="line"><a id="l00731" name="l00731"></a><span class="lineno">  731</span>  1334306.782451, 1362809.672011, 1391643.048887, 1420802.665486, 1450284.419390, 1480084.556504, 1510198.362531, 1540621.709038,</div>
-<div class="line"><a id="l00732" name="l00732"></a><span class="lineno">  732</span>  1571349.988582, 1602377.885766, 1633700.853485, 1665314.443974, 1697213.607484, 1729393.242718, 1761847.799154, 1794572.464804,</div>
-<div class="line"><a id="l00733" name="l00733"></a><span class="lineno">  733</span>  1827562.002973, 1860811.213417, 1894314.858503, 1928067.079352, 1962062.774535, 1996296.400592, 2030762.354026, 2065455.981656,</div>
-<div class="line"><a id="l00734" name="l00734"></a><span class="lineno">  734</span>  2100370.818573, 2135502.224529, 2170844.722018, 2206392.452100, 2242140.795895, 2278083.565225, 2314215.470175, 2350532.238358,</div>
-<div class="line"><a id="l00735" name="l00735"></a><span class="lineno">  735</span>  2387028.028531, 2423697.739702, 2460535.617283, 2497537.908190, 2534699.627071, 2572014.508248, 2609478.240813, 2647086.878671,</div>
-<div class="line"><a id="l00736" name="l00736"></a><span class="lineno">  736</span>  2684834.738503, 2722717.495987, 2760730.659130, 2798869.445379, 2837130.937688, 2875509.782410, 2914002.086936, 2952603.395700,</div>
-<div class="line"><a id="l00737" name="l00737"></a><span class="lineno">  737</span>  2991310.971904, 3030119.629799, 3069026.891217, 3108027.543585, 3147118.485322, 3186296.724369, 3225557.893026, 3264899.405158,</div>
-<div class="line"><a id="l00738" name="l00738"></a><span class="lineno">  738</span>  3304317.806643, 3343809.532357, 3383372.875494, 3423003.239113, 3462699.855290, 3502458.588120, 3542276.984489, 3582151.461666,</div>
-<div class="line"><a id="l00739" name="l00739"></a><span class="lineno">  739</span>  3622080.455509, 3662062.087297, 3702093.774268, 3742173.351913, 3782298.542025, 3822466.599295, 3862676.059061, 3902925.301466,</div>
-<div class="line"><a id="l00740" name="l00740"></a><span class="lineno">  740</span>  3943212.313188, 3983534.655139, 4023890.682932, 4064278.948819, 4104698.644146, 4145147.867936, 4185624.200116, 4226127.607823,</div>
-<div class="line"><a id="l00741" name="l00741"></a><span class="lineno">  741</span>  4266655.471909, 4307207.261933, 4347781.577688, 4388376.075665, 4428991.084860, 4469625.512791, 4510278.322018, 4550949.135583,</div>
-<div class="line"><a id="l00742" name="l00742"></a><span class="lineno">  742</span>  4591635.061142, 4632337.290243, 4673054.034167, 4713783.999697, 4754527.016825, 4795282.199016, 4836049.304645, 4876828.217063,</div>
-<div class="line"><a id="l00743" name="l00743"></a><span class="lineno">  743</span>  4917617.432795, 4958416.033283, 4999223.332994, 5040040.200620, 5080865.836319, 5121698.006953, 5162537.663489, 5203383.861562,</div>
-<div class="line"><a id="l00744" name="l00744"></a><span class="lineno">  744</span>  5244235.368756, 5285093.542054, 5325957.172545, 5366826.006832, 5407700.602295, 5448579.444589, 5489462.237514, 5530348.767163,</div>
-<div class="line"><a id="l00745" name="l00745"></a><span class="lineno">  745</span>  5571240.286944, 5612135.490023, 5653033.590430, 5693935.090249, 5734840.012969, 5775747.413811, 5816658.159197, 5857571.727542,</div>
-<div class="line"><a id="l00746" name="l00746"></a><span class="lineno">  746</span>  5898486.810748, 5939403.918361, 5980324.159335, 6021245.922584, 6062167.462275, 6103093.061724, 6144019.021028, 6184948.477708,</div>
-<div class="line"><a id="l00747" name="l00747"></a><span class="lineno">  747</span>  6225878.111073, 6266809.926593, 6307741.380274, 6348674.587241, 6389609.653586, 6430546.024311, 6471482.661256, 6512419.658468,</div>
-<div class="line"><a id="l00748" name="l00748"></a><span class="lineno">  748</span>  6553358.313587, 6594299.462793, 6635239.780670, 6676180.809115, 6717122.614963, 6758064.640997, 6799009.935719, 6839954.567726,</div>
-<div class="line"><a id="l00749" name="l00749"></a><span class="lineno">  749</span>  6880900.950276, 6921847.965357, 6962794.580261, 7003742.234176, 7044691.155209, 7085639.223984, 7126587.984374, 7167538.597843,</div>
-<div class="line"><a id="l00750" name="l00750"></a><span class="lineno">  750</span>  7208487.508674, 7249437.307369, 7290389.448350, 7331341.752887, 7372292.872774, 7413245.082344, 7454198.512431, 7495151.878502,</div>
-<div class="line"><a id="l00751" name="l00751"></a><span class="lineno">  751</span>  7536105.815461, 7577059.755263, 7618013.175400, 7658967.579066, 7699922.475951, 7740878.015144, 7781833.511721, 7822789.986990,</div>
-<div class="line"><a id="l00752" name="l00752"></a><span class="lineno">  752</span>  7863745.987999, 7904702.500036, 7945659.757785, 7986615.385020, 8027573.168319, 8068531.917672, 8109489.438412, 8150447.742963,</div>
-<div class="line"><a id="l00753" name="l00753"></a><span class="lineno">  753</span>  8191403.350221, 8232362.807587, 8273321.255913, 8314281.043410, 8355240.292724, 8396199.214301, 8437156.471990, 8478114.862372,</div>
-<div class="line"><a id="l00754" name="l00754"></a><span class="lineno">  754</span>  8519073.457296, 8560034.832965, 8600993.512814, 8641954.368755, 8682914.667061, 8723875.362809, 8764837.809961, 8805797.690078,</div>
-<div class="line"><a id="l00755" name="l00755"></a><span class="lineno">  755</span>  8846758.789178, 8887720.671501, 8928680.126482, 8969640.467726, 9010601.160006, 9051561.769905, 9092522.487783, 9133484.594542,</div>
-<div class="line"><a id="l00756" name="l00756"></a><span class="lineno">  756</span>  9174446.122191, 9215406.809237, 9256366.837569, 9297328.747584, 9338288.901510, 9379250.948160, 9420212.503729, 9461173.228802,</div>
-<div class="line"><a id="l00757" name="l00757"></a><span class="lineno">  757</span>  9502133.928845, 9543094.489131, 9584055.513956, 9625015.618922, 9665975.737758, 9706937.403885, 9747896.035874, 9788856.165941,</div>
-<div class="line"><a id="l00758" name="l00758"></a><span class="lineno">  758</span>  9829816.994627, 9870777.228642, 9911737.327683, 9952698.937964, 9993660.635143, 10034620.747904, 10075579.526207, 10116539.739394,</div>
-<div class="line"><a id="l00759" name="l00759"></a><span class="lineno">  759</span>  10157498.625700, 10198458.468474, 10239418.486051, 10280376.431741, 10321335.494132, 10362295.312860, 10403254.402980, 10444214.519042,</div>
-<div class="line"><a id="l00760" name="l00760"></a><span class="lineno">  760</span>  10485173.027410</div>
-<div class="line"><a id="l00761" name="l00761"></a><span class="lineno">  761</span>},</div>
-<div class="line"><a id="l00762" name="l00762"></a><span class="lineno">  762</span><span class="comment">// log K = 21</span></div>
-<div class="line"><a id="l00763" name="l00763"></a><span class="lineno">  763</span>{</div>
-<div class="line"><a id="l00764" name="l00764"></a><span class="lineno">  764</span>  1512674.959317, 1552434.197368, 1592928.155075, 1634158.593696, 1676126.959176, 1718834.017325, 1762279.726817, 1806464.610827,</div>
-<div class="line"><a id="l00765" name="l00765"></a><span class="lineno">  765</span>  1851388.162884, 1897049.337397, 1943446.849678, 1990579.312415, 2038444.063365, 2087038.766553, 2136360.248426, 2186405.470599,</div>
-<div class="line"><a id="l00766" name="l00766"></a><span class="lineno">  766</span>  2237170.640174, 2288651.015887, 2340842.752937, 2393739.986364, 2447337.958039, 2501630.515180, 2556611.361814, 2612274.289376,</div>
-<div class="line"><a id="l00767" name="l00767"></a><span class="lineno">  767</span>  2668612.210872, 2725618.064986, 2783284.549430, 2841603.566294, 2900566.895724, 2960167.093438, 3020394.610851, 3081240.447614,</div>
-<div class="line"><a id="l00768" name="l00768"></a><span class="lineno">  768</span>  3142696.078921, 3204751.105703, 3267397.808234, 3330624.834407, 3394422.872136, 3458781.966184, 3523690.805899, 3589140.856689,</div>
-<div class="line"><a id="l00769" name="l00769"></a><span class="lineno">  769</span>  3655119.540256, 3721617.907853, 3788624.486645, 3856129.175227, 3924119.940026, 3992586.658818, 4061519.544440, 4130906.734075,</div>
-<div class="line"><a id="l00770" name="l00770"></a><span class="lineno">  770</span>  4200737.500257, 4271000.909057, 4341685.842431, 4412781.306685, 4484277.199691, 4556162.287552, 4628426.495554, 4701059.642462,</div>
-<div class="line"><a id="l00771" name="l00771"></a><span class="lineno">  771</span>  4774050.909933, 4847389.117100, 4921065.536469, 4995068.178578, 5069389.529141, 5144019.928509, 5218947.440841, 5294164.568050,</div>
-<div class="line"><a id="l00772" name="l00772"></a><span class="lineno">  772</span>  5369660.364896, 5445425.915267, 5521454.727645, 5597734.642433, 5674257.411718, 5751014.463556, 5827999.822090, 5905203.759793,</div>
-<div class="line"><a id="l00773" name="l00773"></a><span class="lineno">  773</span>  5982617.522812, 6060234.561845, 6138048.162353, 6216049.451496, 6294232.713331, 6372588.108087, 6451109.903764, 6529792.611180,</div>
-<div class="line"><a id="l00774" name="l00774"></a><span class="lineno">  774</span>  6608629.912527, 6687615.097432, 6766740.086064, 6846000.116450, 6925391.839995, 7004908.093083, 7084544.127544, 7164293.822313,</div>
-<div class="line"><a id="l00775" name="l00775"></a><span class="lineno">  775</span>  7244153.392582, 7324115.814384, 7404179.031163, 7484336.380737, 7564586.128001, 7644922.247694, 7725340.819662, 7805840.541693,</div>
-<div class="line"><a id="l00776" name="l00776"></a><span class="lineno">  776</span>  7886412.416887, 7967054.301986, 8047764.087248, 8128539.447460, 8209376.477465, 8290273.766928, 8371225.884580, 8452230.183873,</div>
-<div class="line"><a id="l00777" name="l00777"></a><span class="lineno">  777</span>  8533283.959811, 8614388.863382, 8695539.350564, 8776730.375553, 8857961.046732, 8939230.757845, 9020535.369667, 9101877.322129,</div>
-<div class="line"><a id="l00778" name="l00778"></a><span class="lineno">  778</span>  9183251.420601, 9264654.743697, 9346087.109813, 9427548.372707, 9509034.441574, 9590547.753266, 9672081.682514, 9753639.600816,</div>
-<div class="line"><a id="l00779" name="l00779"></a><span class="lineno">  779</span>  9835216.139507, 9916813.989591, 9998428.682824, 10080058.312759, 10161706.673718, 10243372.018016, 10325050.507034, 10406744.529470,</div>
-<div class="line"><a id="l00780" name="l00780"></a><span class="lineno">  780</span>  10488447.296300, 10570163.109725, 10651893.512546, 10733632.712879, 10815382.384056, 10897140.573621, 10978907.646650, 11060681.383125,</div>
-<div class="line"><a id="l00781" name="l00781"></a><span class="lineno">  781</span>  11142464.138730, 11224254.549571, 11306053.275368, 11387858.162207, 11469666.329635, 11551480.634292, 11633302.025569, 11715128.710512,</div>
-<div class="line"><a id="l00782" name="l00782"></a><span class="lineno">  782</span>  11796961.403328, 11878795.670820, 11960634.652330, 12042477.348124, 12124323.950451, 12206172.128053, 12288028.811447, 12369886.306570,</div>
-<div class="line"><a id="l00783" name="l00783"></a><span class="lineno">  783</span>  12451744.123236, 12533607.183832, 12615473.707341, 12697338.733240, 12779207.987968, 12861080.507718, 12942957.260823, 13024834.007606,</div>
-<div class="line"><a id="l00784" name="l00784"></a><span class="lineno">  784</span>  13106715.252745, 13188597.806270, 13270478.933580, 13352362.482281, 13434247.263704, 13516133.477076, 13598020.834213, 13679909.264273,</div>
-<div class="line"><a id="l00785" name="l00785"></a><span class="lineno">  785</span>  13761799.592878, 13843689.299819, 13925583.582108, 14007479.173806, 14089371.780210, 14171268.621526, 14253167.561983, 14335070.527750,</div>
-<div class="line"><a id="l00786" name="l00786"></a><span class="lineno">  786</span>  14416971.620797, 14498873.784867, 14580778.789301, 14662681.662290, 14744586.311912, 14826493.286700, 14908400.702409, 14990305.605573,</div>
-<div class="line"><a id="l00787" name="l00787"></a><span class="lineno">  787</span>  15072214.379125, 15154123.120545, 15236031.901296, 15317939.866920, 15399849.993076, 15481761.939120, 15563672.325616, 15645585.312945,</div>
-<div class="line"><a id="l00788" name="l00788"></a><span class="lineno">  788</span>  15727497.406318, 15809411.780271, 15891325.875461, 15973239.145687, 16055155.936424, 16137069.783844, 16218984.663574, 16300899.732679,</div>
-<div class="line"><a id="l00789" name="l00789"></a><span class="lineno">  789</span>  16382815.849682, 16464730.053474, 16546645.675799, 16628563.444017, 16710481.533611, 16792400.824636, 16874319.061886, 16956235.859045,</div>
-<div class="line"><a id="l00790" name="l00790"></a><span class="lineno">  790</span>  17038151.394583, 17120072.629220, 17201992.200096, 17283914.365655, 17365836.161356, 17447756.880495, 17529681.545942, 17611601.675003,</div>
-<div class="line"><a id="l00791" name="l00791"></a><span class="lineno">  791</span>  17693522.079185, 17775441.939609, 17857361.777214, 17939284.144858, 18021205.445833, 18103125.675947, 18185051.132189, 18266974.391463,</div>
-<div class="line"><a id="l00792" name="l00792"></a><span class="lineno">  792</span>  18348894.689783, 18430817.526979, 18512736.992850, 18594657.001222, 18676577.636496, 18758497.698999, 18840421.426602, 18922345.360722,</div>
-<div class="line"><a id="l00793" name="l00793"></a><span class="lineno">  793</span>  19004266.906157, 19086186.184618, 19168105.320223, 19250029.336282, 19331950.350200, 19413874.580826, 19495794.431194, 19577715.745558,</div>
-<div class="line"><a id="l00794" name="l00794"></a><span class="lineno">  794</span>  19659638.264924, 19741557.363469, 19823478.431258, 19905400.862401, 19987318.682409, 20069238.585823, 20151157.549449, 20233076.181910,</div>
-<div class="line"><a id="l00795" name="l00795"></a><span class="lineno">  795</span>  20314994.521260, 20396915.069140, 20478836.108717, 20560753.915833, 20642672.570035, 20724588.867440, 20806507.038063, 20888426.370670,</div>
-<div class="line"><a id="l00796" name="l00796"></a><span class="lineno">  796</span>  20970344.006053</div>
-<div class="line"><a id="l00797" name="l00797"></a><span class="lineno">  797</span>}</div>
-<div class="line"><a id="l00798" name="l00798"></a><span class="lineno">  798</span>};</div>
-<div class="line"><a id="l00799" name="l00799"></a><span class="lineno">  799</span> </div>
-<div class="line"><a id="l00800" name="l00800"></a><span class="lineno">  800</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00801" name="l00801"></a><span class="lineno">  801</span><span class="keyword">const</span> <span class="keywordtype">double</span>* CompositeInterpolationXTable&lt;A&gt;::get_x_arr(uint8_t logK) {</div>
-<div class="line"><a id="l00802" name="l00802"></a><span class="lineno">  802</span>  <span class="keywordflow">if</span> (logK &lt; hll_constants::MIN_LOG_K || logK &gt; hll_constants::MAX_LOG_K) {</div>
-<div class="line"><a id="l00803" name="l00803"></a><span class="lineno">  803</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;logK must be in range [&quot;</span> + std::to_string(hll_constants::MIN_LOG_K)</div>
-<div class="line"><a id="l00804" name="l00804"></a><span class="lineno">  804</span>                                + <span class="stringliteral">&quot;, &quot;</span> + std::to_string(hll_constants::MAX_LOG_K) + <span class="stringliteral">&quot;]. Found: &quot;</span></div>
-<div class="line"><a id="l00805" name="l00805"></a><span class="lineno">  805</span>                                + std::to_string(logK));</div>
-<div class="line"><a id="l00806" name="l00806"></a><span class="lineno">  806</span>  }</div>
-<div class="line"><a id="l00807" name="l00807"></a><span class="lineno">  807</span>  <span class="keywordflow">return</span> xArray[logK - hll_constants::MIN_LOG_K];</div>
-<div class="line"><a id="l00808" name="l00808"></a><span class="lineno">  808</span>}</div>
-<div class="line"><a id="l00809" name="l00809"></a><span class="lineno">  809</span> </div>
-<div class="line"><a id="l00810" name="l00810"></a><span class="lineno">  810</span>}</div>
-<div class="line"><a id="l00811" name="l00811"></a><span class="lineno">  811</span> </div>
-<div class="line"><a id="l00812" name="l00812"></a><span class="lineno">  812</span><span class="preprocessor">#endif </span><span class="comment">// _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;HllUtil.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;CompositeInterpolationXTable.hpp&quot;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;exception&gt;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint32_t numXArrValues = 257;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> uint32_t yStrides[] =</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;  {1, 2, 3, 5, 10, 20, 40, 80, 160, 320, 640, 1280, 2560, 5120, 10240, 20480, 40960, 81920};</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;uint32_t CompositeInterpolationXTable&lt;A&gt;::get_y_stride(uint8_t logK) {</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;  <span class="keywordflow">if</span> (logK &lt; hll_constants::MIN_LOG_K || logK &gt; hll_constants::MAX_LOG_K) {</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;logK must be in range [&quot;</span> + std::to_string(hll_constants::MIN_LOG_K)</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;                                + <span class="stringliteral">&quot;, &quot;</span> + std::to_string(hll_constants::MAX_LOG_K) + <span class="stringliteral">&quot;]. Found: &quot;</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;                                + std::to_string(logK));</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  }</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;  <span class="keywordflow">return</span> yStrides[logK - hll_constants::MIN_LOG_K];</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;}</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;uint32_t CompositeInterpolationXTable&lt;A&gt;::get_x_arr_length() {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  <span class="keywordflow">return</span> numXArrValues;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;}</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> xArray[18][numXArrValues] = {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;{</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  10.767999803534, 11.237701481774, 11.722738717438, 12.223246391222,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  12.739366773787, 13.271184824495, 13.818759686650, 14.382159835785,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  14.961390904922, 15.556414447178, 16.167227058768, 16.793705840034,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  17.435831011559, 18.093368824077, 18.766214022468, 19.454114555153,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  20.156877376380, 20.874309118151, 21.606085061388, 22.351926834624,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  23.111406651437, 23.884222842419, 24.669953053285, 25.468324695415,</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  26.278740385032, 27.100807701976, 27.934264623663, 28.778498012717,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  29.633064579479, 30.497559091830, 31.371415928956, 32.254248998304,</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  33.145649456017, 34.045084140394, 34.952069032314, 35.866210502243,</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  36.787128772113, 37.714316067007, 38.647432342061, 39.586020708848,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  40.529738186256, 41.478377527525, 42.431435504179, 43.388619067416,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  44.349650659292, 45.314111448463, 46.281805382722, 47.252472240229,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  48.225969481651, 49.202042512440, 50.180350422249, 51.160761480664,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  52.143032445587, 53.127233235412, 54.112986437616, 55.100182392694,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  56.088558030701, 57.078156023607, 58.068788167275, 59.060493030644,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  60.053033784417, 61.046284072738, 62.040286486621, 63.034929032992,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  64.030027371399, 65.025588917110, 66.021614945599, 67.018177418440,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  68.015186786528, 69.012467972526, 70.010014322660, 71.007638150468,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  72.005472777573, 73.003558069130, 74.001925061314, 75.000323809106,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  75.998875046818, 76.997735309722, 77.996356820987, 78.995236661037,</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  79.994185446564, 80.993179953574, 81.991936172868, 82.991277726952,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  83.990564675011, 84.990016215330, 85.989354175963, 86.988664031183,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  87.988038383374, 88.987487931153, 89.987011275632, 90.986376635228,</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  91.985802667485, 92.985125933965, 93.984894049744, 94.984597185523,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  95.984374633793, 96.983987641198, 97.983728001025, 98.983151114601,</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  99.982917278162, 100.982752268263, 101.982610588914, 102.982425129077,</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  103.982425883214, 104.982193814993, 105.982188025268, 106.982005912713,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  107.981949640254, 108.981777381902, 109.981767708570, 110.981785341504,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  111.981686149156, 112.981635012054, 113.981557303839, 114.981412817204,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  115.981636136290, 116.981451847734, 117.981619278961, 118.981656205677,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  119.981462628717, 120.981648197593, 121.981672839888, 122.981536601882,</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  123.981424780957, 124.981245233627, 125.981297203177, 126.981469882453,</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  127.981420558510, 128.981470958251, 129.981803124940, 130.981454077005,</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  131.981307772677, 132.981136552712, 133.981060440468, 134.980764897921,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  135.980250123519, 136.979947889981, 137.979778713731, 138.979651075854,</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  139.979521006237, 140.979619490143, 141.979418214464, 142.979378742690,</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  143.979006714929, 144.978789085341, 145.978940618746, 146.978699584620,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  147.978509489139, 148.978375065557, 149.978382007245, 150.978320879037,</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  151.978431501891, 152.978357310224, 153.978079953131, 154.977867908315,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  155.977897282267, 156.977732141540, 157.977285841428, 158.977381755450,</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  159.977107808858, 160.976898092463, 161.976945065052, 162.976415653211,</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  163.976063254486, 164.976168718176, 165.976009634854, 166.975746910144,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  167.975365498336, 168.975302031315, 169.975145815395, 170.975048401084,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  171.974904933990, 172.974962856090, 173.974307743427, 174.974505556696,</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  175.974404122880, 176.974154794798, 177.973936891006, 178.973909768514,</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  179.973629325330, 180.973396428571, 181.973041798012, 182.972922327014,</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  183.972453839631, 184.972389341638, 185.971978290400, 186.971721489488,</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  187.971610992921, 188.971432541974, 189.970886522529, 190.970636748690,</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  191.970543849249, 192.970222044828, 193.969945219163, 194.969816174441,</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  195.969660267113, 196.969306217626, 197.969283141670, 198.968952697752,</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  199.968650726389, 200.968771498143, 201.969063388798, 202.968624157712,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  203.968385122471, 204.968459873029, 205.968253426841, 206.968128284823,</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  207.968002441937, 208.967981887571, 209.967853843352, 210.967653026858,</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  211.967601511385, 212.967479077297, 213.967293002672, 214.967265475369,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  215.967098197208, 216.966915139758, 217.966680984700, 218.966156974161,</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  219.965788928685, 220.965578199561, 221.965550145047, 222.965055562297,</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  223.965041228123, 224.965088576052, 225.964951649635, 226.964837079061,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  227.964949815142, 228.964753278386, 229.964358666956, 230.964158288467,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  231.964118659643, 232.964105599719, 233.964013041408, 234.963810178150,</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  235.963847138572, 236.963634735645, 237.963596910032, 238.963659218725,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  239.963498440155, 240.963445597658, 241.963141291971, 242.962684055746,</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  243.962664757583, 244.962762174588, 245.962862664373, 246.962595237647,</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  247.962493432533, 248.962292518484, 249.962622934132, 250.962187495200,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  251.962038306920, 252.961926735684, 253.961867248643, 254.961699581530,</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  255.961371028199</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;},</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="comment">// log K = 5</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;{</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  22.304000309384, 23.261989079230, 24.249656493833, 25.267226901899,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  26.314781734430, 27.392414068382, 28.500177845081, 29.638044883897,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  30.805888087516, 32.003714838418, 33.231360682863, 34.488477823483,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  35.774924122967, 37.090293268866, 38.434292452116, 39.806594197334,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  41.206691028159, 42.634002763091, 44.088065403269, 45.568286128520,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  47.074066947685, 48.604745105475, 50.159729872619, 51.738339282229,</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  53.339805618020, 54.963435280656, 56.608464119077, 58.274038434156,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  59.959403900602, 61.663926660982, 63.386737477574, 65.127093833107,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  66.884091606686, 68.656959698762, 70.445052178435, 72.247581860591,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  74.063607663774, 75.892531705810, 77.733879994604, 79.586788509372,</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  81.450593478752, 83.324645303244, 85.208482496209, 87.101116685537,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  89.002152917959, 90.911090999940, 92.827275073114, 94.750224301260,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  96.679773715696, 98.615214511699, 100.556211548644, 102.502148428334,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  104.452899214344, 106.407767504404, 108.366625832228, 110.329564692634,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  112.295481742874, 114.264715056639, 116.236769512562, 118.211214593179,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  120.188376370012, 122.167746134232, 124.148833002551, 126.131612799989,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  128.116072530208, 130.102155735854, 132.089449244974, 134.077816832908,</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  136.067404409248, 138.057703527432, 140.049350564796, 142.041756984355,</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  144.034780624078, 146.028584459531, 148.022894428003, 150.017952482368,</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  152.013358245376, 154.009157360372, 156.005076955043, 158.001501688538,</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  159.998043891849, 161.995141096448, 163.992507770330, 165.990019741406,</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  167.987379363144, 169.985323168231, 171.983371903769, 173.981134136378,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  175.979306888599, 177.977458741010, 179.975994045101, 181.974478508488,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  183.973329438036, 185.972061903815, 187.971014174496, 189.969582278901,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  191.968450510061, 193.967607022497, 195.966726931677, 197.965915341472,</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  199.964910588293, 201.964427852336, 203.964308576556, 205.963778587196,</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  207.963244179225, 209.962423156859, 211.961859295409, 213.961171237132,</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  215.960624048009, 217.959980906604, 219.959156277574, 221.958692298143,</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  223.958335010302, 225.958329061602, 227.957722024027, 229.957134954397,</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  231.956897929205, 233.956901572571, 235.956650770311, 237.956593290745,</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;  239.956700470895, 241.956192761863, 243.956003327600, 245.955794901574,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  247.955501305446, 249.954960233132, 251.954510187803, 253.954252376340,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  255.954011943050, 257.953388008439, 259.953139524693, 261.952918466928,</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  263.952432910213, 265.952485387126, 267.952763908808, 269.952510701682,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  271.952383356830, 273.951921008979, 275.951766755515, 277.951697578478,</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  279.951700548755, 281.951805228218, 283.951934023417, 285.952140722678,</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;  287.952063941231, 289.951717207670, 291.951294241955, 293.950937111819,</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  295.950900506385, 297.950320403388, 299.949546547128, 301.949474819234,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  303.949155377395, 305.948725010033, 307.948408553357, 309.948120512731,</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;  311.947897212148, 313.947738181662, 315.947255247579, 317.946631669691,</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;  319.946302193308, 321.945855881155, 323.945603079048, 325.944930145876,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;  327.945048538923, 329.944795565500, 331.944227346318, 333.943705422222,</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  335.943231918970, 337.942333069602, 339.942354997227, 341.941890952026,</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  343.941346276351, 345.940653575739, 347.940019001109, 349.940026817951,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  351.938944534275, 353.938172407151, 355.937584534690, 357.937041224148,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  359.936673631279, 361.936179855216, 363.936105840596, 365.935367434940,</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  367.935295315770, 369.934793960370, 371.934314961518, 373.933949277377,</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;  375.933420587284, 377.933148188654, 379.932379363314, 381.931900192237,</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  383.930951130857, 385.930667541762, 387.930025971711, 389.929529183966,</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  391.929116798157, 393.928361940635, 395.927673611921, 397.927111110912,</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;  399.926483516685, 401.925799510661, 403.924918492428, 405.924540208915,</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  407.924014467935, 409.923779779206, 411.922979548363, 413.922515268061,</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;  415.922148908645, 417.921643066153, 419.921126587639, 421.920766647684,</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  423.920642824255, 425.920411492484, 427.920603679205, 429.920445437023,</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;  431.920286509746, 433.919789058392, 435.919408587813, 437.918873200300,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  439.918417416574, 441.918192491069, 443.918376503567, 445.917692006023,</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  447.917132642691, 449.917217997363, 451.916924115487, 453.916662151474,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  455.916485288107, 457.915879851633, 459.915842501592, 461.915547354915,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  463.914995141359, 465.914585759187, 467.914144928428, 469.913956069337,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;  471.913046082896, 473.912468624617, 475.912322983182, 477.912118100240,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  479.911923664773, 481.911518944025, 483.911023761757, 485.910386539830,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  487.910092345284, 489.910153786770, 491.909575245360, 493.908973823502,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  495.908577061168, 497.908550221055, 499.908127020659, 501.907710605296,</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  503.907806972566, 505.907336571662, 507.907081330259, 509.906648846180,</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  511.906201574892</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;},</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="comment">// log K = 6</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;{</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  45.375999854524, 46.820948326168, 48.298703712049, 49.809402685314,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  51.353165756275, 52.929933710602, 54.539893242468, 56.183033892089,</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  57.859217068495, 59.568519998303, 61.310801009963, 63.085886926328,</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  64.893798324934, 66.734230191052, 68.607173306372, 70.512210309984,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  72.449265953981, 74.418007054647, 76.417910710559, 78.448929349152,</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  80.510585932256, 82.602514696500, 84.724061528721, 86.875166381330,</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  89.055217833675, 91.263852803721, 93.500342620773, 95.764451518395,</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  98.055566319691, 100.373234086043, 102.716794393386, 105.085599217566,</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  107.479363461004, 109.897282858060, 112.338907676111, 114.803401103124,</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  117.290259931022, 119.799265623507, 122.329323908482, 124.879681624600,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  127.450299022993, 130.040239267142, 132.648756733593, 135.275366525219,</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;  137.919720233989, 140.580778017562, 143.258128898839, 145.951552244700,</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;  148.660145472460, 151.383257444852, 154.120434694643, 156.871202914301,</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;  159.634634288797, 162.410377522877, 165.198249005575, 167.997420145534,</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;  170.807579918337, 173.628020587905, 176.458633641294, 179.298282098581,</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;  182.147449731726, 185.005094444186, 187.870899328937, 190.744709255561,</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;  193.625572419776, 196.513740460772, 199.408599560293, 202.309940032246,</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  205.217132295894, 208.129828601313, 211.047995735211, 213.970919426104,</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;  216.899109829571, 219.832024990852, 222.769136305806, 225.710258431247,</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;  228.655217514772, 231.603984417526, 234.555642012353, 237.510635882749,</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  240.468820458907, 243.429903849174, 246.393192036307, 249.359251612075,</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  252.327416912482, 255.297598046767, 258.269777722144, 261.244337060733,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;  264.219958654591, 267.197643910088, 270.177202282129, 273.157339433786,</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;  276.139287129066, 279.122276848731, 282.107226383752, 285.092136000673,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  288.078230550129, 291.065256815999, 294.053160971001, 297.042401030971,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  300.031784889467, 303.022502412860, 306.013581138287, 309.005124942334,</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  311.996910583050, 314.989635544162, 317.982189300799, 320.975762085573,</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  323.969719809182, 326.963672522149, 329.958419674913, 332.953046205989,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  335.948338966110, 338.943201657934, 341.938798787180, 344.935321901459,</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  347.931089897905, 350.927355153871, 353.923731760523, 356.920383399325,</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  359.916863372939, 362.914245241722, 365.911216314347, 368.908636150615,</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  371.905028432797, 374.901981729273, 377.899718967915, 380.897391911925,</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  383.894945428721, 386.892974193389, 389.890517424427, 392.889050804732,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;  395.886893560179, 398.884852345719, 401.883235933616, 404.881805247652,</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  407.880049402262, 410.878410789472, 413.876755787854, 416.875140105536,</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;  419.873758096660, 422.872739431833, 425.871627898739, 428.870663138631,</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  431.869475472357, 434.868378059774, 437.867537661532, 440.866274620049,</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;  443.865086570094, 446.864282236320, 449.863630871851, 452.862772062678,</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  455.861877807413, 458.860680461949, 461.859728874700, 464.858478829514,</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  467.857314559298, 470.856707830759, 473.855641079729, 476.854880576501,</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;  479.853812351976, 482.852666825246, 485.851471230749, 488.850997731659,</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;  491.850420535006, 494.849118717584, 497.848645341646, 500.848230362352,</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;  503.847546143645, 506.847285358235, 509.846275998715, 512.845599444922,</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  515.845441684852, 518.844522015985, 521.843923976006, 524.843281639782,</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  527.842399994830, 530.841152548296, 533.840788827465, 536.840058715879,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  539.839578267778, 542.839076801367, 545.838441853502, 548.837925005355,</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;  551.837456112430, 554.837041819817, 557.836916936797, 560.836116071833,</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;  563.834832988710, 566.834107840572, 569.832763471368, 572.831700689757,</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  575.832050680783, 578.831190216307, 581.831249402778, 584.830325442080,</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  587.828993643112, 590.827962761832, 593.827454067745, 596.825833598259,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  599.824193205007, 602.822806340644, 605.822276069352, 608.821423024191,</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  611.820006110523, 614.819016304854, 617.818220240160, 620.817311827644,</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  623.816286470744, 626.815211383752, 629.815077535810, 632.813925717940,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  635.813392704099, 638.812424935595, 641.811289306882, 644.809932622788,</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  647.808609610738, 650.807771758015, 653.806851303878, 656.805452367508,</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  659.804133900742, 662.803103749985, 665.801910649522, 668.800969589926,</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  671.798796938405, 674.798110719805, 677.797843657187, 680.797711918663,</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  683.796449689643, 686.794998006462, 689.794205385109, 692.792836542916,</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  695.792195299304, 698.790778974184, 701.790704644168, 704.790168225574,</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  707.789261680438, 710.788674453657, 713.787207421297, 716.786043303658,</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  719.784740017888, 722.783523691482, 725.782739693893, 728.781695938105,</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;  731.780295310459, 734.778719103047, 737.778056368816, 740.777014963309,</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  743.776470087777, 746.774710218241, 749.773897180146, 752.772555359445,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  755.771799417720, 758.770328749569, 761.768940347768, 764.768630836408,</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;  767.767399121425</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;},</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;<span class="comment">// log K = 7</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;{</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  91.554623, 93.970317, 96.431113, 98.937264, 101.488909, 104.086010, 106.728780, 109.417062,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;  112.150914, 114.930279, 117.755065, 120.625143, 123.540431, 126.500927, 129.506371, 132.556551,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;  135.651450, 138.790477, 141.973357, 145.200176, 148.470504, 151.783478, 155.139376, 158.537455,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  161.977357, 165.458477, 168.980630, 172.543258, 176.145951, 179.788203, 183.469266, 187.188166,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;  190.945533, 194.739618, 198.570460, 202.437447, 206.339379, 210.276276, 214.247092, 218.251243,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;  222.288169, 226.357728, 230.458810, 234.590263, 238.751826, 242.942859, 247.162518, 251.410098,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;  255.685517, 259.987202, 264.314569, 268.667458, 273.044873, 277.445418, 281.869296, 286.316796,</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  290.785471, 295.276055, 299.788143, 304.319743, 308.869691, 313.438842, 318.026761, 322.632499,</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;  327.254588, 331.892954, 336.547483, 341.217702, 345.901880, 350.601214, 355.313731, 360.038868,</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  364.777348, 369.526476, 374.288795, 379.061811, 383.846122, 388.640850, 393.446218, 398.260691,</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;  403.084626, 407.916053, 412.755659, 417.604951, 422.461448, 427.324128, 432.195028, 437.072269,</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;  441.956190, 446.846167, 451.741463, 456.641868, 461.549478, 466.461280, 471.377098, 476.297446,</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  481.222717, 486.151860, 491.085033, 496.022133, 500.962856, 505.906586, 510.853868, 515.802981,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;  520.755460, 525.711123, 530.668833, 535.629910, 540.592334, 545.557764, 550.525455, 555.494082,</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  560.463996, 565.436164, 570.410847, 575.385933, 580.361996, 585.339352, 590.318151, 595.300216,</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  600.281543, 605.264482, 610.250114, 615.236608, 620.222025, 625.208433, 630.195367, 635.183997,</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  640.172271, 645.162589, 650.153647, 655.144276, 660.133923, 665.123818, 670.115789, 675.109169,</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  680.103270, 685.097349, 690.091960, 695.086028, 700.080326, 705.075670, 710.069697, 715.065265,</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;  720.062426, 725.058529, 730.054916, 735.050560, 740.048508, 745.044790, 750.041067, 755.037833,</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;  760.035090, 765.033371, 770.029865, 775.025946, 780.022408, 785.021534, 790.018699, 795.016742,</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  800.013947, 805.012680, 810.009483, 815.007921, 820.008589, 825.007658, 830.007411, 835.006892,</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  840.006917, 845.006362, 850.004606, 855.003367, 860.001219, 864.999491, 869.999131, 874.998190,</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  879.998460, 884.997482, 889.995952, 894.995130, 899.994555, 904.993474, 909.991434, 914.990519,</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;  919.991564, 924.992234, 929.993901, 934.992310, 939.992013, 944.993341, 949.993576, 954.992981,</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  959.993548, 964.993781, 969.993129, 974.994050, 979.994706, 984.994372, 989.994395, 994.995339,</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;  999.995544, 1004.995498, 1009.996864, 1014.997829, 1019.996531, 1024.996724, 1029.997574, 1034.998591,</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;  1039.997807, 1044.998954, 1050.000113, 1055.000633, 1060.000845, 1065.000760, 1070.000907, 1075.001248,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;  1080.001187, 1084.999775, 1089.999105, 1094.999647, 1100.001983, 1105.003468, 1110.004542, 1115.005170,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;  1120.006517, 1125.006493, 1130.006837, 1135.008369, 1140.006966, 1145.009225, 1150.008497, 1155.009589,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;  1160.009558, 1165.011395, 1170.009739, 1175.011131, 1180.013303, 1185.012525, 1190.014190, 1195.016399,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;  1200.016087, 1205.016715, 1210.018008, 1215.018108, 1220.019677, 1225.020269, 1230.019468, 1235.020515,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  1240.021850, 1245.020961, 1250.019785, 1255.020253, 1260.020623, 1265.020156, 1270.020625, 1275.019028,</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;  1280.019972</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;},</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="comment">// log K = 8</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;{</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;  183.877784, 188.720097, 193.652407, 198.675131, 203.788397, 208.992238, 214.286620, 219.671580,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;  225.147277, 230.713559, 236.370208, 242.117078, 247.953569, 253.880078, 259.895869, 266.000405,</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;  272.193694, 278.474457, 284.843102, 291.298228, 297.839692, 304.466434, 311.177471, 317.972674,</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;  324.850719, 331.811076, 338.852902, 345.974709, 353.175880, 360.455237, 367.811613, 375.244484,</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;  382.752472, 390.334218, 397.988777, 405.714596, 413.510671, 421.376147, 429.308973, 437.308197,</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  445.372302, 453.500121, 461.690796, 469.942249, 478.253652, 486.623402, 495.049662, 503.532193,</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  512.068670, 520.658371, 529.299186, 537.990886, 546.732097, 555.520093, 564.355935, 573.235689,</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;  582.159345, 591.126063, 600.133321, 609.181348, 618.267848, 627.392384, 636.552822, 645.748152,</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;  654.977601, 664.239902, 673.534497, 682.859448, 692.213983, 701.598606, 711.009376, 720.446781,</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  729.910995, 739.397888, 748.908546, 758.443812, 768.000572, 777.577584, 787.174815, 796.791250,</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  806.427107, 816.079660, 825.748493, 835.435992, 845.136828, 854.854141, 864.583886, 874.328396,</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;  884.085720, 893.855568, 903.637568, 913.431080, 923.234553, 933.049830, 942.873895, 952.707793,</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;  962.551743, 972.402421, 982.263001, 992.131464, 1002.006941, 1011.888460, 1021.777462, 1031.671376,</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;  1041.569600, 1051.476632, 1061.386996, 1071.302834, 1081.224251, 1091.148847, 1101.080297, 1111.013589,</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;  1120.951962, 1130.893360, 1140.838011, 1150.786112, 1160.737100, 1170.689817, 1180.646908, 1190.604979,</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;  1200.565150, 1210.527894, 1220.492169, 1230.460128, 1240.429764, 1250.401749, 1260.373274, 1270.349608,</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;  1280.325544, 1290.302087, 1300.279074, 1310.257850, 1320.238948, 1330.221273, 1340.203554, 1350.186669,</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;  1360.171345, 1370.156233, 1380.142561, 1390.129535, 1400.119177, 1410.107938, 1420.097171, 1430.087586,</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;  1440.077831, 1450.067996, 1460.060299, 1470.050059, 1480.042995, 1490.035101, 1500.026878, 1510.021128,</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;  1520.014262, 1530.008487, 1540.002895, 1549.996342, 1559.991075, 1569.986665, 1579.981202, 1589.976021,</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;  1599.969512, 1609.964051, 1619.959210, 1629.957092, 1639.953516, 1649.948113, 1659.946715, 1669.945253,</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;  1679.941736, 1689.938651, 1699.937600, 1709.936396, 1719.933608, 1729.931040, 1739.930316, 1749.927141,</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;  1759.922600, 1769.920847, 1779.918614, 1789.915707, 1799.913000, 1809.910958, 1819.908532, 1829.906905,</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;  1839.903410, 1849.904217, 1859.901705, 1869.898815, 1879.898869, 1889.899032, 1899.899113, 1909.896164,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;  1919.893199, 1929.894515, 1939.894965, 1949.893184, 1959.892164, 1969.890794, 1979.889035, 1989.888005,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;  1999.888538, 2009.888252, 2019.888976, 2029.890242, 2039.890655, 2049.891065, 2059.891068, 2069.889204,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;  2079.891120, 2089.892462, 2099.892479, 2109.891814, 2119.893049, 2129.893705, 2139.893471, 2149.894162,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;  2159.894213, 2169.895041, 2179.895987, 2189.894721, 2199.894028, 2209.896005, 2219.898683, 2229.898673,</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;  2239.898012, 2249.898018, 2259.898215, 2269.899380, 2279.902590, 2289.903144, 2299.902047, 2309.904214,</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;  2319.903812, 2329.904180, 2339.902528, 2349.903057, 2359.903089, 2369.904512, 2379.902563, 2389.905522,</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;  2399.903653, 2409.902313, 2419.904452, 2429.905949, 2439.905059, 2449.904954, 2459.904977, 2469.905111,</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;  2479.904049, 2489.903762, 2499.902022, 2509.904352, 2519.903272, 2529.901643, 2539.900789, 2549.903045,</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;  2559.904334</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;},</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;<span class="comment">// log K = 9</span></div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;{</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;  368.528954, 378.224619, 388.100156, 398.155846, 408.391912, 418.808631, 429.406377, 440.185048,</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;  451.144613, 462.284693, 473.604932, 485.105306, 496.784844, 508.643147, 520.679581, 532.893098,</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;  545.282616, 557.848295, 570.587645, 583.500268, 596.584345, 609.838697, 623.261582, 636.851681,</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;  650.607666, 664.527320, 678.608336, 692.849674, 707.248088, 721.803089, 736.511331, 751.372034,</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;  766.381798, 781.538178, 796.839808, 812.283881, 827.867995, 843.588520, 859.444318, 875.432109,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;  891.550599, 907.795630, 924.165943, 940.657393, 957.268601, 973.995685, 990.837235, 1007.789667,</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;  1024.850025, 1042.016602, 1059.286426, 1076.658199, 1094.126523, 1111.689346, 1129.345589, 1147.092119,</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;  1164.926795, 1182.844471, 1200.846880, 1218.929006, 1237.088281, 1255.322930, 1273.630393, 1292.007269,</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;  1310.452948, 1328.963430, 1347.538768, 1366.176566, 1384.871299, 1403.626249, 1422.434094, 1441.295238,</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;  1460.208340, 1479.169853, 1498.179265, 1517.234855, 1536.335403, 1555.477305, 1574.659180, 1593.881592,</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;  1613.139378, 1632.433516, 1651.764587, 1671.127255, 1690.519577, 1709.942250, 1729.393153, 1748.871689,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;  1768.377142, 1787.907209, 1807.464755, 1827.043146, 1846.641976, 1866.263022, 1885.903553, 1905.564908,</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;  1925.240581, 1944.936723, 1964.648221, 1984.375489, 2004.117246, 2023.875053, 2043.644075, 2063.423514,</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;  2083.218689, 2103.026148, 2122.840475, 2142.669046, 2162.505619, 2182.351758, 2202.205963, 2222.068658,</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;  2241.939010, 2261.814547, 2281.701803, 2301.591894, 2321.490728, 2341.393208, 2361.298412, 2381.211528,</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;  2401.132345, 2421.057721, 2440.985510, 2460.916691, 2480.851468, 2500.792645, 2520.738446, 2540.683395,</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;  2560.634603, 2580.586307, 2600.540530, 2620.497170, 2640.458137, 2660.421783, 2680.386186, 2700.352664,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;  2720.321411, 2740.291944, 2760.264068, 2780.238910, 2800.212546, 2820.185829, 2840.163952, 2860.142145,</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;  2880.120568, 2900.102466, 2920.081981, 2940.062964, 2960.046262, 2980.029101, 3000.012591, 3019.998424,</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  3039.983637, 3059.969573, 3079.955927, 3099.942114, 3119.930348, 3139.919614, 3159.909130, 3179.899816,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;  3199.892231, 3219.885316, 3239.878917, 3259.871675, 3279.865195, 3299.856210, 3319.848871, 3339.840385,</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;  3359.834158, 3379.830660, 3399.826361, 3419.822855, 3439.814714, 3459.813765, 3479.808673, 3499.804339,</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;  3519.797785, 3539.791012, 3559.789885, 3579.785152, 3599.780237, 3619.775480, 3639.772724, 3659.768920,</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;  3679.765735, 3699.766361, 3719.765048, 3739.762845, 3759.761526, 3779.757598, 3799.755719, 3819.751149,</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;  3839.750182, 3859.749673, 3879.749344, 3899.749939, 3919.749060, 3939.748385, 3959.750520, 3979.750055,</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;  3999.750104, 4019.749963, 4039.748453, 4059.746737, 4079.744522, 4099.744430, 4119.741804, 4139.740704,</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;  4159.742056, 4179.740063, 4199.739155, 4219.741718, 4239.743433, 4259.743115, 4279.743265, 4299.745518,</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;  4319.746682, 4339.750491, 4359.748549, 4379.747226, 4399.750319, 4419.750379, 4439.752339, 4459.750561,</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;  4479.750612, 4499.747862, 4519.750693, 4539.747476, 4559.749051, 4579.750603, 4599.750089, 4619.754781,</div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;  4639.755536, 4659.758879, 4679.762145, 4699.762199, 4719.763886, 4739.765081, 4759.765681, 4779.765427,</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;  4799.767582, 4819.769915, 4839.770107, 4859.769398, 4879.768976, 4899.768288, 4919.768786, 4939.768607,</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;  4959.772822, 4979.772833, 4999.775808, 5019.773468, 5039.776181, 5059.770860, 5079.773006, 5099.773136,</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;  5119.772474</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;},</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="comment">// log K = 10</span></div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;{</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;  737.833738, 757.236338, 776.997875, 797.119465, 817.602058, 838.445349, 859.650320, 881.216437,</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;  903.143414, 925.430957, 948.079220, 971.086231, 994.451449, 1018.173846, 1042.251928, 1066.683804,</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;  1091.467648, 1116.601416, 1142.083017, 1167.909918, 1194.079097, 1220.588887, 1247.435099, 1274.614860,</div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;  1302.125360, 1329.962942, 1358.123177, 1386.601609, 1415.396299, 1444.501692, 1473.913256, 1503.628515,</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;  1533.642054, 1563.948888, 1594.544067, 1625.424305, 1656.582169, 1688.016543, 1719.718553, 1751.685990,</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;  1783.912130, 1816.393610, 1849.122123, 1882.095124, 1915.305647, 1948.748605, 1982.419843, 2016.313904,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;  2050.422277, 2084.742618, 2119.270601, 2153.998538, 2188.920843, 2224.034736, 2259.333960, 2294.812594,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;  2330.467059, 2366.291844, 2402.281356, 2438.428954, 2474.734330, 2511.187839, 2547.786319, 2584.527356,</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;  2621.406814, 2658.418551, 2695.554270, 2732.812564, 2770.190157, 2807.682744, 2845.287138, 2882.995251,</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;  2920.807982, 2958.719996, 2996.728771, 3034.826885, 3073.014082, 3111.287116, 3149.642093, 3188.073159,</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;  3226.577352, 3265.156836, 3303.803738, 3342.515111, 3381.291514, 3420.130671, 3459.024315, 3497.974631,</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;  3536.978221, 3576.034737, 3615.138610, 3654.285859, 3693.480455, 3732.715296, 3771.991792, 3811.305300,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;  3850.654870, 3890.041152, 3929.457167, 3968.905021, 4008.381466, 4047.886976, 4087.419414, 4126.978997,</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;  4166.562624, 4206.166726, 4245.793284, 4285.445151, 4325.113012, 4364.802795, 4404.506274, 4444.228475,</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;  4483.965191, 4523.719569, 4563.487708, 4603.267460, 4643.060387, 4682.865430, 4722.680718, 4762.503248,</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;  4802.341326, 4842.185529, 4882.039088, 4921.900432, 4961.772625, 5001.649566, 5041.534380, 5081.425809,</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;  5121.323013, 5161.224908, 5201.130560, 5241.044625, 5280.962456, 5320.882373, 5360.810007, 5400.740058,</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;  5440.673843, 5480.606748, 5520.547394, 5560.493520, 5600.438100, 5640.383853, 5680.335386, 5720.292400,</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;  5760.250576, 5800.212705, 5840.172984, 5880.134991, 5920.097923, 5960.060294, 6000.031177, 6040.003398,</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;  6079.981696, 6119.954349, 6159.929074, 6199.908569, 6239.886163, 6279.863659, 6319.838261, 6359.815405,</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;  6399.795170, 6439.777225, 6479.755885, 6519.738857, 6559.723169, 6599.708549, 6639.695186, 6679.679788,</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;  6719.663289, 6759.651052, 6799.634129, 6839.624763, 6879.615013, 6919.605584, 6959.591310, 6999.586006,</div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;  7039.577399, 7079.565236, 7119.557222, 7159.548481, 7199.533025, 7239.519648, 7279.511781, 7319.507639,</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;  7359.506105, 7399.497488, 7439.494944, 7479.491545, 7519.488415, 7559.480534, 7599.475646, 7639.470315,</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  7679.468730, 7719.460928, 7759.455834, 7799.455686, 7839.451758, 7879.446841, 7919.443884, 7959.444138,</div>
+<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;  7999.443141, 8039.446339, 8079.445285, 8119.444120, 8159.443157, 8199.446480, 8239.438893, 8279.437597,</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;  8319.439714, 8359.441566, 8399.440754, 8439.439156, 8479.440112, 8519.442365, 8559.444795, 8599.444497,</div>
+<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;  8639.446714, 8679.449177, 8719.447620, 8759.443423, 8799.445995, 8839.446170, 8879.449622, 8919.450486,</div>
+<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;  8959.450372, 8999.449731, 9039.448449, 9079.452579, 9119.451596, 9159.454020, 9199.456651, 9239.460902,</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;  9279.460419, 9319.461322, 9359.464611, 9399.467790, 9439.471448, 9479.468426, 9519.462982, 9559.464881,</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;  9599.462983, 9639.461706, 9679.457284, 9719.457023, 9759.455648, 9799.458786, 9839.456980, 9879.457411,</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;  9919.454971, 9959.451735, 9999.451916, 10039.443939, 10079.435325, 10119.432142, 10159.431313, 10199.431306,</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;  10239.429671</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;},</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;<span class="comment">// log K = 11</span></div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;{</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;  1476.444530, 1515.260638, 1554.794859, 1595.048761, 1636.023652, 1677.720065, 1720.138513, 1763.279158,</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;  1807.141823, 1851.724811, 1897.027530, 1943.048153, 1989.784818, 2037.234835, 2085.395149, 2134.263580,</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;  2183.834818, 2234.105548, 2285.071077, 2336.726064, 2389.065940, 2442.084276, 2495.776521, 2550.134177,</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;  2605.153465, 2660.825522, 2717.142881, 2774.098631, 2831.683790, 2889.889911, 2948.711233, 3008.137464,</div>
+<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;  3068.158605, 3128.766926, 3189.951984, 3251.704129, 3314.013826, 3376.873018, 3440.270569, 3504.194851,</div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;  3568.636295, 3633.586039, 3699.031630, 3764.962925, 3831.371336, 3898.245744, 3965.574384, 4033.345701,</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;  4101.550888, 4170.180686, 4239.221393, 4308.664143, 4378.497100, 4448.712735, 4519.296212, 4590.243535,</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;  4661.538747, 4733.174738, 4805.142002, 4877.427081, 4950.019513, 5022.915001, 5096.098561, 5169.567185,</div>
+<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;  5243.312012, 5317.314578, 5391.572253, 5466.077564, 5540.821377, 5615.792025, 5690.985894, 5766.392174,</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;  5842.007403, 5917.816734, 5993.815607, 6069.999957, 6146.362662, 6222.895187, 6299.592875, 6376.440778,</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;  6453.443173, 6530.588182, 6607.874560, 6685.288536, 6762.829840, 6840.490840, 6918.272948, 6996.164556,</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;  7074.161694, 7152.259404, 7230.451098, 7308.737035, 7387.113244, 7465.575350, 7544.120230, 7622.733447,</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;  7701.427750, 7780.188044, 7859.016102, 7937.904850, 8016.853624, 8095.860379, 8174.919884, 8254.034842,</div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;  8333.197794, 8412.405307, 8491.657429, 8570.946804, 8650.278289, 8729.648657, 8809.056098, 8888.496764,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;  8967.966663, 9047.466051, 9126.993636, 9206.547289, 9286.127523, 9365.733732, 9445.361201, 9525.008810,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;  9604.680107, 9684.363532, 9764.066435, 9843.787987, 9923.523567, 10003.272886, 10083.037524, 10162.811803,</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;  10242.597755, 10322.402415, 10402.216522, 10482.042584, 10561.877077, 10641.722187, 10721.570740, 10801.435848,</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;  10881.301249, 10961.178474, 11041.059765, 11120.951444, 11200.845806, 11280.746075, 11360.652145, 11440.567398,</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;  11520.476709, 11600.395391, 11680.316855, 11760.241900, 11840.170134, 11920.103548, 12000.038206, 12079.975425,</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;  12159.912459, 12239.857191, 12319.802744, 12399.754385, 12479.707055, 12559.658981, 12639.614004, 12719.566502,</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;  12799.526877, 12879.488833, 12959.451231, 13039.416480, 13119.388158, 13199.360789, 13279.334923, 13359.298927,</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;  13439.261641, 13519.235871, 13599.204919, 13679.181082, 13759.157391, 13839.137425, 13919.112545, 13999.096522,</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;  14079.082789, 14159.060487, 14239.040581, 14319.025236, 14399.006995, 14478.994078, 14558.980576, 14638.962774,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;  14718.952192, 14798.938522, 14878.931501, 14958.919062, 15038.907891, 15118.897247, 15198.889129, 15278.881057,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;  15358.873272, 15438.867627, 15518.861931, 15598.858206, 15678.850014, 15758.849382, 15838.847872, 15918.837658,</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;  15998.837920, 16078.831305, 16158.827345, 16238.815546, 16318.817302, 16398.814389, 16478.815820, 16558.811634,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;  16638.808126, 16718.807170, 16798.805652, 16878.813389, 16958.806543, 17038.807885, 17118.813146, 17198.813752,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;  17278.817574, 17358.820511, 17438.819443, 17518.814262, 17598.815511, 17678.814160, 17758.816726, 17838.817584,</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;  17918.814197, 17998.821276, 18078.822342, 18158.828474, 18238.822064, 18318.826732, 18398.827758, 18478.827319,</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;  18558.834153, 18638.835651, 18718.839105, 18798.840903, 18878.836463, 18958.836015, 19038.836351, 19118.832583,</div>
+<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;  19198.829856, 19278.822953, 19358.824866, 19438.823697, 19518.826538, 19598.826954, 19678.831393, 19758.822279,</div>
+<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;  19838.818757, 19918.808247, 19998.804516, 20078.809201, 20158.808900, 20238.806398, 20318.798516, 20398.802224,</div>
+<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;  20478.803179</div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;},</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;<span class="comment">// log K = 12</span></div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;{</div>
+<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;  2953.666722, 3031.310137, 3110.389526, 3190.908699, 3272.865410, 3356.267166, 3441.114376, 3527.404284,</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;  3615.136846, 3704.310976, 3794.924283, 3886.973846, 3980.451903, 4075.355844, 4171.681168, 4269.423939,</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;  4368.569738, 4469.111760, 4571.043603, 4674.356370, 4779.038117, 4885.076002, 4992.460659, 5101.176875,</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;  5211.214098, 5322.553631, 5435.184633, 5549.088369, 5664.258175, 5780.673987, 5898.312682, 6017.158593,</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;  6137.195815, 6258.397951, 6380.761679, 6504.261630, 6628.870413, 6754.585867, 6881.374325, 7009.206926,</div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;  7138.080376, 7267.979175, 7398.866805, 7530.722851, 7663.531580, 7797.269872, 7931.907340, 8067.451667,</div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;  8203.855692, 8341.091306, 8479.155031, 8618.026003, 8757.682272, 8898.095612, 9039.253787, 9181.124777,</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;  9323.694329, 9466.944202, 9610.861899, 9755.403639, 9900.578346, 10046.356477, 10192.718770, 10339.635914,</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;  10487.081762, 10635.066232, 10783.560130, 10932.549371, 11082.024055, 11231.949071, 11382.332885, 11533.122831,</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;  11684.327555, 11835.935533, 11987.926999, 12140.281619, 12292.994375, 12446.046449, 12599.411083, 12753.088314,</div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;  12907.079745, 13061.355923, 13215.895621, 13370.722085, 13525.795736, 13681.095971, 13836.645692, 13992.405906,</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;  14148.380716, 14304.566860, 14460.959382, 14617.539754, 14774.296125, 14931.214508, 15088.271748, 15245.493870,</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;  15402.867309, 15560.380994, 15718.035423, 15875.801492, 16033.687891, 16191.701231, 16349.808763, 16508.026001,</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;  16666.336068, 16824.745049, 16983.259302, 17141.848044, 17300.504517, 17459.240272, 17618.060296, 17776.914688,</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;  17935.848010, 18094.852645, 18253.914288, 18413.023567, 18572.168358, 18731.376016, 18890.631505, 19049.948196,</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;  19209.279260, 19368.638871, 19528.043860, 19687.498901, 19846.941765, 20006.443084, 20165.973535, 20325.525957,</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;  20485.109520, 20644.729917, 20804.363876, 20964.021778, 21123.698687, 21283.379344, 21443.080536, 21602.821439,</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;  21762.568135, 21922.305338, 22082.065878, 22241.856145, 22401.629436, 22561.435266, 22721.262644, 22881.080478,</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;  23040.916036, 23200.734053, 23360.583255, 23520.433188, 23680.275065, 23840.132678, 24000.012847, 24159.886135,</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;  24319.788338, 24479.654024, 24639.540316, 24799.466449, 24959.369335, 25119.276072, 25279.186502, 25439.091982,</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;  25599.020083, 25758.930671, 25918.847522, 26078.773060, 26238.704021, 26398.647566, 26558.603366, 26718.539855,</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;  26878.464425, 27038.402892, 27198.344989, 27358.270906, 27518.203448, 27678.169545, 27838.133625, 27998.111630,</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;  28158.064264, 28318.032491, 28477.994153, 28637.950838, 28797.910362, 28957.884994, 29117.861910, 29277.814384,</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;  29437.774223, 29597.762256, 29757.729819, 29917.688497, 30077.675371, 30237.667941, 30397.639431, 30557.644527,</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  30717.622991, 30877.622641, 31037.598941, 31197.601527, 31357.599118, 31517.585221, 31677.569983, 31837.556138,</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;  31997.527880, 32157.500622, 32317.491709, 32477.504936, 32637.501123, 32797.516330, 32957.547336, 33117.541765,</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;  33277.561207, 33437.554332, 33597.564988, 33757.565321, 33917.561180, 34077.580598, 34237.597132, 34397.598246,</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;  34557.617536, 34717.623318, 34877.649722, 35037.645029, 35197.681143, 35357.700478, 35517.701804, 35677.734383,</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;  35837.736494, 35997.737103, 36157.732045, 36317.741539, 36477.735602, 36637.761491, 36797.742508, 36957.734137,</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;  37117.742952, 37277.789218, 37437.793798, 37597.779066, 37757.796449, 37917.794116, 38077.804399, 38237.797507,</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;  38397.788049, 38557.768583, 38717.768279, 38877.752553, 39037.747349, 39197.737646, 39357.774395, 39517.752643,</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;  39677.753347, 39837.740038, 39997.719486, 40157.709578, 40317.708657, 40477.719261, 40637.726978, 40797.711139,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;  40957.707784</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;},</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;<span class="comment">// log K = 13</span></div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;{</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;  5908.111420, 6063.410343, 6221.578483, 6382.623803, 6546.553966, 6713.369171, 6883.070010, 7055.656719,</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;  7231.129758, 7409.486672, 7590.720089, 7774.822139, 7961.786850, 8151.601206, 8344.261218, 8539.750086,</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;  8738.048786, 8939.141702, 9143.011205, 9349.645220, 9559.003557, 9771.078383, 9985.846791, 10203.277103,</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;  10423.349219, 10646.031323, 10871.293001, 11099.111735, 11329.434411, 11562.255804, 11797.522109, 12035.204106,</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;  12275.263649, 12517.670237, 12762.388671, 13009.375491, 13258.587519, 13510.006825, 13763.564399, 14019.227089,</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;  14276.975295, 14536.745792, 14798.511796, 15062.215057, 15327.806593, 15595.257499, 15864.529774, 16135.586770,</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;  16408.362074, 16682.849583, 16958.977019, 17236.708221, 17515.990972, 17796.798914, 18079.096585, 18362.834517,</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;  18647.959152, 18934.452073, 19222.251998, 19511.366053, 19801.717928, 20093.269020, 20385.960319, 20679.772736,</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;  20974.698498, 21270.684814, 21567.671010, 21865.649193, 22164.581341, 22464.423293, 22765.172894, 23066.785452,</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;  23369.201089, 23672.387494, 23976.354000, 24281.072155, 24586.465328, 24892.557323, 25199.303712, 25506.654130,</div>
+<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;  25814.626835, 26123.148009, 26432.247046, 26741.889610, 27052.042135, 27362.685181, 27673.761784, 27985.292246,</div>
+<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;  28297.219809, 28609.572368, 28922.317633, 29235.448741, 29548.944253, 29862.766175, 30176.910610, 30491.363107,</div>
+<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;  30806.103787, 31121.126024, 31436.412153, 31751.975134, 32067.737444, 32383.768560, 32700.017044, 33016.458300,</div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;  33333.101934, 33649.904492, 33966.923435, 34284.105041, 34601.429152, 34918.876076, 35236.481998, 35554.235511,</div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;  35872.093847, 36190.101572, 36508.190892, 36826.420800, 37144.739624, 37463.138566, 37781.598984, 38100.191087,</div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;  38418.846511, 38737.587005, 39056.391321, 39375.255819, 39694.182864, 40013.173503, 40332.221146, 40651.311460,</div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;  40970.465534, 41289.697002, 41608.913381, 41928.242461, 42247.585089, 42566.988678, 42886.409594, 43205.849396,</div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;  43525.322840, 43844.784209, 44164.327769, 44483.869861, 44803.383648, 45122.975593, 45442.593765, 45762.258110,</div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;  46081.937012, 46401.605265, 46721.295022, 47041.004034, 47360.695978, 47680.435451, 48000.192231, 48319.953839,</div>
+<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;  48639.726508, 48959.506239, 49279.318744, 49599.117846, 49918.951926, 50238.772730, 50558.620076, 50878.455501,</div>
+<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;  51198.285377, 51518.135316, 51837.976134, 52157.809260, 52477.635805, 52797.492063, 53117.368983, 53437.262930,</div>
+<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;  53757.142921, 54077.026859, 54396.907345, 54716.835955, 55036.713062, 55356.640827, 55676.537369, 55996.488865,</div>
+<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;  56316.420754, 56636.355217, 56956.329593, 57276.245282, 57596.202473, 57916.159021, 58236.077854, 58556.010303,</div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;  58875.938110, 59195.924442, 59515.871947, 59835.838035, 60155.809948, 60475.808167, 60795.765545, 61115.766398,</div>
+<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;  61435.725825, 61755.677959, 62075.688445, 62395.647263, 62715.609853, 63035.591787, 63355.588060, 63675.579841,</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;  63995.560980, 64315.552298, 64635.582956, 64955.538779, 65275.512154, 65595.490993, 65915.477332, 66235.470693,</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  66555.483426, 66875.455452, 67195.455039, 67515.435090, 67835.418300, 68155.401870, 68475.404599, 68795.452423,</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;  69115.474466, 69435.450344, 69755.439668, 70075.479966, 70395.468204, 70715.475957, 71035.472807, 71355.513734,</div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;  71675.486047, 71995.450475, 72315.443410, 72635.425138, 72955.481520, 73275.482426, 73595.476688, 73915.469540,</div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;  74235.426693, 74555.381683, 74875.368981, 75195.429157, 75515.480428, 75835.517265, 76155.557945, 76475.556134,</div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;  76795.579451, 77115.605924, 77435.604178, 77755.572770, 78075.576305, 78395.562526, 78715.547599, 79035.551674,</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;  79355.540615, 79675.575726, 79995.547586, 80315.544278, 80635.546227, 80955.555617, 81275.540591, 81595.549538,</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;  81915.550079</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;},</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;<span class="comment">// log K = 14</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;{</div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;  11817.000969, 12127.609164, 12443.958867, 12766.059919, 13093.926347, 13427.563687, 13766.972021, 14112.158775,</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;  14463.118632, 14819.833221, 15182.310838, 15550.514164, 15924.452624, 16304.097682, 16689.414687, 17080.390156,</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;  17476.985675, 17879.171048, 18286.913146, 18700.171223, 19118.909859, 19543.074108, 19972.606221, 20407.466793,</div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;  20847.600290, 21292.965548, 21743.489087, 22199.109276, 22659.760749, 23125.379711, 23595.914325, 24071.277989,</div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;  24551.407611, 25036.233071, 25525.671155, 26019.641791, 26518.074136, 27020.885189, 27528.004081, 28039.347478,</div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;  28554.818908, 29074.343878, 29597.869471, 30125.254970, 30656.449891, 31191.351228, 31729.908970, 32272.003587,</div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;  32817.586623, 33366.531359, 33918.769390, 34474.232727, 35032.798601, 35594.423192, 36159.024745, 36726.469786,</div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;  37296.712851, 37869.686035, 38445.278953, 39023.442285, 39604.084062, 40187.147209, 40772.503600, 41360.148758,</div>
+<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;  41949.978377, 42541.929077, 43135.892496, 43731.836459, 44329.664552, 44929.334224, 45530.772542, 46133.919152,</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;  46738.746702, 47345.120215, 47953.051656, 48562.469011, 49173.281212, 49785.453501, 50398.908717, 51013.645932,</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;  51629.563526, 52246.635759, 52864.820434, 53484.057447, 54104.303719, 54725.504675, 55347.680019, 55970.744363,</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;  56594.688890, 57219.458967, 57844.949821, 58471.197998, 59098.180259, 59725.774793, 60354.058215, 60982.962558,</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;  61612.427469, 62242.448368, 62873.013426, 63504.106743, 64135.672742, 64767.665213, 65400.082326, 66032.949331,</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;  66666.219558, 67299.817447, 67933.801373, 68568.092593, 69202.717636, 69837.643507, 70472.852133, 71108.305774,</div>
+<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;  71744.023189, 72380.016332, 73016.168118, 73652.560876, 74289.210741, 74926.041959, 75563.048434, 76200.207724,</div>
+<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;  76837.505542, 77474.999283, 78112.608284, 78750.375633, 79388.254423, 80026.267074, 80664.419197, 81302.602941,</div>
+<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;  81940.909776, 82579.321050, 83217.801329, 83856.420605, 84495.098999, 85133.832545, 85772.588001, 86411.448347,</div>
+<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;  87050.399262, 87689.358100, 88328.463714, 88967.516990, 89606.618839, 90245.788934, 90884.986443, 91524.243962,</div>
+<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;  92163.523370, 92802.835394, 93442.198790, 94081.633840, 94721.043838, 95360.482304, 96000.002974, 96639.518339,</div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;  97279.069377, 97918.584802, 98558.189888, 99197.773242, 99837.390001, 100476.994827, 101116.655652, 101756.293703,</div>
+<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;  102395.977437, 103035.662337, 103675.360919, 104315.063845, 104954.783621, 105594.504004, 106234.229823, 106874.056079,</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;  107513.846129, 108153.562857, 108793.393622, 109433.202056, 110072.966808, 110712.777026, 111352.577741, 111992.441538,</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;  112632.256702, 113272.083743, 113911.943484, 114551.818432, 115191.687411, 115831.584194, 116471.522453, 117111.338979,</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;  117751.192777, 118391.070556, 119030.991702, 119670.888488, 120310.801509, 120950.761000, 121590.691826, 122230.618394,</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;  122870.618097, 123510.616056, 124150.552363, 124790.488946, 125430.445483, 126070.428297, 126710.409643, 127350.398562,</div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;  127990.397846, 128630.413222, 129270.354937, 129910.365912, 130550.332174, 131190.259646, 131830.280970, 132470.304278,</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;  133110.295205, 133750.312426, 134390.364847, 135030.321000, 135670.319926, 136310.335570, 136950.324790, 137590.338289,</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;  138230.368657, 138870.374084, 139510.447896, 140150.468353, 140790.441338, 141430.438424, 142070.440787, 142710.431348,</div>
+<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;  143350.433770, 143990.493350, 144630.548409, 145270.549935, 145910.530486, 146550.488808, 147190.510290, 147830.509426,</div>
+<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;  148470.575641, 149110.541845, 149750.592427, 150390.634921, 151030.706500, 151670.646574, 152310.624482, 152950.686127,</div>
+<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;  153590.659153, 154230.646236, 154870.720079, 155510.614028, 156150.596142, 156790.659641, 157430.633386, 158070.649047,</div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;  158710.591350, 159350.585980, 159990.557711, 160630.530183, 161270.499427, 161910.521323, 162550.516603, 163190.482792,</div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;  163830.422631</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;},</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;<span class="comment">// log K = 15</span></div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;{</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;  23634.780143, 24256.008404, 24888.717596, 25532.934303, 26188.680791, 26855.965949, 27534.798395, 28225.179199,</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;  28927.099457, 29640.545847, 30365.501013, 31101.936533, 31849.825685, 32609.111850, 33379.755958, 34161.706474,</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;  34954.912131, 35759.291030, 36574.778310, 37401.280667, 38238.742234, 39087.060449, 39946.133936, 40815.861824,</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;  41696.151280, 42586.877221, 43487.927203, 44399.169293, 45320.460825, 46251.693279, 47192.741847, 48143.464216,</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;  49103.716679, 50073.349113, 51052.208336, 52040.138165, 53036.993192, 54042.604241, 55056.838449, 56079.501709,</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;  57110.434199, 58149.484623, 59196.455710, 60251.226284, 61313.593108, 62383.385277, 63460.484960, 64544.666337,</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;  65635.763495, 66733.629361, 67838.096489, 68948.987037, 70066.117363, 71189.338133, 72318.464573, 73453.423815,</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;  74593.923438, 75739.864335, 76891.058098, 78047.391508, 79208.654009, 80374.753680, 81545.514022, 82720.817799,</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;  83900.405263, 85084.273208, 86272.263471, 87464.134340, 88659.829437, 89859.204804, 91062.115479, 92268.425863,</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;  93478.041907, 94690.804589, 95906.647693, 97125.398400, 98347.018145, 99571.305992, 100798.274503, 102027.737913,</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;  103259.574749, 104493.727918, 105730.035415, 106968.465700, 108208.988306, 109451.445144, 110695.748927, 111941.827269,</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;  113189.666448, 114439.093665, 115690.116530, 116942.608958, 118196.501294, 119451.722652, 120708.276299, 121966.046247,</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;  123225.027480, 124485.082349, 125746.201609, 127008.357433, 128271.416054, 129535.417336, 130800.297278, 132066.008820,</div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;  133332.483576, 134599.733640, 135867.681429, 137136.303792, 138405.538969, 139675.413251, 140945.839375, 142216.787412,</div>
+<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;  143488.232199, 144760.234976, 146032.650196, 147305.459198, 148578.703708, 149852.356585, 151126.347770, 152400.641475,</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;  153675.275168, 154950.179904, 156225.390849, 157500.864126, 158776.585926, 160052.504602, 161328.716398, 162605.171897,</div>
+<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;  163881.825931, 165158.677102, 166435.646121, 167712.814846, 168990.136047, 170267.619890, 171545.238277, 172823.011460,</div>
+<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;  174100.890250, 175378.821293, 176656.920467, 177935.093547, 179213.318173, 180491.692642, 181770.130424, 183048.727206,</div>
+<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  184327.217835, 185605.921891, 186884.657773, 188163.418059, 189442.221838, 190721.122201, 192000.068271, 193279.087882,</div>
+<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;  194558.139554, 195837.195523, 197116.400538, 198395.612565, 199674.831001, 200954.101970, 202233.365695, 203512.639968,</div>
+<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;  204792.003319, 206071.379608, 207350.730914, 208630.080321, 209909.544216, 211189.014497, 212468.508049, 213748.055445,</div>
+<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;  215027.584964, 216307.216078, 217586.896296, 218866.477232, 220146.109506, 221425.767458, 222705.465633, 223985.129542,</div>
+<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;  225264.797531, 226544.544335, 227824.304232, 229104.031191, 230383.739676, 231663.424684, 232943.198829, 234222.906969,</div>
+<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;  235502.669185, 236782.475696, 238062.262723, 239342.090234, 240622.002668, 241901.911022, 243181.742902, 244461.690551,</div>
+<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;  245741.531359, 247021.432644, 248301.277604, 249581.168404, 250861.094078, 252141.038818, 253421.065594, 254701.020169,</div>
+<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;  255980.887518, 257260.848328, 258540.873565, 259820.905666, 261100.908594, 262380.854763, 263660.862699, 264940.834842,</div>
+<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;  266220.775656, 267500.745402, 268780.761926, 270060.823540, 271340.798715, 272620.823081, 273900.881190, 275180.928531,</div>
+<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;  276460.914606, 277740.919081, 279020.967358, 280301.002010, 281581.054314, 282861.097638, 284141.109728, 285421.181335,</div>
+<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;  286701.182750, 287981.231437, 289261.342952, 290541.328315, 291821.320901, 293101.395969, 294381.402286, 295661.374812,</div>
+<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;  296941.357112, 298221.462446, 299501.443884, 300781.429735, 302061.512800, 303341.459364, 304621.530042, 305901.507763,</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;  307181.541613, 308461.506346, 309741.474814, 311021.458944, 312301.373851, 313581.258984, 314861.222655, 316141.192042,</div>
+<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;  317421.179698, 318701.162346, 319981.143104, 321261.185706, 322541.120379, 323821.065555, 325100.961639, 326380.920540,</div>
+<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;  327660.786948</div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;},</div>
+<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;<span class="comment">// log K = 16</span></div>
+<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;{</div>
+<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;  47270.338530, 48512.804588, 49778.235006, 51066.679846, 52378.178287, 53712.756179, 55070.430016, 56451.198432,</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;  57855.044557, 59281.941569, 60731.855114, 62204.727445, 63700.498656, 65219.087806, 66760.381754, 68324.278827,</div>
+<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;  69910.681844, 71519.442760, 73150.426782, 74803.469853, 76478.400456, 78175.038414, 79893.184924, 81632.639705,</div>
+<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;  83393.214587, 85174.662642, 86976.739912, 88799.210643, 90641.829434, 92504.355605, 94386.478165, 96287.925119,</div>
+<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;  98208.422967, 100147.694840, 102105.387259, 104081.226364, 106074.916897, 108086.136683, 110114.560800, 112159.857579,</div>
+<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;  114221.724675, 116299.785348, 118393.731853, 120503.258946, 122627.958417, 124767.540962, 126921.668848, 129090.003274,</div>
+<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;  131272.204811, 133467.918004, 135676.870426, 137898.595565, 140132.829694, 142379.269230, 144637.536478, 146907.321805,</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;  149188.299797, 151480.151490, 153782.571459, 156095.292246, 158417.834407, 160749.983694, 163091.465145, 165441.984077,</div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;  167801.236994, 170168.903670, 172544.767987, 174928.494171, 177319.918928, 179718.624717, 182124.426670, 184537.056818,</div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;  186956.260737, 189381.869001, 191813.551321, 194251.107949, 196694.280093, 199142.910671, 201596.663557, 204055.453662,</div>
+<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;  206519.090402, 208987.322132, 211460.079506, 213936.962995, 216417.945039, 218902.907481, 221391.594168, 223883.857806,</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;  226379.519239, 228878.478995, 231380.515508, 233885.422831, 236393.251620, 238903.734661, 241416.885791, 243932.462444,</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;  246450.361381, 248970.497360, 251492.768859, 254017.059221, 256543.244066, 259071.366198, 261601.098326, 264132.472390,</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;  266665.477130, 269200.003838, 271735.898262, 274273.128446, 276811.699617, 279351.334667, 281892.176977, 284434.126935,</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;  286977.141855, 289520.993664, 292065.816286, 294611.452586, 297157.986206, 299705.252956, 302253.226506, 304801.859484,</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;  307351.170990, 309901.148395, 312451.594894, 315002.530644, 317553.961670, 320105.951895, 322658.553440, 325211.299379,</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;  327764.626147, 330318.311300, 332872.331048, 335426.696106, 337981.358498, 340536.275072, 343091.446562, 345646.972942,</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;  348202.757347, 350758.693296, 353314.808579, 355871.203754, 358427.702337, 360984.491079, 363541.449032, 366098.493281,</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;  368655.687887, 371213.030472, 373770.561193, 376328.233445, 378886.001706, 381443.937538, 384001.856504, 386559.857503,</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;  389117.926075, 391676.219835, 394234.530250, 396792.812601, 399351.291660, 401909.794770, 404468.330377, 407026.964781,</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;  409585.614496, 412144.407471, 414703.175858, 417261.980659, 419820.958264, 422379.863083, 424938.751186, 427497.927620,</div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;  430056.993719, 432616.066348, 435175.266190, 437734.382772, 440293.531277, 442852.711332, 445412.016423, 447971.502143,</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;  450530.798765, 453090.167199, 455649.502729, 458208.951251, 460768.459694, 463328.053373, 465887.570627, 468447.239271,</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;  471006.792818, 473566.544068, 476126.194227, 478685.887605, 481245.577573, 483805.348711, 486365.028302, 488924.844568,</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;  491484.612666, 494044.321666, 496604.011864, 499163.799789, 501723.629793, 504283.493711, 506843.290195, 509403.157856,</div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;  511962.990320, 514522.941350, 517082.791953, 519642.848656, 522202.833761, 524762.686522, 527322.632758, 529882.529037,</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;  532442.420851, 535002.422317, 537562.386309, 540122.357425, 542682.434171, 545242.468829, 547802.466694, 550362.492718,</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;  552922.461624, 555482.539495, 558042.531431, 560602.467437, 563162.648952, 565722.750610, 568282.702877, 570842.810092,</div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;  573402.917604, 575962.999235, 578523.081937, 581083.162584, 583643.265455, 586203.287883, 588763.260931, 591323.292027,</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;  593883.252456, 596443.273935, 599003.353442, 601563.492606, 604123.421135, 606683.438234, 609243.605174, 611803.638038,</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;  614363.628593, 616923.690580, 619483.675256, 622043.744171, 624603.673246, 627163.577236, 629723.677960, 632283.670157,</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;  634843.692958, 637403.576097, 639963.511752, 642523.482942, 645083.419327, 647643.330711, 650203.272467, 652763.290376,</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;  655323.267522</div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;},</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;<span class="comment">// log K = 17</span></div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;{</div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  94541.455324, 97026.403245, 99557.280165, 102134.178452, 104757.187033, 107426.362674, 110141.726029, 112903.278005,</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;  115710.975458, 118564.785344, 121464.629896, 124410.377345, 127401.910279, 130439.087070, 133521.683723, 136649.499031,</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;  139822.321627, 143039.848320, 146301.785984, 149607.844773, 152957.695333, 156350.945326, 159787.233040, 163266.157476,</div>
+<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;  166787.301371, 170350.201319, 173954.353438, 177599.302692, 181284.526367, 185009.507089, 188773.757457, 192576.638207,</div>
+<div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;  196417.619925, 200296.089540, 204211.494530, 208163.221220, 212150.613086, 216173.056150, 220229.879308, 224320.462264,</div>
+<div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;  228444.146459, 232600.284426, 236788.187347, 241007.264352, 245256.725247, 249535.938618, 253844.217048, 258180.876528,</div>
+<div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;  262545.282090, 266936.686787, 271354.453768, 275797.958112, 280266.429404, 284759.298770, 289275.861948, 293815.386243,</div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;  298377.390708, 302961.087179, 307565.895452, 312191.173759, 316836.362522, 321500.721532, 326183.652758, 330884.723656,</div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;  335603.197219, 340338.617624, 345090.316855, 349857.860719, 354640.538362, 359438.001710, 364249.638745, 369074.940533,</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;  373913.351331, 378764.438864, 383627.767868, 388502.854215, 393389.259584, 398286.483436, 403194.238263, 408111.948151,</div>
+<div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;  413039.292303, 417975.909674, 422921.304084, 427875.195485, 432837.200959, 437807.062429, 442784.399966, 447768.726662,</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;  452760.032525, 457757.794185, 462761.810279, 467771.737196, 472787.226777, 477808.283249, 482834.411114, 487865.521166,</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;  492901.275392, 497941.616150, 502986.164281, 508034.749030, 513087.210697, 518143.298172, 523202.692981, 528265.454984,</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;  533331.384435, 538400.437943, 543472.278711, 548546.790172, 553623.737338, 558703.047575, 563784.666463, 568868.524932,</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;  573954.251207, 579041.935016, 584131.557779, 589222.910016, 594315.786547, 599410.314112, 604506.227555, 609603.610432,</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;  614702.124262, 619801.918486, 624902.903258, 630005.085347, 635107.990499, 640211.847431, 645316.755403, 650422.424613,</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;  655529.009211, 660636.166872, 665744.170495, 670852.806947, 675962.099161, 681072.042796, 686182.458370, 691293.269596,</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;  696404.763335, 701516.635253, 706628.965299, 711741.575313, 716854.769083, 721968.220605, 727082.027784, 732196.114131,</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;  737310.594653, 742425.339665, 747540.295793, 752655.505647, 757770.968129, 762886.636891, 768002.527720, 773118.559142,</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;  778234.871441, 783351.273881, 788467.944809, 793584.599211, 798701.497594, 803818.484285, 808935.619316, 814053.067243,</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;  819170.390229, 824287.946609, 829405.450988, 834523.054071, 839640.856519, 844758.800102, 849876.719924, 854994.831607,</div>
+<div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;  860112.896788, 865231.116455, 870349.453898, 875467.910756, 880586.444976, 885705.102070, 890823.822978, 895942.513436,</div>
+<div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;  901061.120048, 906179.716020, 911298.587548, 916417.583647, 921536.507373, 926655.570709, 931774.690027, 936893.879961,</div>
+<div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;  942012.956398, 947132.142141, 952251.503479, 957370.815448, 962490.012685, 967609.521437, 972729.002837, 977848.339983,</div>
+<div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;  982967.824448, 988087.392216, 993206.992691, 998326.635354, 1003446.304388, 1008565.985024, 1013685.706678, 1018805.581548,</div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;  1023925.239073, 1029045.157502, 1034165.035124, 1039284.843524, 1044404.676526, 1049524.620186, 1054644.441170, 1059764.409794,</div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;  1064884.318434, 1070004.338968, 1075124.268749, 1080244.471055, 1085364.528193, 1090484.511927, 1095604.595114, 1100724.598478,</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;  1105844.666500, 1110964.804168, 1116084.864159, 1121204.874577, 1126325.062599, 1131445.152321, 1136565.301592, 1141685.638897,</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;  1146805.806800, 1151925.790859, 1157045.932640, 1162166.112443, 1167286.221698, 1172406.273611, 1177526.581875, 1182646.832239,</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;  1187766.882661, 1192886.884388, 1198006.962839, 1203127.084377, 1208246.959060, 1213366.976076, 1218486.763464, 1223606.758568,</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;  1228726.721761, 1233846.593404, 1238966.815228, 1244086.865449, 1249206.854850, 1254326.996667, 1259447.092239, 1264567.198081,</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;  1269687.499091, 1274807.474194, 1279927.244161, 1285047.273317, 1290167.090035, 1295287.035620, 1300406.888764, 1305526.667946,</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;  1310646.540340</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;},</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;<span class="comment">// log K = 18</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;{</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;  189083.688921, 194053.597973, 199115.342781, 204269.157017, 209515.195566, 214853.553887, 220284.295855, 225807.399998,</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;  231422.826900, 237130.469824, 242930.139690, 248821.634191, 254804.718978, 260879.073467, 267044.289594, 273299.936993,</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;  279645.549742, 286080.586199, 292604.521050, 299216.651567, 305916.376160, 312702.908374, 319575.536730, 326533.420485,</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;  333575.639430, 340701.388339, 347909.713977, 355199.642852, 362570.108280, 370020.154080, 377548.652175, 385154.413997,</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;  392836.374125, 400593.371525, 408424.172521, 416327.671123, 424302.406749, 432347.292674, 440461.014310, 448642.241683,</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;  456889.603709, 465201.946081, 473577.749277, 482015.802141, 490514.770444, 499073.243760, 507689.794308, 516363.149230,</div>
+<div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;  525091.902823, 533874.850510, 542710.434311, 551597.433198, 560534.241273, 569520.019389, 578553.034265, 587632.180111,</div>
+<div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;  596756.084542, 605923.440522, 615133.037840, 624383.626242, 633673.841133, 643002.674316, 652368.578283, 661770.556501,</div>
+<div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;  671207.605795, 680678.417768, 690181.818697, 699716.780471, 709282.084973, 718876.864175, 728499.951143, 738150.280049,</div>
+<div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;  747827.053968, 757529.236597, 767255.784062, 777006.100829, 786779.065927, 796573.507429, 806388.828153, 816223.976258,</div>
+<div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;  826078.608350, 835951.751956, 845842.493689, 855750.225870, 865674.190527, 875613.809349, 885568.425527, 895537.272219,</div>
+<div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;  905519.763307, 915515.310346, 925523.353103, 935543.172648, 945574.292664, 955616.280042, 965668.428231, 975730.535479,</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;  985802.055447, 995882.596628, 1005971.583108, 1016068.664992, 1026173.649961, 1036285.774891, 1046404.955770, 1056530.588186,</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;  1066662.648243, 1076800.535542, 1086944.269881, 1097093.058652, 1107247.076183, 1117405.990557, 1127569.310917, 1137737.011345,</div>
+<div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;  1147908.717700, 1158084.362020, 1168263.501029, 1178446.221907, 1188632.206842, 1198821.131431, 1209013.020373, 1219207.570786,</div>
+<div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;  1229404.854893, 1239604.423801, 1249806.433263, 1260010.619993, 1270216.819018, 1280424.774173, 1290634.560600, 1300846.097203,</div>
+<div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;  1311059.128630, 1321273.628402, 1331489.832488, 1341707.300774, 1351925.947953, 1362145.802925, 1372366.802414, 1382588.547896,</div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;  1392811.264776, 1403035.227449, 1413259.922280, 1423485.322819, 1433711.916106, 1443938.981360, 1454166.596984, 1464394.761679,</div>
+<div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;  1474623.684212, 1484853.156422, 1495083.020146, 1505313.735890, 1515544.731764, 1525776.086634, 1536007.742073, 1546239.679012,</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;  1556472.212370, 1566704.988763, 1576937.965495, 1587171.446007, 1597405.292186, 1607639.395274, 1617873.660775, 1628108.037273,</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;  1638342.741799, 1648577.832828, 1658813.325573, 1669048.803784, 1679284.679963, 1689520.927615, 1699757.050010, 1709993.263665,</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;  1720229.557663, 1730466.102090, 1740702.604009, 1750939.618504, 1761176.930182, 1771414.210528, 1781651.713742, 1791889.218503,</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;  1802126.805234, 1812364.257333, 1822602.054007, 1832839.687792, 1843077.871973, 1853315.944762, 1863554.202066, 1873792.633125,</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;  1884030.883830, 1894269.182711, 1904507.712050, 1914746.469507, 1924985.484753, 1935224.245956, 1945463.225215, 1955702.268883,</div>
+<div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;  1965941.321722, 1976180.037370, 1986419.052784, 1996658.429579, 2006897.450283, 2017136.904971, 2027376.240039, 2037615.549295,</div>
+<div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;  2047855.197425, 2058094.765906, 2068334.279787, 2078573.820075, 2088813.469730, 2099053.348620, 2109293.174176, 2119533.012704,</div>
+<div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;  2129772.820132, 2140012.744709, 2150252.607739, 2160492.533017, 2170732.406422, 2180972.400110, 2191212.436319, 2201452.637894,</div>
+<div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;  2211692.339292, 2221932.460057, 2232172.746036, 2242412.892705, 2252653.174824, 2262893.432271, 2273134.002270, 2283374.311008,</div>
+<div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;  2293614.537881, 2303854.703732, 2314095.191374, 2324335.236186, 2334575.624526, 2344816.313269, 2355056.224171, 2365296.361285,</div>
+<div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;  2375537.048184, 2385777.280284, 2396017.222502, 2406257.145546, 2416497.272190, 2426737.212210, 2436977.500856, 2447217.897426,</div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;  2457458.423605, 2467698.536697, 2477938.448096, 2488178.544726, 2498418.640441, 2508658.160374, 2518898.274852, 2529138.509345,</div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;  2539378.310538, 2549617.989497, 2559857.504886, 2570097.363128, 2580337.195261, 2590576.878833, 2600816.572159, 2611055.930087,</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;  2621295.625004</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;},</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;<span class="comment">// log K = 19</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;{</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;  378168.156126, 388107.986863, 398231.517433, 408539.178530, 419031.252008, 429707.954086, 440569.365328, 451615.642722,</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;  462846.490174, 474261.790112, 485861.190310, 497644.259253, 509610.438730, 521759.095095, 534089.573442, 546600.981190,</div>
+<div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;  559292.272697, 572162.409622, 585210.331052, 598434.669889, 611834.157416, 625407.271721, 639152.543961, 653068.262294,</div>
+<div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;  667152.777393, 681404.241581, 695820.778241, 710400.501586, 725141.425404, 740041.558661, 755098.503731, 770310.107475,</div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;  785674.192935, 801188.297422, 816849.950298, 832656.623960, 848606.198026, 864696.151343, 880923.487841, 897285.841319,</div>
+<div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;  913780.530043, 930405.131973, 947156.655545, 964032.974599, 981030.762278, 998147.499138, 1015380.659035, 1032727.149847,</div>
+<div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;  1050184.616751, 1067750.330789, 1085421.716664, 1103195.771853, 1121069.796650, 1139041.324454, 1157107.373802, 1175265.377022,</div>
+<div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;  1193513.201704, 1211847.872855, 1230267.133114, 1248768.293478, 1267348.634472, 1286005.987451, 1304738.187318, 1323542.421988,</div>
+<div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;  1342416.458954, 1361357.807871, 1380364.530293, 1399434.095493, 1418564.587724, 1437754.116682, 1457000.254889, 1476301.275902,</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;  1495654.977143, 1515059.332212, 1534512.821906, 1554013.130304, 1573558.585534, 1593147.244450, 1612777.978405, 1632448.600136,</div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;  1652157.704100, 1671904.308928, 1691686.012962, 1711501.716352, 1731349.849417, 1751229.053668, 1771138.423208, 1791076.196899,</div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;  1811041.338260, 1831032.177526, 1851048.091817, 1871088.096683, 1891150.317142, 1911234.619162, 1931339.423184, 1951463.947205,</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;  1971606.994543, 1991767.606441, 2011945.852451, 2032140.098239, 2052349.709954, 2072574.274980, 2092812.387905, 2113063.537955,</div>
+<div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;  2133327.750182, 2153603.787963, 2173890.933053, 2194188.225246, 2214496.333997, 2234814.120065, 2255140.753372, 2275476.675949,</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;  2295820.689602, 2316172.220323, 2336530.258616, 2356894.932256, 2377266.633368, 2397645.173978, 2418028.419639, 2438417.586475,</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;  2458812.422593, 2479211.306360, 2499615.253217, 2520023.375080, 2540436.051898, 2560851.967345, 2581271.569076, 2601694.318944,</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;  2622120.693963, 2642549.418269, 2662981.070023, 2683415.520909, 2703852.500003, 2724291.876933, 2744733.213126, 2765177.477758,</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;  2785623.320019, 2806070.985142, 2826520.234343, 2846971.203929, 2867423.303616, 2887876.396540, 2908331.739769, 2928788.290672,</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;  2949245.276635, 2969704.620226, 2990164.657583, 3010625.841710, 3031087.855626, 3051550.619090, 3072014.642350, 3092479.163042,</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;  3112944.278087, 3133410.101603, 3153876.719100, 3174343.414117, 3194810.517970, 3215278.762802, 3235747.174277, 3256216.390486,</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;  3276685.652553, 3297155.394593, 3317625.911419, 3338096.547090, 3358567.567862, 3379038.637659, 3399510.649493, 3419983.382105,</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;  3440456.231853, 3460929.496047, 3481403.703904, 3501877.874941, 3522351.898403, 3542825.527074, 3563300.038829, 3583775.102749,</div>
+<div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;  3604249.896903, 3624724.967423, 3645201.027293, 3665676.534460, 3686152.061202, 3706628.308333, 3727104.271827, 3747580.803335,</div>
+<div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;  3768057.710876, 3788534.660048, 3809011.720864, 3829489.164523, 3849967.204462, 3870445.043912, 3890923.080446, 3911400.767281,</div>
+<div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;  3931879.061622, 3952357.218696, 3972836.284463, 3993314.516935, 4013793.278282, 4034272.661280, 4054751.814018, 4075230.503334,</div>
+<div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;  4095708.557968, 4116187.919814, 4136667.714093, 4157147.152355, 4177627.302553, 4198107.383728, 4218587.174918, 4239066.631662,</div>
+<div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;  4259545.994167, 4280026.100110, 4300506.380609, 4320986.617208, 4341466.696312, 4361945.995732, 4382426.527708, 4402907.058309,</div>
+<div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;  4423386.556967, 4443867.498542, 4464348.284664, 4484828.344391, 4505309.026083, 4525789.774619, 4546270.396129, 4566750.818685,</div>
+<div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;  4587231.362126, 4607711.356124, 4628191.883250, 4648673.308942, 4669153.953372, 4689634.118530, 4710114.637510, 4730595.217429,</div>
+<div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;  4751075.358693, 4771555.492921, 4792035.313408, 4812516.057037, 4832995.761283, 4853475.977619, 4873956.732160, 4894436.879314,</div>
+<div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;  4914917.149285, 4935397.069776, 4955877.550351, 4976357.852728, 4996838.246842, 5017318.023169, 5037798.008344, 5058278.290403,</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;  5078757.968956, 5099237.419344, 5119716.759591, 5140195.935830, 5160675.636320, 5181154.980843, 5201633.780713, 5222113.031789,</div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;  5242591.881577</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;},</div>
+<div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;<span class="comment">// log K = 20</span></div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;{</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;  756337.090537, 776216.744995, 796463.785646, 817079.035290, 838063.221300, 859416.678362, 881139.576270, 903232.151726,</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;  925693.940877, 948524.600346, 971723.442348, 995289.632784, 1019222.059448, 1043519.402588, 1068180.163485, 1093202.854610,</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;  1118585.515820, 1144326.031845, 1170421.828997, 1196870.617641, 1223669.453959, 1250815.679160, 1278306.298944, 1306137.726017,</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;  1334306.782451, 1362809.672011, 1391643.048887, 1420802.665486, 1450284.419390, 1480084.556504, 1510198.362531, 1540621.709038,</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;  1571349.988582, 1602377.885766, 1633700.853485, 1665314.443974, 1697213.607484, 1729393.242718, 1761847.799154, 1794572.464804,</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;  1827562.002973, 1860811.213417, 1894314.858503, 1928067.079352, 1962062.774535, 1996296.400592, 2030762.354026, 2065455.981656,</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;  2100370.818573, 2135502.224529, 2170844.722018, 2206392.452100, 2242140.795895, 2278083.565225, 2314215.470175, 2350532.238358,</div>
+<div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;  2387028.028531, 2423697.739702, 2460535.617283, 2497537.908190, 2534699.627071, 2572014.508248, 2609478.240813, 2647086.878671,</div>
+<div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;  2684834.738503, 2722717.495987, 2760730.659130, 2798869.445379, 2837130.937688, 2875509.782410, 2914002.086936, 2952603.395700,</div>
+<div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;  2991310.971904, 3030119.629799, 3069026.891217, 3108027.543585, 3147118.485322, 3186296.724369, 3225557.893026, 3264899.405158,</div>
+<div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;  3304317.806643, 3343809.532357, 3383372.875494, 3423003.239113, 3462699.855290, 3502458.588120, 3542276.984489, 3582151.461666,</div>
+<div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;  3622080.455509, 3662062.087297, 3702093.774268, 3742173.351913, 3782298.542025, 3822466.599295, 3862676.059061, 3902925.301466,</div>
+<div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;  3943212.313188, 3983534.655139, 4023890.682932, 4064278.948819, 4104698.644146, 4145147.867936, 4185624.200116, 4226127.607823,</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;  4266655.471909, 4307207.261933, 4347781.577688, 4388376.075665, 4428991.084860, 4469625.512791, 4510278.322018, 4550949.135583,</div>
+<div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;  4591635.061142, 4632337.290243, 4673054.034167, 4713783.999697, 4754527.016825, 4795282.199016, 4836049.304645, 4876828.217063,</div>
+<div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;  4917617.432795, 4958416.033283, 4999223.332994, 5040040.200620, 5080865.836319, 5121698.006953, 5162537.663489, 5203383.861562,</div>
+<div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;  5244235.368756, 5285093.542054, 5325957.172545, 5366826.006832, 5407700.602295, 5448579.444589, 5489462.237514, 5530348.767163,</div>
+<div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;  5571240.286944, 5612135.490023, 5653033.590430, 5693935.090249, 5734840.012969, 5775747.413811, 5816658.159197, 5857571.727542,</div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;  5898486.810748, 5939403.918361, 5980324.159335, 6021245.922584, 6062167.462275, 6103093.061724, 6144019.021028, 6184948.477708,</div>
+<div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;  6225878.111073, 6266809.926593, 6307741.380274, 6348674.587241, 6389609.653586, 6430546.024311, 6471482.661256, 6512419.658468,</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;  6553358.313587, 6594299.462793, 6635239.780670, 6676180.809115, 6717122.614963, 6758064.640997, 6799009.935719, 6839954.567726,</div>
+<div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;  6880900.950276, 6921847.965357, 6962794.580261, 7003742.234176, 7044691.155209, 7085639.223984, 7126587.984374, 7167538.597843,</div>
+<div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;  7208487.508674, 7249437.307369, 7290389.448350, 7331341.752887, 7372292.872774, 7413245.082344, 7454198.512431, 7495151.878502,</div>
+<div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;  7536105.815461, 7577059.755263, 7618013.175400, 7658967.579066, 7699922.475951, 7740878.015144, 7781833.511721, 7822789.986990,</div>
+<div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;  7863745.987999, 7904702.500036, 7945659.757785, 7986615.385020, 8027573.168319, 8068531.917672, 8109489.438412, 8150447.742963,</div>
+<div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;  8191403.350221, 8232362.807587, 8273321.255913, 8314281.043410, 8355240.292724, 8396199.214301, 8437156.471990, 8478114.862372,</div>
+<div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;  8519073.457296, 8560034.832965, 8600993.512814, 8641954.368755, 8682914.667061, 8723875.362809, 8764837.809961, 8805797.690078,</div>
+<div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;  8846758.789178, 8887720.671501, 8928680.126482, 8969640.467726, 9010601.160006, 9051561.769905, 9092522.487783, 9133484.594542,</div>
+<div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;  9174446.122191, 9215406.809237, 9256366.837569, 9297328.747584, 9338288.901510, 9379250.948160, 9420212.503729, 9461173.228802,</div>
+<div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;  9502133.928845, 9543094.489131, 9584055.513956, 9625015.618922, 9665975.737758, 9706937.403885, 9747896.035874, 9788856.165941,</div>
+<div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;  9829816.994627, 9870777.228642, 9911737.327683, 9952698.937964, 9993660.635143, 10034620.747904, 10075579.526207, 10116539.739394,</div>
+<div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;  10157498.625700, 10198458.468474, 10239418.486051, 10280376.431741, 10321335.494132, 10362295.312860, 10403254.402980, 10444214.519042,</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;  10485173.027410</div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;},</div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;<span class="comment">// log K = 21</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;{</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;  1512674.959317, 1552434.197368, 1592928.155075, 1634158.593696, 1676126.959176, 1718834.017325, 1762279.726817, 1806464.610827,</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;  1851388.162884, 1897049.337397, 1943446.849678, 1990579.312415, 2038444.063365, 2087038.766553, 2136360.248426, 2186405.470599,</div>
+<div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;  2237170.640174, 2288651.015887, 2340842.752937, 2393739.986364, 2447337.958039, 2501630.515180, 2556611.361814, 2612274.289376,</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;  2668612.210872, 2725618.064986, 2783284.549430, 2841603.566294, 2900566.895724, 2960167.093438, 3020394.610851, 3081240.447614,</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;  3142696.078921, 3204751.105703, 3267397.808234, 3330624.834407, 3394422.872136, 3458781.966184, 3523690.805899, 3589140.856689,</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;  3655119.540256, 3721617.907853, 3788624.486645, 3856129.175227, 3924119.940026, 3992586.658818, 4061519.544440, 4130906.734075,</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;  4200737.500257, 4271000.909057, 4341685.842431, 4412781.306685, 4484277.199691, 4556162.287552, 4628426.495554, 4701059.642462,</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;  4774050.909933, 4847389.117100, 4921065.536469, 4995068.178578, 5069389.529141, 5144019.928509, 5218947.440841, 5294164.568050,</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;  5369660.364896, 5445425.915267, 5521454.727645, 5597734.642433, 5674257.411718, 5751014.463556, 5827999.822090, 5905203.759793,</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;  5982617.522812, 6060234.561845, 6138048.162353, 6216049.451496, 6294232.713331, 6372588.108087, 6451109.903764, 6529792.611180,</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;  6608629.912527, 6687615.097432, 6766740.086064, 6846000.116450, 6925391.839995, 7004908.093083, 7084544.127544, 7164293.822313,</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;  7244153.392582, 7324115.814384, 7404179.031163, 7484336.380737, 7564586.128001, 7644922.247694, 7725340.819662, 7805840.541693,</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;  7886412.416887, 7967054.301986, 8047764.087248, 8128539.447460, 8209376.477465, 8290273.766928, 8371225.884580, 8452230.183873,</div>
+<div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;  8533283.959811, 8614388.863382, 8695539.350564, 8776730.375553, 8857961.046732, 8939230.757845, 9020535.369667, 9101877.322129,</div>
+<div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;  9183251.420601, 9264654.743697, 9346087.109813, 9427548.372707, 9509034.441574, 9590547.753266, 9672081.682514, 9753639.600816,</div>
+<div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;  9835216.139507, 9916813.989591, 9998428.682824, 10080058.312759, 10161706.673718, 10243372.018016, 10325050.507034, 10406744.529470,</div>
+<div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;  10488447.296300, 10570163.109725, 10651893.512546, 10733632.712879, 10815382.384056, 10897140.573621, 10978907.646650, 11060681.383125,</div>
+<div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;  11142464.138730, 11224254.549571, 11306053.275368, 11387858.162207, 11469666.329635, 11551480.634292, 11633302.025569, 11715128.710512,</div>
+<div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;  11796961.403328, 11878795.670820, 11960634.652330, 12042477.348124, 12124323.950451, 12206172.128053, 12288028.811447, 12369886.306570,</div>
+<div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;  12451744.123236, 12533607.183832, 12615473.707341, 12697338.733240, 12779207.987968, 12861080.507718, 12942957.260823, 13024834.007606,</div>
+<div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;  13106715.252745, 13188597.806270, 13270478.933580, 13352362.482281, 13434247.263704, 13516133.477076, 13598020.834213, 13679909.264273,</div>
+<div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;  13761799.592878, 13843689.299819, 13925583.582108, 14007479.173806, 14089371.780210, 14171268.621526, 14253167.561983, 14335070.527750,</div>
+<div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;  14416971.620797, 14498873.784867, 14580778.789301, 14662681.662290, 14744586.311912, 14826493.286700, 14908400.702409, 14990305.605573,</div>
+<div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;  15072214.379125, 15154123.120545, 15236031.901296, 15317939.866920, 15399849.993076, 15481761.939120, 15563672.325616, 15645585.312945,</div>
+<div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;  15727497.406318, 15809411.780271, 15891325.875461, 15973239.145687, 16055155.936424, 16137069.783844, 16218984.663574, 16300899.732679,</div>
+<div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;  16382815.849682, 16464730.053474, 16546645.675799, 16628563.444017, 16710481.533611, 16792400.824636, 16874319.061886, 16956235.859045,</div>
+<div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;  17038151.394583, 17120072.629220, 17201992.200096, 17283914.365655, 17365836.161356, 17447756.880495, 17529681.545942, 17611601.675003,</div>
+<div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;  17693522.079185, 17775441.939609, 17857361.777214, 17939284.144858, 18021205.445833, 18103125.675947, 18185051.132189, 18266974.391463,</div>
+<div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;  18348894.689783, 18430817.526979, 18512736.992850, 18594657.001222, 18676577.636496, 18758497.698999, 18840421.426602, 18922345.360722,</div>
+<div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;  19004266.906157, 19086186.184618, 19168105.320223, 19250029.336282, 19331950.350200, 19413874.580826, 19495794.431194, 19577715.745558,</div>
+<div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;  19659638.264924, 19741557.363469, 19823478.431258, 19905400.862401, 19987318.682409, 20069238.585823, 20151157.549449, 20233076.181910,</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;  20314994.521260, 20396915.069140, 20478836.108717, 20560753.915833, 20642672.570035, 20724588.867440, 20806507.038063, 20888426.370670,</div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;  20970344.006053</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;}</div>
+<div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;};</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160; </div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;<span class="keyword">const</span> <span class="keywordtype">double</span>* CompositeInterpolationXTable&lt;A&gt;::get_x_arr(uint8_t logK) {</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;  <span class="keywordflow">if</span> (logK &lt; hll_constants::MIN_LOG_K || logK &gt; hll_constants::MAX_LOG_K) {</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;logK must be in range [&quot;</span> + std::to_string(hll_constants::MIN_LOG_K)</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;                                + <span class="stringliteral">&quot;, &quot;</span> + std::to_string(hll_constants::MAX_LOG_K) + <span class="stringliteral">&quot;]. Found: &quot;</span></div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;                                + std::to_string(logK));</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;  }</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;  <span class="keywordflow">return</span> xArray[logK - hll_constants::MIN_LOG_K];</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;}</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160; </div>
+<div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;}</div>
+<div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160; </div>
+<div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _COMPOSITEINTERPOLATIONXTABLE_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/CompositeInterpolationXTable_8hpp_source.html b/docs/master/CompositeInterpolationXTable_8hpp_source.html
index c8f69a2..7cc7192 100644
--- a/docs/master/CompositeInterpolationXTable_8hpp_source.html
+++ b/docs/master/CompositeInterpolationXTable_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/CompositeInterpolationXTable.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,54 +65,55 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">CompositeInterpolationXTable.hpp</div></div>
+  <div class="headertitle">
+<div class="title">CompositeInterpolationXTable.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _COMPOSITEINTERPOLATIONXTABLE_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _COMPOSITEINTERPOLATIONXTABLE_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A = std::allocator&lt;u<span class="keywordtype">int</span>8_t&gt;&gt;</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">class </span>CompositeInterpolationXTable {</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span>  <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>    <span class="keyword">static</span> uint32_t get_y_stride(uint8_t logK);</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>    <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span>* get_x_arr(uint8_t logK);</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>    <span class="keyword">static</span> uint32_t get_x_arr_length();</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span>};</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span> </div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>}</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span><span class="preprocessor">#include &quot;CompositeInterpolationXTable-internal.hpp&quot;</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span> </div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span><span class="preprocessor">#endif </span><span class="comment">/* _COMPOSITEINTERPOLATIONXTABLE_HPP_ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _COMPOSITEINTERPOLATIONXTABLE_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _COMPOSITEINTERPOLATIONXTABLE_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A = std::allocator&lt;u<span class="keywordtype">int</span>8_t&gt;&gt;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">class </span>CompositeInterpolationXTable {</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="keyword">static</span> uint32_t get_y_stride(uint8_t logK);</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span>* get_x_arr(uint8_t logK);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keyword">static</span> uint32_t get_x_arr_length();</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;};</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;}</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="preprocessor">#include &quot;CompositeInterpolationXTable-internal.hpp&quot;</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _COMPOSITEINTERPOLATIONXTABLE_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/CouponHashSet-internal_8hpp_source.html b/docs/master/CouponHashSet-internal_8hpp_source.html
index b0c382b..ac2ef48 100644
--- a/docs/master/CouponHashSet-internal_8hpp_source.html
+++ b/docs/master/CouponHashSet-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/CouponHashSet-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,290 +65,291 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">CouponHashSet-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">CouponHashSet-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _COUPONHASHSET_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _COUPONHASHSET_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;CouponHashSet.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &lt;cstring&gt;</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#include &lt;exception&gt;</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span> </div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span><span class="keyword">static</span> int32_t find(<span class="keyword">const</span> uint32_t* array, uint8_t lgArrInts, uint32_t coupon);</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span> </div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>CouponHashSet&lt;A&gt;::CouponHashSet(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A&amp; allocator)</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>  : CouponList&lt;A&gt;(lgConfigK, tgtHllType, hll_mode::SET, allocator)</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>{</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>  <span class="keywordflow">if</span> (lgConfigK &lt;= 7) {</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;CouponHashSet must be initialized with lgConfigK &gt; 7. Found: &quot;</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>                                + std::to_string(lgConfigK));</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>  }</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>}</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>CouponHashSet&lt;A&gt;::CouponHashSet(<span class="keyword">const</span> CouponHashSet&lt;A&gt;&amp; that, <span class="keyword">const</span> target_hll_type tgtHllType)</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>  : CouponList&lt;A&gt;(that, tgtHllType) {}</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span> </div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; CouponHashSet&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>    CouponHashSet&lt;A&gt;* chs = <span class="keyword">static_cast&lt;</span>CouponHashSet&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>    ChsAlloc chsa(chs-&gt;getAllocator());</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>    chs-&gt;~CouponHashSet();</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>    chsa.deallocate(chs, 1);</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>  };</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>}</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span> </div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>CouponHashSet&lt;A&gt;* CouponHashSet&lt;A&gt;::newSet(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator) {</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>  <span class="keywordflow">if</span> (len &lt; hll_constants::HASH_SET_INT_ARR_START) { <span class="comment">// hard-coded</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input data length insufficient to hold CouponHashSet&quot;</span>);</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>  }</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span> </div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>  <span class="keyword">const</span> uint8_t* data = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(bytes);</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>  <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HASH_SET_PREINTS) {</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>  }</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>  <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>  }</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>  <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>  }</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span> </div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>  <span class="keyword">const</span> hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>  <span class="keywordflow">if</span> (mode != SET) {</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling set constructor with non-set mode data&quot;</span>);</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>  }</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span> </div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>  <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span> </div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>  <span class="keyword">const</span> uint8_t lgK = data[hll_constants::LG_K_BYTE];</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>  <span class="keywordflow">if</span> (lgK &lt;= 7) {</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Attempt to deserialize invalid CouponHashSet with lgConfigK &lt;= 7. Found: &quot;</span></div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>                                + std::to_string(lgK));</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>  }   </div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>  uint8_t lgArrInts = data[hll_constants::LG_ARR_BYTE];</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> compactFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span> </div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>  uint32_t couponCount;</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>  std::memcpy(&amp;couponCount, data + hll_constants::HASH_SET_COUNT_INT, <span class="keyword">sizeof</span>(couponCount));</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>  <span class="keywordflow">if</span> (lgArrInts &lt; hll_constants::LG_INIT_SET_SIZE) {</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>    lgArrInts = HllUtil&lt;&gt;::computeLgArrInts(SET, couponCount, lgK);</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>  }</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>  <span class="comment">// Don&#39;t set couponCount in sketch here;</span></div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>  <span class="comment">// we&#39;ll set later if updatable, and increment with updates if compact</span></div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>  <span class="keyword">const</span> uint32_t couponsInArray = (compactFlag ? couponCount : (1 &lt;&lt; lgArrInts));</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> expectedLength = hll_constants::HASH_SET_INT_ARR_START + (couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>  <span class="keywordflow">if</span> (len &lt; expectedLength) {</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Byte array too short for sketch. Expected &quot;</span> + std::to_string(expectedLength)</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>                                + <span class="stringliteral">&quot;, found: &quot;</span> + std::to_string(len));</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>  }</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span> </div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>  ChsAlloc chsa(allocator);</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>  CouponHashSet&lt;A&gt;* sketch = <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet&lt;A&gt;(lgK, tgtHllType, allocator);</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span> </div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>  <span class="keywordflow">if</span> (compactFlag) {</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span>    <span class="keyword">const</span> uint8_t* curPos = data + hll_constants::HASH_SET_INT_ARR_START;</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>    uint32_t coupon;</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; couponCount; ++i, curPos += <span class="keyword">sizeof</span>(coupon)) {</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>      std::memcpy(&amp;coupon, curPos, <span class="keyword">sizeof</span>(coupon));</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>      sketch-&gt;couponUpdate(coupon);</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>    }</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>  } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>    sketch-&gt;coupons_.resize(1ULL &lt;&lt; lgArrInts);</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>    sketch-&gt;couponCount_ = couponCount;</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>    std::memcpy(sketch-&gt;coupons_.data(),</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>                data + hll_constants::HASH_SET_INT_ARR_START,</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>                couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>  }</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span> </div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span>  <span class="keywordflow">return</span> sketch;</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>}</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span> </div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>CouponHashSet&lt;A&gt;* CouponHashSet&lt;A&gt;::newSet(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator) {</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span>  uint8_t listHeader[8];</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>  read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span> </div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HASH_SET_PREINTS) {</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span>  }</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>  }</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>  }</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span> </div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span>  hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>  <span class="keywordflow">if</span> (mode != SET) {</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling set constructor with non-set mode data&quot;</span>);</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span>  }</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span> </div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span>  <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span> </div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>  <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>  <span class="keywordflow">if</span> (lgK &lt;= 7) {</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Attempt to deserialize invalid CouponHashSet with lgConfigK &lt;= 7. Found: &quot;</span></div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span>                                + std::to_string(lgK));</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>  }</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>  uint8_t lgArrInts = listHeader[hll_constants::LG_ARR_BYTE];</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> compactFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span> </div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span>  <span class="keyword">const</span> <span class="keyword">auto</span> couponCount = read&lt;uint32_t&gt;(is);</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span>  <span class="keywordflow">if</span> (lgArrInts &lt; hll_constants::LG_INIT_SET_SIZE) {</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span>    lgArrInts = HllUtil&lt;&gt;::computeLgArrInts(SET, couponCount, lgK);</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span>  }</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span> </div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span>  ChsAlloc chsa(allocator);</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span>  CouponHashSet&lt;A&gt;* sketch = <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet&lt;A&gt;(lgK, tgtHllType, allocator);</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>  <span class="keyword">typedef</span> std::unique_ptr&lt;CouponHashSet&lt;A&gt;, std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt;&gt; coupon_hash_set_ptr;</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span>  coupon_hash_set_ptr ptr(sketch, sketch-&gt;get_deleter());</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span>  <span class="comment">// Don&#39;t set couponCount here;</span></div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span>  <span class="comment">// we&#39;ll set later if updatable, and increment with updates if compact</span></div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span>  <span class="keywordflow">if</span> (compactFlag) {</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; couponCount; ++i) {</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>      <span class="keyword">const</span> <span class="keyword">auto</span> coupon = read&lt;uint32_t&gt;(is);</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span>      sketch-&gt;couponUpdate(coupon);</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span>    }</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>  } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>    sketch-&gt;coupons_.resize(1ULL &lt;&lt; lgArrInts);</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>    sketch-&gt;couponCount_ = couponCount;</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>    <span class="comment">// for stream processing, read entire list so read pointer ends up set correctly</span></div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span>    read(is, sketch-&gt;coupons_.data(), sketch-&gt;coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>  } </div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span> </div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span>  <span class="keywordflow">if</span> (!is.good())</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>    <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;error reading from std::istream&quot;</span>); </div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span> </div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>  <span class="keywordflow">return</span> ptr.release();</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>}</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span> </div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span>CouponHashSet&lt;A&gt;* CouponHashSet&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>  ChsAlloc chsa(this-&gt;coupons_.get_allocator());</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet&lt;A&gt;(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>}</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span> </div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>CouponHashSet&lt;A&gt;* CouponHashSet&lt;A&gt;::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>  ChsAlloc chsa(this-&gt;coupons_.get_allocator());</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet&lt;A&gt;(*<span class="keyword">this</span>, tgtHllType);</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>}</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span> </div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>HllSketchImpl&lt;A&gt;* CouponHashSet&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>  <span class="keyword">const</span> uint8_t lgCouponArrInts = count_trailing_zeros_in_u32(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(this-&gt;coupons_.size()));</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span>  <span class="keyword">const</span> int32_t index = find&lt;A&gt;(this-&gt;coupons_.data(), lgCouponArrInts, coupon);</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>  <span class="keywordflow">if</span> (index &gt;= 0) {</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>    <span class="keywordflow">return</span> <span class="keyword">this</span>; <span class="comment">// found duplicate, ignore</span></div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>  }</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>  this-&gt;coupons_[~index] = coupon; <span class="comment">// found empty</span></div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>  ++this-&gt;couponCount_;</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span>  <span class="keywordflow">if</span> (checkGrowOrPromote()) {</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>    <span class="keywordflow">return</span> this-&gt;promoteHeapListOrSetToHll(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>  }</div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>}</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span> </div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>uint32_t CouponHashSet&lt;A&gt;::getMemDataStart()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span>  <span class="keywordflow">return</span> hll_constants::HASH_SET_INT_ARR_START;</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span>}</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span> </div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span>uint8_t CouponHashSet&lt;A&gt;::getPreInts()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>  <span class="keywordflow">return</span> hll_constants::HASH_SET_PREINTS;</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>}</div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span> </div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span><span class="keywordtype">bool</span> CouponHashSet&lt;A&gt;::checkGrowOrPromote() {</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>  <span class="keywordflow">if</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(hll_constants::RESIZE_DENOM * this-&gt;couponCount_) &gt; (hll_constants::RESIZE_NUMER * this-&gt;coupons_.size())) {</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>    <span class="keyword">const</span> uint8_t lgCouponArrInts = count_trailing_zeros_in_u32(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(this-&gt;coupons_.size()));</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>    <span class="keywordflow">if</span> (lgCouponArrInts == (this-&gt;lgConfigK_ - 3)) { <span class="comment">// at max size</span></div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>      <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// promote to HLL</span></div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>    }</div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span>    growHashSet(lgCouponArrInts + 1);</div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span>  }</div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span>}</div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span> </div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span><span class="keywordtype">void</span> CouponHashSet&lt;A&gt;::growHashSet(uint8_t tgtLgCoupArrSize) {</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span>  <span class="keyword">const</span> uint32_t tgtLen = 1 &lt;&lt; tgtLgCoupArrSize;</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span>  vector_int coupons_new(tgtLen, 0, this-&gt;coupons_.get_allocator());</div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span> </div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span>  <span class="keyword">const</span> uint32_t srcLen = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(this-&gt;coupons_.size());</div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; srcLen; ++i) { <span class="comment">// scan existing array for non-zero values</span></div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span>    <span class="keyword">const</span> uint32_t fetched = this-&gt;coupons_[i];</div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span>    <span class="keywordflow">if</span> (fetched != hll_constants::EMPTY) {</div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span>      <span class="keyword">const</span> int32_t idx = find&lt;A&gt;(coupons_new.data(), tgtLgCoupArrSize, fetched); <span class="comment">// search TGT array</span></div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span>      <span class="keywordflow">if</span> (idx &lt; 0) { <span class="comment">// found EMPTY</span></div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span>        coupons_new[~idx] = fetched; <span class="comment">// insert</span></div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>        <span class="keywordflow">continue</span>;</div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>      }</div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span>      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Error: Found duplicate coupon&quot;</span>);</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span>    }</div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span>  }</div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span>  this-&gt;coupons_ = std::move(coupons_new);</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span>}</div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span> </div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span><span class="keyword">static</span> int32_t find(<span class="keyword">const</span> uint32_t* array, uint8_t lgArrInts, uint32_t coupon) {</div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span>  <span class="keyword">const</span> uint32_t arrMask = (1 &lt;&lt; lgArrInts) - 1;</div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>  uint32_t probe = coupon &amp; arrMask;</div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span>  <span class="keyword">const</span> uint32_t loopIndex = probe;</div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span>  <span class="keywordflow">do</span> {</div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span>    <span class="keyword">const</span> uint32_t couponAtIdx = array[probe];</div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span>    <span class="keywordflow">if</span> (couponAtIdx == hll_constants::EMPTY) {</div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>      <span class="keywordflow">return</span> ~probe; <span class="comment">//empty</span></div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>    }</div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span>    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (coupon == couponAtIdx) {</div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span>      <span class="keywordflow">return</span> probe; <span class="comment">//duplicate</span></div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span>    }</div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span>    <span class="keyword">const</span> uint32_t stride = ((coupon &amp; hll_constants::KEY_MASK_26) &gt;&gt; lgArrInts) | 1;</div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>    probe = (probe + stride) &amp; arrMask;</div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span>  } <span class="keywordflow">while</span> (probe != loopIndex);</div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span>  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Key not found and no empty slots!&quot;</span>);</div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>}</div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span> </div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span>}</div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span> </div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span><span class="preprocessor">#endif </span><span class="comment">// _COUPONHASHSET_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _COUPONHASHSET_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _COUPONHASHSET_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;CouponHashSet.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;exception&gt;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword">static</span> int32_t find(<span class="keyword">const</span> uint32_t* array, uint8_t lgArrInts, uint32_t coupon);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;CouponHashSet&lt;A&gt;::CouponHashSet(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A&amp; allocator)</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;  : CouponList&lt;A&gt;(lgConfigK, tgtHllType, hll_mode::SET, allocator)</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;{</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;  <span class="keywordflow">if</span> (lgConfigK &lt;= 7) {</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;CouponHashSet must be initialized with lgConfigK &gt; 7. Found: &quot;</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;                                + std::to_string(lgConfigK));</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;  }</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;}</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;CouponHashSet&lt;A&gt;::CouponHashSet(<span class="keyword">const</span> CouponHashSet&lt;A&gt;&amp; that, <span class="keyword">const</span> target_hll_type tgtHllType)</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;  : CouponList&lt;A&gt;(that, tgtHllType) {}</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; CouponHashSet&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    CouponHashSet&lt;A&gt;* chs = <span class="keyword">static_cast&lt;</span>CouponHashSet&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    ChsAlloc chsa(chs-&gt;getAllocator());</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    chs-&gt;~CouponHashSet();</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    chsa.deallocate(chs, 1);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  };</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;}</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160; </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;CouponHashSet&lt;A&gt;* CouponHashSet&lt;A&gt;::newSet(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <span class="keywordflow">if</span> (len &lt; hll_constants::HASH_SET_INT_ARR_START) { <span class="comment">// hard-coded</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input data length insufficient to hold CouponHashSet&quot;</span>);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  }</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160; </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  <span class="keyword">const</span> uint8_t* data = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(bytes);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HASH_SET_PREINTS) {</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  }</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  }</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  <span class="keyword">const</span> hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  <span class="keywordflow">if</span> (mode != SET) {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling set constructor with non-set mode data&quot;</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  }</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160; </div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="keyword">const</span> uint8_t lgK = data[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  <span class="keywordflow">if</span> (lgK &lt;= 7) {</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Attempt to deserialize invalid CouponHashSet with lgConfigK &lt;= 7. Found: &quot;</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                                + std::to_string(lgK));</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  }   </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  uint8_t lgArrInts = data[hll_constants::LG_ARR_BYTE];</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> compactFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  uint32_t couponCount;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  std::memcpy(&amp;couponCount, data + hll_constants::HASH_SET_COUNT_INT, <span class="keyword">sizeof</span>(couponCount));</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  <span class="keywordflow">if</span> (lgArrInts &lt; hll_constants::LG_INIT_SET_SIZE) {</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    lgArrInts = HllUtil&lt;&gt;::computeLgArrInts(SET, couponCount, lgK);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  <span class="comment">// Don&#39;t set couponCount in sketch here;</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <span class="comment">// we&#39;ll set later if updatable, and increment with updates if compact</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <span class="keyword">const</span> uint32_t couponsInArray = (compactFlag ? couponCount : (1 &lt;&lt; lgArrInts));</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> expectedLength = hll_constants::HASH_SET_INT_ARR_START + (couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keywordflow">if</span> (len &lt; expectedLength) {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Byte array too short for sketch. Expected &quot;</span> + std::to_string(expectedLength)</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;                                + <span class="stringliteral">&quot;, found: &quot;</span> + std::to_string(len));</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  ChsAlloc chsa(allocator);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  CouponHashSet&lt;A&gt;* sketch = <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet&lt;A&gt;(lgK, tgtHllType, allocator);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  <span class="keywordflow">if</span> (compactFlag) {</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <span class="keyword">const</span> uint8_t* curPos = data + hll_constants::HASH_SET_INT_ARR_START;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    uint32_t coupon;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; couponCount; ++i, curPos += <span class="keyword">sizeof</span>(coupon)) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;      std::memcpy(&amp;coupon, curPos, <span class="keyword">sizeof</span>(coupon));</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;      sketch-&gt;couponUpdate(coupon);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    }</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    sketch-&gt;coupons_.resize(1ULL &lt;&lt; lgArrInts);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    sketch-&gt;couponCount_ = couponCount;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    std::memcpy(sketch-&gt;coupons_.data(),</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;                data + hll_constants::HASH_SET_INT_ARR_START,</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;                couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160; </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <span class="keywordflow">return</span> sketch;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;}</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;CouponHashSet&lt;A&gt;* CouponHashSet&lt;A&gt;::newSet(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator) {</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  uint8_t listHeader[8];</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160; </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HASH_SET_PREINTS) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  }</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  }</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160; </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  <span class="keywordflow">if</span> (mode != SET) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling set constructor with non-set mode data&quot;</span>);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  }</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160; </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  <span class="keywordflow">if</span> (lgK &lt;= 7) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Attempt to deserialize invalid CouponHashSet with lgConfigK &lt;= 7. Found: &quot;</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;                                + std::to_string(lgK));</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  uint8_t lgArrInts = listHeader[hll_constants::LG_ARR_BYTE];</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> compactFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  <span class="keyword">const</span> <span class="keyword">auto</span> couponCount = read&lt;uint32_t&gt;(is);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  <span class="keywordflow">if</span> (lgArrInts &lt; hll_constants::LG_INIT_SET_SIZE) {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    lgArrInts = HllUtil&lt;&gt;::computeLgArrInts(SET, couponCount, lgK);</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  }</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160; </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;  ChsAlloc chsa(allocator);</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  CouponHashSet&lt;A&gt;* sketch = <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet&lt;A&gt;(lgK, tgtHllType, allocator);</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  <span class="keyword">typedef</span> std::unique_ptr&lt;CouponHashSet&lt;A&gt;, std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt;&gt; coupon_hash_set_ptr;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;  coupon_hash_set_ptr ptr(sketch, sketch-&gt;get_deleter());</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;  <span class="comment">// Don&#39;t set couponCount here;</span></div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  <span class="comment">// we&#39;ll set later if updatable, and increment with updates if compact</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  <span class="keywordflow">if</span> (compactFlag) {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; couponCount; ++i) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;      <span class="keyword">const</span> <span class="keyword">auto</span> coupon = read&lt;uint32_t&gt;(is);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;      sketch-&gt;couponUpdate(coupon);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    }</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    sketch-&gt;coupons_.resize(1ULL &lt;&lt; lgArrInts);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    sketch-&gt;couponCount_ = couponCount;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="comment">// for stream processing, read entire list so read pointer ends up set correctly</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    read(is, sketch-&gt;coupons_.data(), sketch-&gt;coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  } </div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160; </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  <span class="keywordflow">if</span> (!is.good())</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;error reading from std::istream&quot;</span>); </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160; </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  <span class="keywordflow">return</span> ptr.release();</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;}</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160; </div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;CouponHashSet&lt;A&gt;* CouponHashSet&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  ChsAlloc chsa(this-&gt;coupons_.get_allocator());</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet&lt;A&gt;(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;}</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160; </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;CouponHashSet&lt;A&gt;* CouponHashSet&lt;A&gt;::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  ChsAlloc chsa(this-&gt;coupons_.get_allocator());</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (chsa.allocate(1)) CouponHashSet&lt;A&gt;(*<span class="keyword">this</span>, tgtHllType);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;}</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160; </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;HllSketchImpl&lt;A&gt;* CouponHashSet&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  <span class="keyword">const</span> uint8_t lgCouponArrInts = count_trailing_zeros_in_u32(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(this-&gt;coupons_.size()));</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  <span class="keyword">const</span> int32_t index = find&lt;A&gt;(this-&gt;coupons_.data(), lgCouponArrInts, coupon);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  <span class="keywordflow">if</span> (index &gt;= 0) {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">this</span>; <span class="comment">// found duplicate, ignore</span></div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;  }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;  this-&gt;coupons_[~index] = coupon; <span class="comment">// found empty</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;  ++this-&gt;couponCount_;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;  <span class="keywordflow">if</span> (checkGrowOrPromote()) {</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keywordflow">return</span> this-&gt;promoteHeapListOrSetToHll(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;  }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;}</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160; </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;uint32_t CouponHashSet&lt;A&gt;::getMemDataStart()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;  <span class="keywordflow">return</span> hll_constants::HASH_SET_INT_ARR_START;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;}</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;uint8_t CouponHashSet&lt;A&gt;::getPreInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  <span class="keywordflow">return</span> hll_constants::HASH_SET_PREINTS;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;}</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160; </div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="keywordtype">bool</span> CouponHashSet&lt;A&gt;::checkGrowOrPromote() {</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  <span class="keywordflow">if</span> (<span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(hll_constants::RESIZE_DENOM * this-&gt;couponCount_) &gt; (hll_constants::RESIZE_NUMER * this-&gt;coupons_.size())) {</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="keyword">const</span> uint8_t lgCouponArrInts = count_trailing_zeros_in_u32(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(this-&gt;coupons_.size()));</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="keywordflow">if</span> (lgCouponArrInts == (this-&gt;lgConfigK_ - 3)) { <span class="comment">// at max size</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">true</span>; <span class="comment">// promote to HLL</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    }</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    growHashSet(lgCouponArrInts + 1);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  }</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;}</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160; </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="keywordtype">void</span> CouponHashSet&lt;A&gt;::growHashSet(uint8_t tgtLgCoupArrSize) {</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  <span class="keyword">const</span> uint32_t tgtLen = 1 &lt;&lt; tgtLgCoupArrSize;</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  vector_int coupons_new(tgtLen, 0, this-&gt;coupons_.get_allocator());</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160; </div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;  <span class="keyword">const</span> uint32_t srcLen = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(this-&gt;coupons_.size());</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; srcLen; ++i) { <span class="comment">// scan existing array for non-zero values</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;    <span class="keyword">const</span> uint32_t fetched = this-&gt;coupons_[i];</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="keywordflow">if</span> (fetched != hll_constants::EMPTY) {</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;      <span class="keyword">const</span> int32_t idx = find&lt;A&gt;(coupons_new.data(), tgtLgCoupArrSize, fetched); <span class="comment">// search TGT array</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;      <span class="keywordflow">if</span> (idx &lt; 0) { <span class="comment">// found EMPTY</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        coupons_new[~idx] = fetched; <span class="comment">// insert</span></div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;      }</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Error: Found duplicate coupon&quot;</span>);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    }</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  }</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  this-&gt;coupons_ = std::move(coupons_new);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;}</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160; </div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;<span class="keyword">static</span> int32_t find(<span class="keyword">const</span> uint32_t* array, uint8_t lgArrInts, uint32_t coupon) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;  <span class="keyword">const</span> uint32_t arrMask = (1 &lt;&lt; lgArrInts) - 1;</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  uint32_t probe = coupon &amp; arrMask;</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  <span class="keyword">const</span> uint32_t loopIndex = probe;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;  <span class="keywordflow">do</span> {</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <span class="keyword">const</span> uint32_t couponAtIdx = array[probe];</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="keywordflow">if</span> (couponAtIdx == hll_constants::EMPTY) {</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;      <span class="keywordflow">return</span> ~probe; <span class="comment">//empty</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (coupon == couponAtIdx) {</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;      <span class="keywordflow">return</span> probe; <span class="comment">//duplicate</span></div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    }</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    <span class="keyword">const</span> uint32_t stride = ((coupon &amp; hll_constants::KEY_MASK_26) &gt;&gt; lgArrInts) | 1;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    probe = (probe + stride) &amp; arrMask;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  } <span class="keywordflow">while</span> (probe != loopIndex);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;  <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Key not found and no empty slots!&quot;</span>);</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;}</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160; </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;}</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160; </div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _COUPONHASHSET_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition:</b> hll.hpp:72</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/CouponHashSet_8hpp_source.html b/docs/master/CouponHashSet_8hpp_source.html
index e9ac542..d0d289f 100644
--- a/docs/master/CouponHashSet_8hpp_source.html
+++ b/docs/master/CouponHashSet_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/CouponHashSet.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,74 +65,75 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">CouponHashSet.hpp</div></div>
+  <div class="headertitle">
+<div class="title">CouponHashSet.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _COUPONHASHSET_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _COUPONHASHSET_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;CouponList.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">class </span>CouponHashSet : <span class="keyword">public</span> CouponList&lt;A&gt; {</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span>  <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>    <span class="keyword">static</span> CouponHashSet* newSet(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span>    <span class="keyword">static</span> CouponHashSet* newSet(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>    CouponHashSet(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>    CouponHashSet(<span class="keyword">const</span> CouponHashSet&amp; that, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>    <span class="keyword">virtual</span> ~CouponHashSet() = <span class="keywordflow">default</span>;</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>  <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>    <span class="keyword">using </span>vector_int = std::vector&lt;uint32_t, typename std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;uint32_t&gt;&gt;;</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span> </div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>    <span class="keyword">virtual</span> CouponHashSet* copy() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>    <span class="keyword">virtual</span> CouponHashSet* copyAs(<a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon);</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span> </div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>    <span class="keyword">virtual</span> uint32_t getMemDataStart() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>    <span class="keyword">virtual</span> uint8_t getPreInts() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span> </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>    <span class="keyword">friend</span> <span class="keyword">class </span>HllSketchImplFactory&lt;A&gt;;</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span> </div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>  <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>    <span class="keyword">using </span>ChsAlloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;CouponHashSet&lt;A&gt;&gt;;</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>    <span class="keywordtype">bool</span> checkGrowOrPromote();</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>    <span class="keywordtype">void</span> growHashSet(uint8_t tgtLgCoupArrSize);</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>};</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span> </div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>}</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span><span class="preprocessor">#endif </span><span class="comment">/* _COUPONHASHSET_HPP_ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _COUPONHASHSET_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _COUPONHASHSET_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;CouponList.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">class </span>CouponHashSet : <span class="keyword">public</span> CouponList&lt;A&gt; {</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="keyword">static</span> CouponHashSet* newSet(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keyword">static</span> CouponHashSet* newSet(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    CouponHashSet(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    CouponHashSet(<span class="keyword">const</span> CouponHashSet&amp; that, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keyword">virtual</span> ~CouponHashSet() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;  <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keyword">using</span> vector_int = std::vector&lt;uint32_t, typename std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;uint32_t&gt;&gt;;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keyword">virtual</span> CouponHashSet* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">virtual</span> CouponHashSet* copyAs(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keyword">virtual</span> uint32_t getMemDataStart() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keyword">virtual</span> uint8_t getPreInts() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="keyword">friend</span> <span class="keyword">class </span>HllSketchImplFactory&lt;A&gt;;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160; </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keyword">using</span> ChsAlloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;CouponHashSet&lt;A&gt;&gt;;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="keywordtype">bool</span> checkGrowOrPromote();</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keywordtype">void</span> growHashSet(uint8_t tgtLgCoupArrSize);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;};</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;}</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _COUPONHASHSET_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition:</b> hll.hpp:72</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/CouponList-internal_8hpp_source.html b/docs/master/CouponList-internal_8hpp_source.html
index 9ee9f10..981c5b7 100644
--- a/docs/master/CouponList-internal_8hpp_source.html
+++ b/docs/master/CouponList-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/CouponList-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,398 +65,399 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">CouponList-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">CouponList-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _COUPONLIST_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _COUPONLIST_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;CouponList.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="preprocessor">#include &quot;CubicInterpolation.hpp&quot;</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &quot;HllUtil.hpp&quot;</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#include &quot;count_zeros.hpp&quot;</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="preprocessor">#include &lt;algorithm&gt;</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="preprocessor">#include &lt;cmath&gt;</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span> </div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>CouponList&lt;A&gt;::CouponList(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode, <span class="keyword">const</span> A&amp; allocator):</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>HllSketchImpl&lt;A&gt;(lgConfigK, tgtHllType, mode, false),</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>couponCount_(0),</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>oooFlag_(false),</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>coupons_(1ULL &lt;&lt; (mode == hll_mode::LIST ? hll_constants::LG_INIT_LIST_SIZE : hll_constants::LG_INIT_SET_SIZE), 0, allocator)</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>{}</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span> </div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>CouponList&lt;A&gt;::CouponList(<span class="keyword">const</span> CouponList&amp; that, <span class="keyword">const</span> target_hll_type tgtHllType):</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>HllSketchImpl&lt;A&gt;(that.lgConfigK_, tgtHllType, that.mode_, false),</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>couponCount_(that.couponCount_),</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>oooFlag_(that.oooFlag_),</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>coupons_(that.coupons_)</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>{}</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span> </div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; CouponList&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>    CouponList&lt;A&gt;* cl = <span class="keyword">static_cast&lt;</span>CouponList&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>    ClAlloc cla(cl-&gt;getAllocator());</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>    cl-&gt;~CouponList();</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>    cla.deallocate(cl, 1);</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>  };</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>}</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span> </div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>CouponList&lt;A&gt;* CouponList&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>  ClAlloc cla(coupons_.get_allocator());</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (cla.allocate(1)) CouponList&lt;A&gt;(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>}</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>CouponList&lt;A&gt;* CouponList&lt;A&gt;::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>  ClAlloc cla(coupons_.get_allocator());</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (cla.allocate(1)) CouponList&lt;A&gt;(*<span class="keyword">this</span>, tgtHllType);</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>}</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span> </div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>CouponList&lt;A&gt;* CouponList&lt;A&gt;::newList(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator) {</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>  <span class="keywordflow">if</span> (len &lt; hll_constants::LIST_INT_ARR_START) {</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input data length insufficient to hold CouponHashSet&quot;</span>);</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>  }</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span> </div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>  <span class="keyword">const</span> uint8_t* data = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(bytes);</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>  <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::LIST_PREINTS) {</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>  }</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>  <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>  }</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>  <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>  }</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span>  hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>  <span class="keywordflow">if</span> (mode != LIST) {</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling list constructor with non-list mode data&quot;</span>);</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>  }</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span> </div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>  <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span> </div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>  <span class="keyword">const</span> uint8_t lgK = data[hll_constants::LG_K_BYTE];</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> compact = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> emptyFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::EMPTY_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span> </div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>  <span class="keyword">const</span> uint32_t couponCount = data[hll_constants::LIST_COUNT_BYTE];</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>  <span class="keyword">const</span> uint32_t couponsInArray = (compact ? couponCount : (1 &lt;&lt; HllUtil&lt;A&gt;::computeLgArrInts(LIST, couponCount, lgK)));</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> expectedLength = hll_constants::LIST_INT_ARR_START + (couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>  <span class="keywordflow">if</span> (len &lt; expectedLength) {</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Byte array too short for sketch. Expected &quot;</span> + std::to_string(expectedLength)</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>                                + <span class="stringliteral">&quot;, found: &quot;</span> + std::to_string(len));</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>  }</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span> </div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>  ClAlloc cla(allocator);</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>  CouponList&lt;A&gt;* sketch = <span class="keyword">new</span> (cla.allocate(1)) CouponList&lt;A&gt;(lgK, tgtHllType, mode, allocator);</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>  sketch-&gt;couponCount_ = couponCount;</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>  sketch-&gt;putOutOfOrderFlag(oooFlag); <span class="comment">// should always be false for LIST</span></div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span> </div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>  <span class="keywordflow">if</span> (!emptyFlag) {</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>    <span class="comment">// only need to read valid coupons, unlike in stream case</span></div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>    std::memcpy(sketch-&gt;coupons_.data(), data + hll_constants::LIST_INT_ARR_START, couponCount * <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>  }</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>  </div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>  <span class="keywordflow">return</span> sketch;</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>}</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span> </div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>CouponList&lt;A&gt;* CouponList&lt;A&gt;::newList(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator) {</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span>  uint8_t listHeader[8];</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>  read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span> </div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::LIST_PREINTS) {</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>  }</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span>  }</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>  }</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span> </div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>  hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>  <span class="keywordflow">if</span> (mode != LIST) {</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling list constructor with non-list mode data&quot;</span>);</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span>  }</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span> </div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>  <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span> </div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span>  <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> compact = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> emptyFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::EMPTY_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span> </div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span>  ClAlloc cla(allocator);</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span>  CouponList&lt;A&gt;* sketch = <span class="keyword">new</span> (cla.allocate(1)) CouponList&lt;A&gt;(lgK, tgtHllType, mode, allocator);</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>  <span class="keyword">using </span>coupon_list_ptr = std::unique_ptr&lt;CouponList&lt;A&gt;, std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt;&gt;;</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>  coupon_list_ptr ptr(sketch, sketch-&gt;get_deleter());</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>  <span class="keyword">const</span> uint32_t couponCount = listHeader[hll_constants::LIST_COUNT_BYTE];</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span>  sketch-&gt;couponCount_ = couponCount;</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span>  sketch-&gt;putOutOfOrderFlag(oooFlag); <span class="comment">// should always be false for LIST</span></div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span> </div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span>  <span class="keywordflow">if</span> (!emptyFlag) {</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span>    <span class="comment">// For stream processing, need to read entire number written to stream so read</span></div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span>    <span class="comment">// pointer ends up set correctly.</span></div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span>    <span class="comment">// If not compact, still need to read empty items even though in order.</span></div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span>    <span class="keyword">const</span> uint32_t numToRead = (compact ? couponCount : <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(sketch-&gt;coupons_.size()));</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>    read(is, sketch-&gt;coupons_.data(), numToRead * <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span>  }</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span> </div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span>  <span class="keywordflow">if</span> (!is.good())</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span>    <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;error reading from std::istream&quot;</span>); </div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span> </div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>  <span class="keywordflow">return</span> ptr.release();</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>}</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span> </div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span><span class="keyword">auto</span> CouponList&lt;A&gt;::serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span> -&gt; vector_bytes {</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>  vector_bytes byteArr(sketchSizeBytes, 0, getAllocator());</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>  uint8_t* bytes = byteArr.data() + header_size_bytes;</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span> </div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>  bytes[hll_constants::PREAMBLE_INTS_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(getPreInts());</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span>  bytes[hll_constants::SER_VER_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(hll_constants::SER_VER);</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span>  bytes[hll_constants::FAMILY_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(hll_constants::FAMILY_ID);</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>  bytes[hll_constants::LG_K_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span>  bytes[hll_constants::LG_ARR_BYTE] = count_trailing_zeros_in_u32(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(coupons_.size()));</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>  bytes[hll_constants::FLAGS_BYTE] = this-&gt;makeFlagsByte(compact);</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>  bytes[hll_constants::LIST_COUNT_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(this-&gt;mode_ == LIST ? couponCount_ : 0);</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span>  bytes[hll_constants::MODE_BYTE] = this-&gt;makeModeByte();</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span> </div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span>  <span class="keywordflow">if</span> (this-&gt;mode_ == SET) {</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>    std::memcpy(bytes + hll_constants::HASH_SET_COUNT_INT, &amp;couponCount_, <span class="keyword">sizeof</span>(couponCount_));</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>  }</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span> </div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>  <span class="comment">// coupons</span></div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>  <span class="comment">// isCompact() is always false for now</span></div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> sw = (isCompact() ? 2 : 0) | (compact ? 1 : 0);</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>  <span class="keywordflow">switch</span> (sw) {</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>    <span class="keywordflow">case</span> 0: { <span class="comment">// src updatable, dst updatable</span></div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>      std::memcpy(bytes + getMemDataStart(), coupons_.data(), coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>      <span class="keywordflow">break</span>;</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>    }</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>    <span class="keywordflow">case</span> 1: { <span class="comment">// src updatable, dst compact</span></div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>      bytes += getMemDataStart(); <span class="comment">// reusing pointer for incremental writes</span></div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span>      <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *this) {</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>        std::memcpy(bytes, &amp;coupon, <span class="keyword">sizeof</span>(coupon));</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>        bytes += <span class="keyword">sizeof</span>(coupon);</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>      }</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>      <span class="keywordflow">break</span>;</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>    }</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span> </div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>    <span class="keywordflow">default</span>:</div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Impossible condition when serializing&quot;</span>);</div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>  }</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span> </div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span>  <span class="keywordflow">return</span> byteArr;</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span>}</div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span> </div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span><span class="keywordtype">void</span> CouponList&lt;A&gt;::serialize(std::ostream&amp; os, <span class="keyword">const</span> <span class="keywordtype">bool</span> compact)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span>  <span class="comment">// header</span></div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>  <span class="keyword">const</span> uint8_t preInts = getPreInts();</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span>  write(os, preInts);</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>  <span class="keyword">const</span> uint8_t serialVersion(hll_constants::SER_VER);</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>  write(os, serialVersion);</div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>  <span class="keyword">const</span> uint8_t familyId(hll_constants::FAMILY_ID);</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>  write(os, familyId);</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>  <span class="keyword">const</span> uint8_t lgKByte = this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>  write(os, lgKByte);</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>  <span class="keyword">const</span> uint8_t lgArrIntsByte = count_trailing_zeros_in_u32(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(coupons_.size()));</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>  write(os, lgArrIntsByte);</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>  <span class="keyword">const</span> uint8_t flagsByte = this-&gt;makeFlagsByte(compact);</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>  write(os, flagsByte);</div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span> </div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span>  <span class="keywordflow">if</span> (this-&gt;mode_ == LIST) {</div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span>    <span class="keyword">const</span> uint8_t listCount = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(couponCount_);</div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span>    write(os, listCount);</div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span>  } <span class="keywordflow">else</span> { <span class="comment">// mode == SET</span></div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span>      <span class="keyword">const</span> uint8_t unused = 0;</div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span>    write(os, unused);</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span>  }</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span> </div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span>  <span class="keyword">const</span> uint8_t modeByte = this-&gt;makeModeByte();</div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span>  write(os, modeByte);</div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span> </div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span>  <span class="keywordflow">if</span> (this-&gt;mode_ == SET) {</div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span>    <span class="comment">// writing as int, already stored as int</span></div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span>    write(os, couponCount_);</div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span>  }</div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span> </div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>  <span class="comment">// coupons</span></div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>  <span class="comment">// isCompact() is always false for now</span></div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> sw = (isCompact() ? 2 : 0) | (compact ? 1 : 0);</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span>  <span class="keywordflow">switch</span> (sw) {</div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span>    <span class="keywordflow">case</span> 0: { <span class="comment">// src updatable, dst updatable</span></div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span>      write(os, coupons_.data(), coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span>      <span class="keywordflow">break</span>;</div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span>    }</div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span>    <span class="keywordflow">case</span> 1: { <span class="comment">// src updatable, dst compact</span></div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span>      <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *this) {</div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span>        write(os, coupon);</div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>      }</div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span>      <span class="keywordflow">break</span>;</div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span>    }</div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span> </div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span>    <span class="keywordflow">default</span>:</div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Impossible condition when serializing&quot;</span>);</div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>  }</div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span>  </div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span>  <span class="keywordflow">return</span>;</div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span>}</div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span> </div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span>HllSketchImpl&lt;A&gt;* CouponList&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; coupons_.size(); ++i) { <span class="comment">// search for empty slot</span></div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>    <span class="keyword">const</span> uint32_t couponAtIdx = coupons_[i];</div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span>    <span class="keywordflow">if</span> (couponAtIdx == hll_constants::EMPTY) {</div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span>      coupons_[i] = coupon; <span class="comment">// the actual update</span></div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span>      ++couponCount_;</div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span>      <span class="keywordflow">if</span> (couponCount_ == <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(coupons_.size())) { <span class="comment">// array full</span></div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno">  276</span>        <span class="keywordflow">if</span> (this-&gt;lgConfigK_ &lt; 8) {</div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno">  277</span>          <span class="keywordflow">return</span> promoteHeapListOrSetToHll(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00278" name="l00278"></a><span class="lineno">  278</span>        }</div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno">  279</span>        <span class="keywordflow">return</span> promoteHeapListToSet(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00280" name="l00280"></a><span class="lineno">  280</span>      }</div>
-<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span>      <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
-<div class="line"><a id="l00282" name="l00282"></a><span class="lineno">  282</span>    }</div>
-<div class="line"><a id="l00283" name="l00283"></a><span class="lineno">  283</span>    <span class="comment">// cell not empty</span></div>
-<div class="line"><a id="l00284" name="l00284"></a><span class="lineno">  284</span>    <span class="keywordflow">if</span> (couponAtIdx == coupon) {</div>
-<div class="line"><a id="l00285" name="l00285"></a><span class="lineno">  285</span>      <span class="keywordflow">return</span> <span class="keyword">this</span>; <span class="comment">// duplicate</span></div>
-<div class="line"><a id="l00286" name="l00286"></a><span class="lineno">  286</span>    }</div>
-<div class="line"><a id="l00287" name="l00287"></a><span class="lineno">  287</span>    <span class="comment">// cell not empty and not a duplicate, continue</span></div>
-<div class="line"><a id="l00288" name="l00288"></a><span class="lineno">  288</span>  }</div>
-<div class="line"><a id="l00289" name="l00289"></a><span class="lineno">  289</span>  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Array invalid: no empties and no duplicates&quot;</span>);</div>
-<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span>}</div>
-<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span> </div>
-<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00293" name="l00293"></a><span class="lineno">  293</span><span class="keywordtype">double</span> CouponList&lt;A&gt;::getCompositeEstimate()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> getEstimate(); }</div>
-<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span> </div>
-<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span><span class="keywordtype">double</span> CouponList&lt;A&gt;::getEstimate()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation&lt;A&gt;::usingXAndYTables(couponCount_);</div>
-<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span>  <span class="keywordflow">return</span> fmax(est, couponCount_);</div>
-<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span>}</div>
-<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span> </div>
-<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span><span class="keywordtype">double</span> CouponList&lt;A&gt;::getLowerBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span>  HllUtil&lt;A&gt;::checkNumStdDev(numStdDev);</div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation&lt;A&gt;::usingXAndYTables(couponCount_);</div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> tmp = est / (1.0 + (numStdDev * hll_constants::COUPON_RSE));</div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno">  306</span>  <span class="keywordflow">return</span> fmax(tmp, couponCount_);</div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span>}</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span> </div>
-<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span><span class="keywordtype">double</span> CouponList&lt;A&gt;::getUpperBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span>  HllUtil&lt;A&gt;::checkNumStdDev(numStdDev);</div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation&lt;A&gt;::usingXAndYTables(couponCount_);</div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> tmp = est / (1.0 - (numStdDev * hll_constants::COUPON_RSE));</div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span>  <span class="keywordflow">return</span> fmax(tmp, couponCount_);</div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span>}</div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno">  316</span> </div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno">  317</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno">  318</span><span class="keywordtype">bool</span> CouponList&lt;A&gt;::isEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> getCouponCount() == 0; }</div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span> </div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno">  320</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00321" name="l00321"></a><span class="lineno">  321</span>uint32_t CouponList&lt;A&gt;::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno">  322</span>  <span class="keywordflow">return</span> getMemDataStart() + <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(coupons_.size()) * <span class="keyword">sizeof</span>(uint32_t);</div>
-<div class="line"><a id="l00323" name="l00323"></a><span class="lineno">  323</span>}</div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno">  324</span> </div>
-<div class="line"><a id="l00325" name="l00325"></a><span class="lineno">  325</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00326" name="l00326"></a><span class="lineno">  326</span>uint32_t CouponList&lt;A&gt;::getCouponCount()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00327" name="l00327"></a><span class="lineno">  327</span>  <span class="keywordflow">return</span> couponCount_;</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno">  328</span>}</div>
-<div class="line"><a id="l00329" name="l00329"></a><span class="lineno">  329</span> </div>
-<div class="line"><a id="l00330" name="l00330"></a><span class="lineno">  330</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno">  331</span>uint32_t CouponList&lt;A&gt;::getCompactSerializationBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno">  332</span>  <span class="keywordflow">return</span> getMemDataStart() + (couponCount_ &lt;&lt; 2);</div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno">  333</span>}</div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno">  334</span> </div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno">  335</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span>uint32_t CouponList&lt;A&gt;::getMemDataStart()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno">  337</span>  <span class="keywordflow">return</span> hll_constants::LIST_INT_ARR_START;</div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno">  338</span>}</div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno">  339</span> </div>
-<div class="line"><a id="l00340" name="l00340"></a><span class="lineno">  340</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00341" name="l00341"></a><span class="lineno">  341</span>uint8_t CouponList&lt;A&gt;::getPreInts()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00342" name="l00342"></a><span class="lineno">  342</span>  <span class="keywordflow">return</span> hll_constants::LIST_PREINTS;</div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno">  343</span>}</div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno">  344</span> </div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno">  345</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno">  346</span><span class="keywordtype">bool</span> CouponList&lt;A&gt;::isCompact()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno">  347</span> </div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno">  348</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00349" name="l00349"></a><span class="lineno">  349</span><span class="keywordtype">bool</span> CouponList&lt;A&gt;::isOutOfOrderFlag()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> oooFlag_; }</div>
-<div class="line"><a id="l00350" name="l00350"></a><span class="lineno">  350</span> </div>
-<div class="line"><a id="l00351" name="l00351"></a><span class="lineno">  351</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00352" name="l00352"></a><span class="lineno">  352</span><span class="keywordtype">void</span> CouponList&lt;A&gt;::putOutOfOrderFlag(<span class="keywordtype">bool</span> oooFlag) {</div>
-<div class="line"><a id="l00353" name="l00353"></a><span class="lineno">  353</span>  oooFlag_ = oooFlag;</div>
-<div class="line"><a id="l00354" name="l00354"></a><span class="lineno">  354</span>}</div>
-<div class="line"><a id="l00355" name="l00355"></a><span class="lineno">  355</span> </div>
-<div class="line"><a id="l00356" name="l00356"></a><span class="lineno">  356</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00357" name="l00357"></a><span class="lineno">  357</span>A CouponList&lt;A&gt;::getAllocator()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00358" name="l00358"></a><span class="lineno">  358</span>  <span class="keywordflow">return</span> coupons_.get_allocator();</div>
-<div class="line"><a id="l00359" name="l00359"></a><span class="lineno">  359</span>}</div>
-<div class="line"><a id="l00360" name="l00360"></a><span class="lineno">  360</span> </div>
-<div class="line"><a id="l00361" name="l00361"></a><span class="lineno">  361</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00362" name="l00362"></a><span class="lineno">  362</span>HllSketchImpl&lt;A&gt;* CouponList&lt;A&gt;::promoteHeapListToSet(CouponList&amp; list) {</div>
-<div class="line"><a id="l00363" name="l00363"></a><span class="lineno">  363</span>  <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::promoteListToSet(list);</div>
-<div class="line"><a id="l00364" name="l00364"></a><span class="lineno">  364</span>}</div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno">  365</span> </div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno">  366</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00367" name="l00367"></a><span class="lineno">  367</span>HllSketchImpl&lt;A&gt;* CouponList&lt;A&gt;::promoteHeapListOrSetToHll(CouponList&amp; src) {</div>
-<div class="line"><a id="l00368" name="l00368"></a><span class="lineno">  368</span>  <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::promoteListOrSetToHll(src);</div>
-<div class="line"><a id="l00369" name="l00369"></a><span class="lineno">  369</span>}</div>
-<div class="line"><a id="l00370" name="l00370"></a><span class="lineno">  370</span> </div>
-<div class="line"><a id="l00371" name="l00371"></a><span class="lineno">  371</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00372" name="l00372"></a><span class="lineno">  372</span>coupon_iterator&lt;A&gt; CouponList&lt;A&gt;::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00373" name="l00373"></a><span class="lineno">  373</span>  <span class="keywordflow">return</span> coupon_iterator&lt;A&gt;(coupons_.data(), coupons_.size(), 0, all);</div>
-<div class="line"><a id="l00374" name="l00374"></a><span class="lineno">  374</span>}</div>
-<div class="line"><a id="l00375" name="l00375"></a><span class="lineno">  375</span> </div>
-<div class="line"><a id="l00376" name="l00376"></a><span class="lineno">  376</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00377" name="l00377"></a><span class="lineno">  377</span>coupon_iterator&lt;A&gt; CouponList&lt;A&gt;::end()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00378" name="l00378"></a><span class="lineno">  378</span>  <span class="keywordflow">return</span> coupon_iterator&lt;A&gt;(coupons_.data(), coupons_.size(), coupons_.size(), <span class="keyword">false</span>);</div>
-<div class="line"><a id="l00379" name="l00379"></a><span class="lineno">  379</span>}</div>
-<div class="line"><a id="l00380" name="l00380"></a><span class="lineno">  380</span> </div>
-<div class="line"><a id="l00381" name="l00381"></a><span class="lineno">  381</span>}</div>
-<div class="line"><a id="l00382" name="l00382"></a><span class="lineno">  382</span> </div>
-<div class="line"><a id="l00383" name="l00383"></a><span class="lineno">  383</span><span class="preprocessor">#endif </span><span class="comment">// _COUPONLIST_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _COUPONLIST_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _COUPONLIST_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;CouponList.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;CubicInterpolation.hpp&quot;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;HllUtil.hpp&quot;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;count_zeros.hpp&quot;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;CouponList&lt;A&gt;::CouponList(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode, <span class="keyword">const</span> A&amp; allocator):</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;HllSketchImpl&lt;A&gt;(lgConfigK, tgtHllType, mode, false),</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;couponCount_(0),</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;oooFlag_(false),</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;coupons_(1ULL &lt;&lt; (mode == hll_mode::LIST ? hll_constants::LG_INIT_LIST_SIZE : hll_constants::LG_INIT_SET_SIZE), 0, allocator)</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;{}</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;CouponList&lt;A&gt;::CouponList(<span class="keyword">const</span> CouponList&amp; that, <span class="keyword">const</span> target_hll_type tgtHllType):</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;HllSketchImpl&lt;A&gt;(that.lgConfigK_, tgtHllType, that.mode_, false),</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;couponCount_(that.couponCount_),</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;oooFlag_(that.oooFlag_),</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;coupons_(that.coupons_)</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;{}</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; CouponList&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    CouponList&lt;A&gt;* cl = <span class="keyword">static_cast&lt;</span>CouponList&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    ClAlloc cla(cl-&gt;getAllocator());</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    cl-&gt;~CouponList();</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    cla.deallocate(cl, 1);</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  };</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;}</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160; </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;CouponList&lt;A&gt;* CouponList&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  ClAlloc cla(coupons_.get_allocator());</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (cla.allocate(1)) CouponList&lt;A&gt;(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;}</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;CouponList&lt;A&gt;* CouponList&lt;A&gt;::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  ClAlloc cla(coupons_.get_allocator());</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (cla.allocate(1)) CouponList&lt;A&gt;(*<span class="keyword">this</span>, tgtHllType);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;}</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;CouponList&lt;A&gt;* CouponList&lt;A&gt;::newList(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="keywordflow">if</span> (len &lt; hll_constants::LIST_INT_ARR_START) {</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input data length insufficient to hold CouponHashSet&quot;</span>);</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  }</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160; </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <span class="keyword">const</span> uint8_t* data = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(bytes);</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::LIST_PREINTS) {</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  }</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  }</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160; </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="keywordflow">if</span> (mode != LIST) {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling list constructor with non-list mode data&quot;</span>);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160; </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <span class="keyword">const</span> uint8_t lgK = data[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> compact = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> emptyFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::EMPTY_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160; </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  <span class="keyword">const</span> uint32_t couponCount = data[hll_constants::LIST_COUNT_BYTE];</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="keyword">const</span> uint32_t couponsInArray = (compact ? couponCount : (1 &lt;&lt; HllUtil&lt;A&gt;::computeLgArrInts(LIST, couponCount, lgK)));</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> expectedLength = hll_constants::LIST_INT_ARR_START + (couponsInArray * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="keywordflow">if</span> (len &lt; expectedLength) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Byte array too short for sketch. Expected &quot;</span> + std::to_string(expectedLength)</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;                                + <span class="stringliteral">&quot;, found: &quot;</span> + std::to_string(len));</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  ClAlloc cla(allocator);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  CouponList&lt;A&gt;* sketch = <span class="keyword">new</span> (cla.allocate(1)) CouponList&lt;A&gt;(lgK, tgtHllType, mode, allocator);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  sketch-&gt;couponCount_ = couponCount;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  sketch-&gt;putOutOfOrderFlag(oooFlag); <span class="comment">// should always be false for LIST</span></div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160; </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  <span class="keywordflow">if</span> (!emptyFlag) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="comment">// only need to read valid coupons, unlike in stream case</span></div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    std::memcpy(sketch-&gt;coupons_.data(), data + hll_constants::LIST_INT_ARR_START, couponCount * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  }</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  </div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="keywordflow">return</span> sketch;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;}</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160; </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;CouponList&lt;A&gt;* CouponList&lt;A&gt;::newList(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator) {</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  uint8_t listHeader[8];</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160; </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::LIST_PREINTS) {</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  }</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  }</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  }</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160; </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="keywordflow">if</span> (mode != LIST) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling list constructor with non-list mode data&quot;</span>);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160; </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160; </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> compact = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> emptyFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::EMPTY_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160; </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  ClAlloc cla(allocator);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  CouponList&lt;A&gt;* sketch = <span class="keyword">new</span> (cla.allocate(1)) CouponList&lt;A&gt;(lgK, tgtHllType, mode, allocator);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <span class="keyword">using</span> coupon_list_ptr = std::unique_ptr&lt;CouponList&lt;A&gt;, std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt;&gt;;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  coupon_list_ptr ptr(sketch, sketch-&gt;get_deleter());</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  <span class="keyword">const</span> uint32_t couponCount = listHeader[hll_constants::LIST_COUNT_BYTE];</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;  sketch-&gt;couponCount_ = couponCount;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  sketch-&gt;putOutOfOrderFlag(oooFlag); <span class="comment">// should always be false for LIST</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160; </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  <span class="keywordflow">if</span> (!emptyFlag) {</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="comment">// For stream processing, need to read entire number written to stream so read</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <span class="comment">// pointer ends up set correctly.</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <span class="comment">// If not compact, still need to read empty items even though in order.</span></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <span class="keyword">const</span> uint32_t numToRead = (compact ? couponCount : <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(sketch-&gt;coupons_.size()));</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    read(is, sketch-&gt;coupons_.data(), numToRead * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;  }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;  <span class="keywordflow">if</span> (!is.good())</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;error reading from std::istream&quot;</span>); </div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160; </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="keywordflow">return</span> ptr.release();</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;}</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160; </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="keyword">auto</span> CouponList&lt;A&gt;::serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span> -&gt; vector_bytes {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;  vector_bytes byteArr(sketchSizeBytes, 0, getAllocator());</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  uint8_t* bytes = byteArr.data() + header_size_bytes;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160; </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  bytes[hll_constants::PREAMBLE_INTS_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(getPreInts());</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;  bytes[hll_constants::SER_VER_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(hll_constants::SER_VER);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  bytes[hll_constants::FAMILY_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(hll_constants::FAMILY_ID);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  bytes[hll_constants::LG_K_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(this-&gt;lgConfigK_);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  bytes[hll_constants::LG_ARR_BYTE] = count_trailing_zeros_in_u32(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(coupons_.size()));</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  bytes[hll_constants::FLAGS_BYTE] = this-&gt;makeFlagsByte(compact);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;  bytes[hll_constants::LIST_COUNT_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(this-&gt;mode_ == LIST ? couponCount_ : 0);</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  bytes[hll_constants::MODE_BYTE] = this-&gt;makeModeByte();</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160; </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;  <span class="keywordflow">if</span> (this-&gt;mode_ == SET) {</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    std::memcpy(bytes + hll_constants::HASH_SET_COUNT_INT, &amp;couponCount_, <span class="keyword">sizeof</span>(couponCount_));</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160; </div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  <span class="comment">// coupons</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  <span class="comment">// isCompact() is always false for now</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> sw = (isCompact() ? 2 : 0) | (compact ? 1 : 0);</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="keywordflow">switch</span> (sw) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <span class="keywordflow">case</span> 0: { <span class="comment">// src updatable, dst updatable</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;      std::memcpy(bytes + getMemDataStart(), coupons_.data(), coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    }</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <span class="keywordflow">case</span> 1: { <span class="comment">// src updatable, dst compact</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;      bytes += getMemDataStart(); <span class="comment">// reusing pointer for incremental writes</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;      <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *<span class="keyword">this</span>) {</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        std::memcpy(bytes, &amp;coupon, <span class="keyword">sizeof</span>(coupon));</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        bytes += <span class="keyword">sizeof</span>(coupon);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;      }</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160; </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Impossible condition when serializing&quot;</span>);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160; </div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;  <span class="keywordflow">return</span> byteArr;</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;}</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160; </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="keywordtype">void</span> CouponList&lt;A&gt;::serialize(std::ostream&amp; os, <span class="keyword">const</span> <span class="keywordtype">bool</span> compact)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  <span class="comment">// header</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  <span class="keyword">const</span> uint8_t preInts = getPreInts();</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  write(os, preInts);</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  <span class="keyword">const</span> uint8_t serialVersion(hll_constants::SER_VER);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  write(os, serialVersion);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  <span class="keyword">const</span> uint8_t familyId(hll_constants::FAMILY_ID);</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  write(os, familyId);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  <span class="keyword">const</span> uint8_t lgKByte = this-&gt;lgConfigK_;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  write(os, lgKByte);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;  <span class="keyword">const</span> uint8_t lgArrIntsByte = count_trailing_zeros_in_u32(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(coupons_.size()));</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  write(os, lgArrIntsByte);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;  <span class="keyword">const</span> uint8_t flagsByte = this-&gt;makeFlagsByte(compact);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  write(os, flagsByte);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160; </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  <span class="keywordflow">if</span> (this-&gt;mode_ == LIST) {</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;    <span class="keyword">const</span> uint8_t listCount = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(couponCount_);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    write(os, listCount);</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;  } <span class="keywordflow">else</span> { <span class="comment">// mode == SET</span></div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;      <span class="keyword">const</span> uint8_t unused = 0;</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    write(os, unused);</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  }</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160; </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;  <span class="keyword">const</span> uint8_t modeByte = this-&gt;makeModeByte();</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;  write(os, modeByte);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160; </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <span class="keywordflow">if</span> (this-&gt;mode_ == SET) {</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="comment">// writing as int, already stored as int</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    write(os, couponCount_);</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  }</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160; </div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  <span class="comment">// coupons</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  <span class="comment">// isCompact() is always false for now</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> sw = (isCompact() ? 2 : 0) | (compact ? 1 : 0);</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  <span class="keywordflow">switch</span> (sw) {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="keywordflow">case</span> 0: { <span class="comment">// src updatable, dst updatable</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;      write(os, coupons_.data(), coupons_.size() * <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;    }</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keywordflow">case</span> 1: { <span class="comment">// src updatable, dst compact</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;      <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *<span class="keyword">this</span>) {</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        write(os, coupon);</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;      }</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    }</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160; </div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Impossible condition when serializing&quot;</span>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  }</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;  </div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;  <span class="keywordflow">return</span>;</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;}</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160; </div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;HllSketchImpl&lt;A&gt;* CouponList&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; coupons_.size(); ++i) { <span class="comment">// search for empty slot</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    <span class="keyword">const</span> uint32_t couponAtIdx = coupons_[i];</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    <span class="keywordflow">if</span> (couponAtIdx == hll_constants::EMPTY) {</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;      coupons_[i] = coupon; <span class="comment">// the actual update</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;      ++couponCount_;</div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;      <span class="keywordflow">if</span> (couponCount_ == <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(coupons_.size())) { <span class="comment">// array full</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        <span class="keywordflow">if</span> (this-&gt;lgConfigK_ &lt; 8) {</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;          <span class="keywordflow">return</span> promoteHeapListOrSetToHll(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        }</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        <span class="keywordflow">return</span> promoteHeapListToSet(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;      }</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    }</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    <span class="comment">// cell not empty</span></div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    <span class="keywordflow">if</span> (couponAtIdx == coupon) {</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">this</span>; <span class="comment">// duplicate</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    <span class="comment">// cell not empty and not a duplicate, continue</span></div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;  }</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;  <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Array invalid: no empties and no duplicates&quot;</span>);</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;}</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160; </div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<span class="keywordtype">double</span> CouponList&lt;A&gt;::getCompositeEstimate()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> getEstimate(); }</div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160; </div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;<span class="keywordtype">double</span> CouponList&lt;A&gt;::getEstimate()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation&lt;A&gt;::usingXAndYTables(couponCount_);</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;  <span class="keywordflow">return</span> fmax(est, couponCount_);</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;}</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160; </div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<span class="keywordtype">double</span> CouponList&lt;A&gt;::getLowerBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;  HllUtil&lt;A&gt;::checkNumStdDev(numStdDev);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation&lt;A&gt;::usingXAndYTables(couponCount_);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">double</span> tmp = est / (1.0 + (numStdDev * hll_constants::COUPON_RSE));</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  <span class="keywordflow">return</span> fmax(tmp, couponCount_);</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;}</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160; </div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<span class="keywordtype">double</span> CouponList&lt;A&gt;::getUpperBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;  HllUtil&lt;A&gt;::checkNumStdDev(numStdDev);</div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">double</span> est = CubicInterpolation&lt;A&gt;::usingXAndYTables(couponCount_);</div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">double</span> tmp = est / (1.0 - (numStdDev * hll_constants::COUPON_RSE));</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;  <span class="keywordflow">return</span> fmax(tmp, couponCount_);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;}</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160; </div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;<span class="keywordtype">bool</span> CouponList&lt;A&gt;::isEmpty()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> getCouponCount() == 0; }</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160; </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;uint32_t CouponList&lt;A&gt;::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;  <span class="keywordflow">return</span> getMemDataStart() + <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(coupons_.size()) * <span class="keyword">sizeof</span>(uint32_t);</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;}</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160; </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;uint32_t CouponList&lt;A&gt;::getCouponCount()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;  <span class="keywordflow">return</span> couponCount_;</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;}</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160; </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;uint32_t CouponList&lt;A&gt;::getCompactSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;  <span class="keywordflow">return</span> getMemDataStart() + (couponCount_ &lt;&lt; 2);</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;}</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160; </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;uint32_t CouponList&lt;A&gt;::getMemDataStart()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;  <span class="keywordflow">return</span> hll_constants::LIST_INT_ARR_START;</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;}</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160; </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;uint8_t CouponList&lt;A&gt;::getPreInts()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;  <span class="keywordflow">return</span> hll_constants::LIST_PREINTS;</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;}</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160; </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;<span class="keywordtype">bool</span> CouponList&lt;A&gt;::isCompact()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160; </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="keywordtype">bool</span> CouponList&lt;A&gt;::isOutOfOrderFlag()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> oooFlag_; }</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160; </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;<span class="keywordtype">void</span> CouponList&lt;A&gt;::putOutOfOrderFlag(<span class="keywordtype">bool</span> oooFlag) {</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;  oooFlag_ = oooFlag;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;}</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160; </div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;A CouponList&lt;A&gt;::getAllocator()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;  <span class="keywordflow">return</span> coupons_.get_allocator();</div>
+<div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;}</div>
+<div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160; </div>
+<div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;HllSketchImpl&lt;A&gt;* CouponList&lt;A&gt;::promoteHeapListToSet(CouponList&amp; list) {</div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;  <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::promoteListToSet(list);</div>
+<div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;}</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160; </div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;HllSketchImpl&lt;A&gt;* CouponList&lt;A&gt;::promoteHeapListOrSetToHll(CouponList&amp; src) {</div>
+<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;  <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::promoteListOrSetToHll(src);</div>
+<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;}</div>
+<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160; </div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;coupon_iterator&lt;A&gt; CouponList&lt;A&gt;::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;  <span class="keywordflow">return</span> coupon_iterator&lt;A&gt;(coupons_.data(), coupons_.size(), 0, all);</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;}</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160; </div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;coupon_iterator&lt;A&gt; CouponList&lt;A&gt;::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;  <span class="keywordflow">return</span> coupon_iterator&lt;A&gt;(coupons_.data(), coupons_.size(), coupons_.size(), <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;}</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160; </div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;}</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160; </div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _COUPONLIST_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition:</b> hll.hpp:72</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/CouponList_8hpp_source.html b/docs/master/CouponList_8hpp_source.html
index 8d4988f..c5da8be 100644
--- a/docs/master/CouponList_8hpp_source.html
+++ b/docs/master/CouponList_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/CouponList.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,107 +65,108 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">CouponList.hpp</div></div>
+  <div class="headertitle">
+<div class="title">CouponList.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _COUPONLIST_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _COUPONLIST_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;HllSketchImpl.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="preprocessor">#include &quot;coupon_iterator.hpp&quot;</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#include &lt;iostream&gt;</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="keyword">class </span>HllSketchImplFactory;</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span> </div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="keyword">class </span>CouponList : <span class="keyword">public</span> HllSketchImpl&lt;A&gt; {</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>  <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>    <span class="keyword">using </span>vector_bytes = std::vector&lt;uint8_t, typename std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;uint8_t&gt;&gt;;</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>    CouponList(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>    CouponList(<span class="keyword">const</span> CouponList&amp; that, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span> </div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>    <span class="keyword">static</span> CouponList* newList(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>    <span class="keyword">static</span> CouponList* newList(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>    <span class="keyword">virtual</span> vector_bytes serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> serialize(std::ostream&amp; os, <span class="keywordtype">bool</span> compact) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span> </div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>    <span class="keyword">virtual</span> ~CouponList() = <span class="keywordflow">default</span>;</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span> </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>    <span class="keyword">virtual</span> CouponList* copy() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>    <span class="keyword">virtual</span> CouponList* copyAs(<a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span> </div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon);</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>    <span class="keyword">virtual</span> <span class="keywordtype">double</span> getEstimate() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>    <span class="keyword">virtual</span> <span class="keywordtype">double</span> getCompositeEstimate() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>    <span class="keyword">virtual</span> <span class="keywordtype">double</span> getUpperBound(uint8_t numStdDev) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>    <span class="keyword">virtual</span> <span class="keywordtype">double</span> getLowerBound(uint8_t numStdDev) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span> </div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isEmpty() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>    <span class="keyword">virtual</span> uint32_t getCouponCount() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span> </div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>    coupon_iterator&lt;A&gt; begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>    coupon_iterator&lt;A&gt; end() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span> </div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>  <span class="keyword">protected</span>:</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>    <span class="keyword">using </span>ClAlloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;CouponList&lt;A&gt;&gt;;</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span> </div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>    <span class="keyword">using </span>vector_int = std::vector&lt;uint32_t, typename std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;uint32_t&gt;&gt;;</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span> </div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>    HllSketchImpl&lt;A&gt;* promoteHeapListToSet(CouponList&amp; list);</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>    HllSketchImpl&lt;A&gt;* promoteHeapListOrSetToHll(CouponList&amp; src);</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span> </div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>    <span class="keyword">virtual</span> uint32_t getUpdatableSerializationBytes() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>    <span class="keyword">virtual</span> uint32_t getCompactSerializationBytes() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>    <span class="keyword">virtual</span> uint32_t getMemDataStart() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>    <span class="keyword">virtual</span> uint8_t getPreInts() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isCompact() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isOutOfOrderFlag() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>    <span class="keyword">virtual</span> <span class="keywordtype">void</span> putOutOfOrderFlag(<span class="keywordtype">bool</span> oooFlag);</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span> </div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>    <span class="keyword">virtual</span> A getAllocator() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span> </div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>    uint32_t couponCount_;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>    <span class="keywordtype">bool</span> oooFlag_;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>    vector_int coupons_;</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span> </div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>    <span class="keyword">friend</span> <span class="keyword">class </span>HllSketchImplFactory&lt;A&gt;;</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>};</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span> </div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>}</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span> </div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span><span class="preprocessor">#endif </span><span class="comment">/* _COUPONLIST_HPP_ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _COUPONLIST_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _COUPONLIST_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;HllSketchImpl.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;coupon_iterator.hpp&quot;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">class </span>HllSketchImplFactory;</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">class </span>CouponList : <span class="keyword">public</span> HllSketchImpl&lt;A&gt; {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keyword">using</span> vector_bytes = std::vector&lt;uint8_t, typename std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;uint8_t&gt;&gt;;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    CouponList(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, hll_mode mode, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    CouponList(<span class="keyword">const</span> CouponList&amp; that, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keyword">static</span> CouponList* newList(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">static</span> CouponList* newList(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="keyword">virtual</span> vector_bytes serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> serialize(std::ostream&amp; os, <span class="keywordtype">bool</span> compact) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keyword">virtual</span> ~CouponList() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="keyword">virtual</span> CouponList* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="keyword">virtual</span> CouponList* copyAs(<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">double</span> getEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">double</span> getCompositeEstimate() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">double</span> getUpperBound(uint8_t numStdDev) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">double</span> getLowerBound(uint8_t numStdDev) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isEmpty() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="keyword">virtual</span> uint32_t getCouponCount() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    coupon_iterator&lt;A&gt; begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    coupon_iterator&lt;A&gt; end() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  <span class="keyword">protected</span>:</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <span class="keyword">using</span> ClAlloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;CouponList&lt;A&gt;&gt;;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160; </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keyword">using</span> vector_int = std::vector&lt;uint32_t, typename std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;uint32_t&gt;&gt;;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160; </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    HllSketchImpl&lt;A&gt;* promoteHeapListToSet(CouponList&amp; list);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    HllSketchImpl&lt;A&gt;* promoteHeapListOrSetToHll(CouponList&amp; src);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keyword">virtual</span> uint32_t getUpdatableSerializationBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keyword">virtual</span> uint32_t getCompactSerializationBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keyword">virtual</span> uint32_t getMemDataStart() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keyword">virtual</span> uint8_t getPreInts() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isCompact() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isOutOfOrderFlag() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keyword">virtual</span> <span class="keywordtype">void</span> putOutOfOrderFlag(<span class="keywordtype">bool</span> oooFlag);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160; </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keyword">virtual</span> A getAllocator() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160; </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    uint32_t couponCount_;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keywordtype">bool</span> oooFlag_;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    vector_int coupons_;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160; </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="keyword">friend</span> <span class="keyword">class </span>HllSketchImplFactory&lt;A&gt;;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;};</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;}</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160; </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _COUPONLIST_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition:</b> hll.hpp:72</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/CubicInterpolation-internal_8hpp_source.html b/docs/master/CubicInterpolation-internal_8hpp_source.html
index dc0653a..1b87f24 100644
--- a/docs/master/CubicInterpolation-internal_8hpp_source.html
+++ b/docs/master/CubicInterpolation-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/CubicInterpolation-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,236 +65,237 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">CubicInterpolation-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">CubicInterpolation-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;CubicInterpolation.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &lt;string&gt;</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtyp [...]
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span> </div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="keyword">static</span> <span class="keywordtype">double</span> cubicInterpolate(<span class="keyword">const</span> <span class="keywordtype">double</span> x0, <span class="keyword">const</span> <span class="keywordtype">double</span> y0, <span class="keyword">const</span> <span class="keywordtype">double</span> x1, <span class="keyword">const</span> <span class="keywordtype">double</span> y1,</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>                               <span class="keyword">const</span> <span class="keywordtype">double</span> x2, <span class="keyword">const</span> <span class="keywordtype">double</span> y2, <span class="keyword">const</span> <span class="keywordtype">double</span> x3, <span class="keyword">const</span> <span class="keywordtype">double</span> y3, <span class="keyword">const</span> <span class="keywordtype"> [...]
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span> </div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span><span class="keyword">static</span> <span class="keywordtype">int</span> findStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span> </div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span><span class="keyword">static</span> <span class="keywordtype">int</span> recursiveFindStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> l, <span class="keyword">const</span> <span class="keywordtype">int</span> r, <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span> </div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span><span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yStride,</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>                                             <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span> </div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span><span class="keyword">const</span> <span class="keywordtype">int</span> numEntries = 40;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span> </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span><span class="comment">//Computed for Coupon lgK = 26 ONLY. Designed for the cubic interpolator function.</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span><span class="keyword">const</span> <span class="keywordtype">double</span> xArrComputed[numEntries] = {</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>    0.0, 1.0, 20.0, 400.0,</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>    8000.0, 160000.0, 300000.0, 600000.0,</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>    900000.0, 1200000.0, 1500000.0, 1800000.0,</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>    2100000.0, 2400000.0, 2700000.0, 3000000.0,</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>    3300000.0, 3600000.0, 3900000.0, 4200000.0,</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>    4500000.0, 4800000.0, 5100000.0, 5400000.0,</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>    5700000.0, 6000000.0, 6300000.0, 6600000.0,</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>    6900000.0, 7200000.0, 7500000.0, 7800000.0,</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>    8100000.0, 8400000.0, 8700000.0, 9000000.0,</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>    9300000.0, 9600000.0, 9900000.0, 10200000.0</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>};</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span> </div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span><span class="comment">//Computed for Coupon lgK = 26 ONLY. Designed for the cubic interpolator function.</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span><span class="keyword">const</span> <span class="keywordtype">double</span> yArrComputed[numEntries] =  {</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>    0.0000000000000000, 1.0000000000000000, 20.0000009437402611, 400.0003963713384110,</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>    8000.1589294602090376, 160063.6067763759638183, 300223.7071597663452849, 600895.5933856170158833,</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>    902016.8065120954997838, 1203588.4983199508860707, 1505611.8245524743106216, 1808087.9449319066479802,</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>    2111018.0231759352609515, 2414403.2270142501220107, 2718244.7282051891088486, 3022543.7025524540804327,</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>    3327301.3299219091422856, 3632518.7942584538832307, 3938197.2836029687896371, 4244337.9901093561202288,</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>    4550942.1100616492331028, 4858010.8438911894336343, 5165545.3961938973516226, 5473546.9757476449012756,</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>    5782016.7955296505242586, 6090956.0727340159937739, 6400366.0287892958149314, 6710247.8893762007355690,</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>    7020602.8844453142955899, 7331432.2482349723577499, 7642737.2192891482263803, 7954519.0404754765331745,</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>    8266778.9590033423155546, 8579518.2264420464634895, 8892738.0987390466034412, 9206439.8362383283674717,</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>    9520624.7036988288164139, 9835293.9703129194676876, 10150448.9097250290215015, 10466090.8000503256917000</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>};</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span><span class="keywordtype">double</span> CubicInterpolation&lt;A&gt;::usingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>  <span class="keywordflow">return</span> usingXAndYTables(xArrComputed, yArrComputed, numEntries, x);</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>}</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span> </div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span><span class="keywordtype">double</span> CubicInterpolation&lt;A&gt;::usingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[],</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>                                            <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>  <span class="keywordtype">int</span> offset;</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>  <span class="keywordflow">if</span> (x &lt; xArr[0] || x &gt; xArr[len-1]) {</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;x value out of range: &quot;</span> + std::to_string(x));</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>  }</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span> </div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>  <span class="keywordflow">if</span> (x ==  xArr[len-1]) { <span class="comment">// corner case</span></div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>    <span class="keywordflow">return</span> (yArr[len-1]);</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>  }</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span> </div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>  offset = findStraddle&lt;A&gt;(xArr, len, x);</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>  <span class="keywordflow">if</span> (offset &lt; 0 &amp;&amp; offset &gt; len-2) {</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;offset must be &gt;= 0 and &lt;= &quot;</span> + std::to_string(len) + <span class="stringliteral">&quot;-2&quot;</span>);</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>  }</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span> </div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>  <span class="keywordflow">if</span> (offset == 0) { <span class="comment">// corner case</span></div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>    <span class="keywordflow">return</span> (interpolateUsingXAndYTables&lt;A&gt;(xArr, yArr, (offset-0), x));</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>  }</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (offset == numEntries-2) { <span class="comment">// corner case</span></div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>    <span class="keywordflow">return</span> (interpolateUsingXAndYTables&lt;A&gt;(xArr, yArr, (offset-2), x));</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>  }</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>  <span class="comment">// main case</span></div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>  <span class="keywordflow">return</span> (interpolateUsingXAndYTables&lt;A&gt;(xArr, yArr, (offset-1), x));</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>}</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span> </div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span><span class="comment">// In C: again-two-registers cubic_interpolate_aux L1368</span></div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span><span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[],</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>                                          <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>    <span class="keywordflow">return</span> (cubicInterpolate&lt;A&gt;(xArr[offset+0], yArr[offset+0],</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>                        xArr[offset+1], yArr[offset+1],</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>                        xArr[offset+2], yArr[offset+2],</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>                        xArr[offset+3], yArr[offset+3],</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>                        x) );</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>}</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span> </div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span><span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> cubicInterpolate(<span class="keyword">const</span> <span class="keywordtype">double</span> x0, <span class="keyword">const</span> <span class="keywordtype">double</span> y0,</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span>                                      <span class="keyword">const</span> <span class="keywordtype">double</span> x1, <span class="keyword">const</span> <span class="keywordtype">double</span> y1,</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>                                      <span class="keyword">const</span> <span class="keywordtype">double</span> x2, <span class="keyword">const</span> <span class="keywordtype">double</span> y2,</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span>                                      <span class="keyword">const</span> <span class="keywordtype">double</span> x3, <span class="keyword">const</span> <span class="keywordtype">double</span> y3,</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>                                      <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>{</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span>  <span class="keywordtype">double</span> l0_numer = (x - x1) * (x - x2) * (x - x3);</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>  <span class="keywordtype">double</span> l1_numer = (x - x0) * (x - x2) * (x - x3);</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>  <span class="keywordtype">double</span> l2_numer = (x - x0) * (x - x1) * (x - x3);</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>  <span class="keywordtype">double</span> l3_numer = (x - x0) * (x - x1) * (x - x2);</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span> </div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span>  <span class="keywordtype">double</span> l0_denom = (x0 - x1) * (x0 - x2) * (x0 - x3);</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>  <span class="keywordtype">double</span> l1_denom = (x1 - x0) * (x1 - x2) * (x1 - x3);</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>  <span class="keywordtype">double</span> l2_denom = (x2 - x0) * (x2 - x1) * (x2 - x3);</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>  <span class="keywordtype">double</span> l3_denom = (x3 - x0) * (x3 - x1) * (x3 - x2);</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span> </div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>  <span class="keywordtype">double</span> term0 = y0 * l0_numer / l0_denom;</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>  <span class="keywordtype">double</span> term1 = y1 * l1_numer / l1_denom;</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>  <span class="keywordtype">double</span> term2 = y2 * l2_numer / l2_denom;</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span>  <span class="keywordtype">double</span> term3 = y3 * l3_numer / l3_denom;</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span> </div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>  <span class="keywordflow">return</span> (term0 + term1 + term2 + term3);</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span>}</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span> </div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span><span class="comment">/* returns j such that xArr[j] &lt;= x and x &lt; xArr[j+1] */</span></div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span><span class="keyword">static</span> <span class="keywordtype">int</span> findStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>{</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span>  <span class="keywordflow">if</span> ((len &lt; 2) || (x &lt; xArr[0]) || (x &gt; xArr[len-1])) {</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span>    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;invariant violated during interpolation&quot;</span>);</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>  }</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>  <span class="keywordflow">return</span>(recursiveFindStraddle&lt;A&gt;(xArr, 0, len-1, x));</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>}</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span> </div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span> </div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span><span class="comment">/* the invariant here is that xArr[l] &lt;= x &amp;&amp; x &lt; xArr[r] */</span></div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span><span class="keyword">static</span> <span class="keywordtype">int</span> recursiveFindStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> l, <span class="keyword">const</span> <span class="keywordtype">int</span> r, <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span>{</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span>  <span class="keywordtype">int</span> m;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span>  <span class="keywordflow">if</span> (l &gt;= r) {</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;lower bound not less than upper bound in search&quot;</span>);</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span>  }</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span>  <span class="keywordflow">if</span> ((xArr[l] &gt; x) || (x &gt;= xArr[r])) { <span class="comment">// the invariant</span></div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span>    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;target value invariant violated in search&quot;</span>);</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span>  }</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span> </div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>  <span class="keywordflow">if</span> (l+1 == r) <span class="keywordflow">return</span> (l);</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>  m = l + ((r-l)/2);</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span>  <span class="keywordflow">if</span> (xArr[m] &lt;= x) <span class="keywordflow">return</span> (recursiveFindStraddle&lt;A&gt;(xArr, m, r, x));</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span>  <span class="keywordflow">else</span>              <span class="keywordflow">return</span> (recursiveFindStraddle&lt;A&gt;(xArr, l, m, x));</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>}</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span> </div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span> </div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span><span class="comment">//Interpolate using X table and Y stride</span></div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span> </div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span><span class="comment">//In C: again-two-registers cubic_interpolate_with_x_arr_and_y_stride L1411</span></div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span><span class="comment">// Used by HllEstimators</span></div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span><span class="keywordtype">double</span> CubicInterpolation&lt;A&gt;::usingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLen,</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>                                                  <span class="keyword">const</span> <span class="keywordtype">double</span> yStride, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLenM1 = xArrLen - 1;</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span> </div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>  <span class="keywordflow">if</span> ((xArrLen &lt; 4) || (x &lt; xArr[0]) || (x &gt; xArr[xArrLenM1])) {</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;impossible values during interpolaiton&quot;</span>);</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>  }</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span> </div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>  <span class="keywordflow">if</span> (x ==  xArr[xArrLenM1]) { <span class="comment">/* corner case */</span></div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>    <span class="keywordflow">return</span> (yStride * (xArrLenM1));</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>  }</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span> </div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> offset = findStraddle&lt;A&gt;(xArr, xArrLen, x); <span class="comment">//uses recursion</span></div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLenM2 = xArrLen - 2;</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>  <span class="keywordflow">if</span> ((offset &lt; 0) || (offset &gt; xArrLenM2)) {</div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;invalid offset during interpolation&quot;</span>);</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>  }</div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span> </div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>  <span class="keywordflow">if</span> (offset == 0) { <span class="comment">/* corner case */</span></div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>    <span class="keywordflow">return</span> (interpolateUsingXArrAndYStride&lt;A&gt;(xArr, yStride, (offset - 0), x));</div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>  }</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (offset == xArrLenM2) { <span class="comment">/* corner case */</span></div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span>    <span class="keywordflow">return</span> (interpolateUsingXArrAndYStride&lt;A&gt;(xArr, yStride, (offset - 2), x));</div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span>  }</div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>  <span class="comment">/* main case */</span></div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span>  <span class="keywordflow">return</span> (interpolateUsingXArrAndYStride&lt;A&gt;(xArr, yStride, (offset - 1), x));</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span>}</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span> </div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span><span class="comment">//In C: again-two-registers cubic_interpolate_with_x_arr_and_y_stride_aux L1402</span></div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span><span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yStride,</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>                                             <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>  <span class="keywordflow">return</span> cubicInterpolate&lt;A&gt;(</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>      xArr[offset + 0], yStride * (offset + 0),</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>      xArr[offset + 1], yStride * (offset + 1),</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>      xArr[offset + 2], yStride * (offset + 2),</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>      xArr[offset + 3], yStride * (offset + 3),</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>      x);</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>}</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span> </div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span>}</div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span> </div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span><span class="preprocessor">#endif </span><span class="comment">// _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;CubicInterpolation.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">dou [...]
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">static</span> <span class="keywordtype">double</span> cubicInterpolate(<span class="keyword">const</span> <span class="keywordtype">double</span> x0, <span class="keyword">const</span> <span class="keywordtype">double</span> y0, <span class="keyword">const</span> <span class="keywordtype">double</span> x1, <span class="keyword">const</span> <span class="keywordtype">double</span> y1,</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;                               <span class="keyword">const</span> <span class="keywordtype">double</span> x2, <span class="keyword">const</span> <span class="keywordtype">double</span> y2, <span class="keyword">const</span> <span class="keywordtype">double</span> x3, <span class="keyword">const</span> <span class="keywordtype">double</span> y3, <span class="keyword">const</span> <span class="keywordtype">double [...]
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> findStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> recursiveFindStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> l, <span class="keyword">const</span> <span class="keywordtype">int</span> r, <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yStride,</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;                                             <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">double</span> x);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="keyword">const</span> <span class="keywordtype">int</span> numEntries = 40;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="comment">//Computed for Coupon lgK = 26 ONLY. Designed for the cubic interpolator function.</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="keyword">const</span> <span class="keywordtype">double</span> xArrComputed[numEntries] = {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    0.0, 1.0, 20.0, 400.0,</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    8000.0, 160000.0, 300000.0, 600000.0,</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    900000.0, 1200000.0, 1500000.0, 1800000.0,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    2100000.0, 2400000.0, 2700000.0, 3000000.0,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    3300000.0, 3600000.0, 3900000.0, 4200000.0,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    4500000.0, 4800000.0, 5100000.0, 5400000.0,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    5700000.0, 6000000.0, 6300000.0, 6600000.0,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    6900000.0, 7200000.0, 7500000.0, 7800000.0,</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    8100000.0, 8400000.0, 8700000.0, 9000000.0,</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    9300000.0, 9600000.0, 9900000.0, 10200000.0</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;};</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">//Computed for Coupon lgK = 26 ONLY. Designed for the cubic interpolator function.</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="keyword">const</span> <span class="keywordtype">double</span> yArrComputed[numEntries] =  {</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    0.0000000000000000, 1.0000000000000000, 20.0000009437402611, 400.0003963713384110,</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    8000.1589294602090376, 160063.6067763759638183, 300223.7071597663452849, 600895.5933856170158833,</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    902016.8065120954997838, 1203588.4983199508860707, 1505611.8245524743106216, 1808087.9449319066479802,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    2111018.0231759352609515, 2414403.2270142501220107, 2718244.7282051891088486, 3022543.7025524540804327,</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    3327301.3299219091422856, 3632518.7942584538832307, 3938197.2836029687896371, 4244337.9901093561202288,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    4550942.1100616492331028, 4858010.8438911894336343, 5165545.3961938973516226, 5473546.9757476449012756,</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    5782016.7955296505242586, 6090956.0727340159937739, 6400366.0287892958149314, 6710247.8893762007355690,</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    7020602.8844453142955899, 7331432.2482349723577499, 7642737.2192891482263803, 7954519.0404754765331745,</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    8266778.9590033423155546, 8579518.2264420464634895, 8892738.0987390466034412, 9206439.8362383283674717,</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    9520624.7036988288164139, 9835293.9703129194676876, 10150448.9097250290215015, 10466090.8000503256917000</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;};</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="keywordtype">double</span> CubicInterpolation&lt;A&gt;::usingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  <span class="keywordflow">return</span> usingXAndYTables(xArrComputed, yArrComputed, numEntries, x);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;}</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="keywordtype">double</span> CubicInterpolation&lt;A&gt;::usingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[],</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;                                            <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="keywordtype">int</span> offset;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  <span class="keywordflow">if</span> (x &lt; xArr[0] || x &gt; xArr[len-1]) {</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;x value out of range: &quot;</span> + std::to_string(x));</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  }</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="keywordflow">if</span> (x ==  xArr[len-1]) { <span class="comment">// corner case</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keywordflow">return</span> (yArr[len-1]);</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  }</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160; </div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  offset = findStraddle&lt;A&gt;(xArr, len, x);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  <span class="keywordflow">if</span> (offset &lt; 0 &amp;&amp; offset &gt; len-2) {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;offset must be &gt;= 0 and &lt;= &quot;</span> + std::to_string(len) + <span class="stringliteral">&quot;-2&quot;</span>);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  }</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keywordflow">if</span> (offset == 0) { <span class="comment">// corner case</span></div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordflow">return</span> (interpolateUsingXAndYTables&lt;A&gt;(xArr, yArr, (offset-0), x));</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (offset == numEntries-2) { <span class="comment">// corner case</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keywordflow">return</span> (interpolateUsingXAndYTables&lt;A&gt;(xArr, yArr, (offset-2), x));</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  <span class="comment">// main case</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  <span class="keywordflow">return</span> (interpolateUsingXAndYTables&lt;A&gt;(xArr, yArr, (offset-1), x));</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;}</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;<span class="comment">// In C: again-two-registers cubic_interpolate_aux L1368</span></div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[],</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;                                          <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keywordflow">return</span> (cubicInterpolate&lt;A&gt;(xArr[offset+0], yArr[offset+0],</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;                        xArr[offset+1], yArr[offset+1],</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;                        xArr[offset+2], yArr[offset+2],</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;                        xArr[offset+3], yArr[offset+3],</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;                        x) );</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;}</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160; </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">double</span> cubicInterpolate(<span class="keyword">const</span> <span class="keywordtype">double</span> x0, <span class="keyword">const</span> <span class="keywordtype">double</span> y0,</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;                                      <span class="keyword">const</span> <span class="keywordtype">double</span> x1, <span class="keyword">const</span> <span class="keywordtype">double</span> y1,</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;                                      <span class="keyword">const</span> <span class="keywordtype">double</span> x2, <span class="keyword">const</span> <span class="keywordtype">double</span> y2,</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;                                      <span class="keyword">const</span> <span class="keywordtype">double</span> x3, <span class="keyword">const</span> <span class="keywordtype">double</span> y3,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;                                      <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;{</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  <span class="keywordtype">double</span> l0_numer = (x - x1) * (x - x2) * (x - x3);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  <span class="keywordtype">double</span> l1_numer = (x - x0) * (x - x2) * (x - x3);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="keywordtype">double</span> l2_numer = (x - x0) * (x - x1) * (x - x3);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordtype">double</span> l3_numer = (x - x0) * (x - x1) * (x - x2);</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160; </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  <span class="keywordtype">double</span> l0_denom = (x0 - x1) * (x0 - x2) * (x0 - x3);</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="keywordtype">double</span> l1_denom = (x1 - x0) * (x1 - x2) * (x1 - x3);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="keywordtype">double</span> l2_denom = (x2 - x0) * (x2 - x1) * (x2 - x3);</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="keywordtype">double</span> l3_denom = (x3 - x0) * (x3 - x1) * (x3 - x2);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160; </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  <span class="keywordtype">double</span> term0 = y0 * l0_numer / l0_denom;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="keywordtype">double</span> term1 = y1 * l1_numer / l1_denom;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  <span class="keywordtype">double</span> term2 = y2 * l2_numer / l2_denom;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  <span class="keywordtype">double</span> term3 = y3 * l3_numer / l3_denom;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160; </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="keywordflow">return</span> (term0 + term1 + term2 + term3);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;}</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="comment">/* returns j such that xArr[j] &lt;= x and x &lt; xArr[j+1] */</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> findStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> len, <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;{</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  <span class="keywordflow">if</span> ((len &lt; 2) || (x &lt; xArr[0]) || (x &gt; xArr[len-1])) {</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;invariant violated during interpolation&quot;</span>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  }</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  <span class="keywordflow">return</span>(recursiveFindStraddle&lt;A&gt;(xArr, 0, len-1, x));</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;}</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160; </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="comment">/* the invariant here is that xArr[l] &lt;= x &amp;&amp; x &lt; xArr[r] */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> recursiveFindStraddle(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> l, <span class="keyword">const</span> <span class="keywordtype">int</span> r, <span class="keyword">const</span> <span class="keywordtype">double</span> x)</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;{</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;  <span class="keywordtype">int</span> m;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  <span class="keywordflow">if</span> (l &gt;= r) {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;lower bound not less than upper bound in search&quot;</span>);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;  }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;  <span class="keywordflow">if</span> ((xArr[l] &gt; x) || (x &gt;= xArr[r])) { <span class="comment">// the invariant</span></div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;target value invariant violated in search&quot;</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160; </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="keywordflow">if</span> (l+1 == r) <span class="keywordflow">return</span> (l);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  m = l + ((r-l)/2);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  <span class="keywordflow">if</span> (xArr[m] &lt;= x) <span class="keywordflow">return</span> (recursiveFindStraddle&lt;A&gt;(xArr, m, r, x));</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;  <span class="keywordflow">else</span>              <span class="keywordflow">return</span> (recursiveFindStraddle&lt;A&gt;(xArr, l, m, x));</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;}</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160; </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160; </div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="comment">//Interpolate using X table and Y stride</span></div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160; </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;<span class="comment">//In C: again-two-registers cubic_interpolate_with_x_arr_and_y_stride L1411</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;<span class="comment">// Used by HllEstimators</span></div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="keywordtype">double</span> CubicInterpolation&lt;A&gt;::usingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLen,</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;                                                  <span class="keyword">const</span> <span class="keywordtype">double</span> yStride, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLenM1 = xArrLen - 1;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="keywordflow">if</span> ((xArrLen &lt; 4) || (x &lt; xArr[0]) || (x &gt; xArr[xArrLenM1])) {</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;impossible values during interpolaiton&quot;</span>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  }</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160; </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="keywordflow">if</span> (x ==  xArr[xArrLenM1]) { <span class="comment">/* corner case */</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <span class="keywordflow">return</span> (yStride * (xArrLenM1));</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  }</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160; </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> offset = findStraddle&lt;A&gt;(xArr, xArrLen, x); <span class="comment">//uses recursion</span></div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLenM2 = xArrLen - 2;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;  <span class="keywordflow">if</span> ((offset &lt; 0) || (offset &gt; xArrLenM2)) {</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;invalid offset during interpolation&quot;</span>);</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;  }</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160; </div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;  <span class="keywordflow">if</span> (offset == 0) { <span class="comment">/* corner case */</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="keywordflow">return</span> (interpolateUsingXArrAndYStride&lt;A&gt;(xArr, yStride, (offset - 0), x));</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;  }</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (offset == xArrLenM2) { <span class="comment">/* corner case */</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="keywordflow">return</span> (interpolateUsingXArrAndYStride&lt;A&gt;(xArr, yStride, (offset - 2), x));</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  }</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  <span class="comment">/* main case */</span></div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;  <span class="keywordflow">return</span> (interpolateUsingXArrAndYStride&lt;A&gt;(xArr, yStride, (offset - 1), x));</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;}</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="comment">//In C: again-two-registers cubic_interpolate_with_x_arr_and_y_stride_aux L1402</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;<span class="keyword">static</span> <span class="keywordtype">double</span> interpolateUsingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yStride,</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;                                             <span class="keyword">const</span> <span class="keywordtype">int</span> offset, <span class="keyword">const</span> <span class="keywordtype">double</span> x) {</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  <span class="keywordflow">return</span> cubicInterpolate&lt;A&gt;(</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;      xArr[offset + 0], yStride * (offset + 0),</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;      xArr[offset + 1], yStride * (offset + 1),</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;      xArr[offset + 2], yStride * (offset + 2),</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;      xArr[offset + 3], yStride * (offset + 3),</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      x);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;}</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160; </div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;}</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160; </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _CUBICINTERPOLATION_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/CubicInterpolation_8hpp_source.html b/docs/master/CubicInterpolation_8hpp_source.html
index 18f4ac2..1a53fce 100644
--- a/docs/master/CubicInterpolation_8hpp_source.html
+++ b/docs/master/CubicInterpolation_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/CubicInterpolation.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,57 +65,58 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">CubicInterpolation.hpp</div></div>
+  <div class="headertitle">
+<div class="title">CubicInterpolation.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _CUBICINTERPOLATION_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _CUBICINTERPOLATION_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A = std::allocator&lt;u<span class="keywordtype">int</span>8_t&gt;&gt;</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">class </span>CubicInterpolation {</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span>  <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>    <span class="keyword">static</span> <span class="keywordtype">double</span> usingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[],</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span>                                   <span class="keywordtype">int</span> len, <span class="keywordtype">double</span> x);</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span> </div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>    <span class="keyword">static</span> <span class="keywordtype">double</span> usingXAndYTables(<span class="keywordtype">double</span> x);</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>    <span class="keyword">static</span> <span class="keywordtype">double</span> usingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLen,</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>                                      <span class="keywordtype">double</span> yStride, <span class="keywordtype">double</span> x);</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>};</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span> </div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>}</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span> </div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span><span class="preprocessor">#include &quot;CubicInterpolation-internal.hpp&quot;</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span> </div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span><span class="preprocessor">#endif </span><span class="comment">/* _CUBICINTERPOLATION_HPP_ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _CUBICINTERPOLATION_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _CUBICINTERPOLATION_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A = std::allocator&lt;u<span class="keywordtype">int</span>8_t&gt;&gt;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">class </span>CubicInterpolation {</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">double</span> usingXAndYTables(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">double</span> yArr[],</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;                                   <span class="keywordtype">int</span> len, <span class="keywordtype">double</span> x);</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">double</span> usingXAndYTables(<span class="keywordtype">double</span> x);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">double</span> usingXArrAndYStride(<span class="keyword">const</span> <span class="keywordtype">double</span> xArr[], <span class="keyword">const</span> <span class="keywordtype">int</span> xArrLen,</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;                                      <span class="keywordtype">double</span> yStride, <span class="keywordtype">double</span> x);</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;};</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;}</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#include &quot;CubicInterpolation-internal.hpp&quot;</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _CUBICINTERPOLATION_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/HarmonicNumbers-internal_8hpp_source.html b/docs/master/HarmonicNumbers-internal_8hpp_source.html
index f9f7221..c6c6b62 100644
--- a/docs/master/HarmonicNumbers-internal_8hpp_source.html
+++ b/docs/master/HarmonicNumbers-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/HarmonicNumbers-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,104 +65,105 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">HarmonicNumbers-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">HarmonicNumbers-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;HarmonicNumbers.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &lt;cmath&gt;</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="keywordtype">double</span> HarmonicNumbers&lt;A&gt;::getBitMapEstimate(<span class="keyword">const</span> <span class="keywordtype">int</span> bitVectorLength, <span class="keyword">const</span> <span class="keywordtype">int</span> numBitsSet) {</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span>  <span class="keywordflow">return</span> (bitVectorLength * (harmonicNumber(bitVectorLength) - harmonicNumber(bitVectorLength - numBitsSet)));</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>}</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span> </div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> NUM_EXACT_HARMONIC_NUMBERS = 25;</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span> </div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span><span class="keyword">static</span> <span class="keywordtype">double</span> tableOfExactHarmonicNumbers[] = {</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>    0.0, <span class="comment">// 0</span></div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>    1.0, <span class="comment">// 1</span></div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>    1.5, <span class="comment">// 2</span></div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>    11.0 / 6.0, <span class="comment">// 3</span></div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>    25.0 / 12.0, <span class="comment">// 4</span></div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>    137.0 / 60.0, <span class="comment">// 5</span></div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>    49.0 / 20.0, <span class="comment">// 6</span></div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>    363.0 / 140.0, <span class="comment">// 7</span></div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>    761.0 / 280.0, <span class="comment">// 8</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>    7129.0 / 2520.0, <span class="comment">// 9</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>    7381.0 / 2520.0, <span class="comment">// 10</span></div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>    83711.0 / 27720.0, <span class="comment">// 11</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>    86021.0 / 27720.0, <span class="comment">// 12</span></div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>    1145993.0 / 360360.0, <span class="comment">// 13</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>    1171733.0 / 360360.0, <span class="comment">// 14</span></div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>    1195757.0 / 360360.0, <span class="comment">// 15</span></div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>    2436559.0 / 720720.0, <span class="comment">// 16</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>    42142223.0 / 12252240.0, <span class="comment">// 17</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>    14274301.0 / 4084080.0, <span class="comment">// 18</span></div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>    275295799.0 / 77597520.0, <span class="comment">// 19</span></div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>    55835135.0 / 15519504.0, <span class="comment">// 20</span></div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>    18858053.0 / 5173168.0, <span class="comment">// 21</span></div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>    19093197.0 / 5173168.0, <span class="comment">// 22</span></div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>    444316699.0 / 118982864.0, <span class="comment">// 23</span></div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>    1347822955.0 / 356948592.0 <span class="comment">// 24</span></div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>  };</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span> </div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> EULER_MASCHERONI_CONSTANT = 0.577215664901532860606512090082;</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span><span class="keywordtype">double</span> HarmonicNumbers&lt;A&gt;::harmonicNumber(<span class="keyword">const</span> uint64_t x_i) {</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>  <span class="keywordflow">if</span> (x_i &lt; NUM_EXACT_HARMONIC_NUMBERS) {</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>    <span class="keywordflow">return</span> tableOfExactHarmonicNumbers[x_i];</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>  } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>    <span class="keywordtype">double</span> x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(x_i);</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>    <span class="keywordtype">double</span> invSq = 1.0 / (x * x);</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>    <span class="keywordtype">double</span> sum = log(x) + EULER_MASCHERONI_CONSTANT + (1.0 / (2.0 * x));</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>    <span class="comment">/* note: the number of terms included from this series expansion is appropriate</span></div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span><span class="comment">       for the size of the exact table (25) and the precision of doubles */</span></div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>    <span class="keywordtype">double</span> pow = invSq; <span class="comment">// now n^-2</span></div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>    sum -= pow * (1.0 / 12.0);</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>    pow *= invSq; <span class="comment">// now n^-4</span></div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>    sum += pow * (1.0 / 120.0);</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>    pow *= invSq; <span class="comment">/* now n^-6 */</span></div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>    sum -= pow * (1.0 / 252.0);</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>    pow *= invSq; <span class="comment">/* now n^-8 */</span></div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>    sum += pow * (1.0 / 240.0);</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>    <span class="keywordflow">return</span> sum;</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>  }</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>}</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span> </div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>}</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span> </div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span><span class="preprocessor">#endif </span><span class="comment">// _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;HarmonicNumbers.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keywordtype">double</span> HarmonicNumbers&lt;A&gt;::getBitMapEstimate(<span class="keyword">const</span> <span class="keywordtype">int</span> bitVectorLength, <span class="keyword">const</span> <span class="keywordtype">int</span> numBitsSet) {</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;  <span class="keywordflow">return</span> (bitVectorLength * (harmonicNumber(bitVectorLength) - harmonicNumber(bitVectorLength - numBitsSet)));</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;}</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">int</span> NUM_EXACT_HARMONIC_NUMBERS = 25;</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">static</span> <span class="keywordtype">double</span> tableOfExactHarmonicNumbers[] = {</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    0.0, <span class="comment">// 0</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    1.0, <span class="comment">// 1</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    1.5, <span class="comment">// 2</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    11.0 / 6.0, <span class="comment">// 3</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    25.0 / 12.0, <span class="comment">// 4</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    137.0 / 60.0, <span class="comment">// 5</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    49.0 / 20.0, <span class="comment">// 6</span></div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    363.0 / 140.0, <span class="comment">// 7</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    761.0 / 280.0, <span class="comment">// 8</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    7129.0 / 2520.0, <span class="comment">// 9</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    7381.0 / 2520.0, <span class="comment">// 10</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    83711.0 / 27720.0, <span class="comment">// 11</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    86021.0 / 27720.0, <span class="comment">// 12</span></div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    1145993.0 / 360360.0, <span class="comment">// 13</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    1171733.0 / 360360.0, <span class="comment">// 14</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    1195757.0 / 360360.0, <span class="comment">// 15</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    2436559.0 / 720720.0, <span class="comment">// 16</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    42142223.0 / 12252240.0, <span class="comment">// 17</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    14274301.0 / 4084080.0, <span class="comment">// 18</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    275295799.0 / 77597520.0, <span class="comment">// 19</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    55835135.0 / 15519504.0, <span class="comment">// 20</span></div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    18858053.0 / 5173168.0, <span class="comment">// 21</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    19093197.0 / 5173168.0, <span class="comment">// 22</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    444316699.0 / 118982864.0, <span class="comment">// 23</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    1347822955.0 / 356948592.0 <span class="comment">// 24</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  };</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160; </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> EULER_MASCHERONI_CONSTANT = 0.577215664901532860606512090082;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="keywordtype">double</span> HarmonicNumbers&lt;A&gt;::harmonicNumber(<span class="keyword">const</span> uint64_t x_i) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  <span class="keywordflow">if</span> (x_i &lt; NUM_EXACT_HARMONIC_NUMBERS) {</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordflow">return</span> tableOfExactHarmonicNumbers[x_i];</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordtype">double</span> x = <span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(x_i);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keywordtype">double</span> invSq = 1.0 / (x * x);</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keywordtype">double</span> sum = log(x) + EULER_MASCHERONI_CONSTANT + (1.0 / (2.0 * x));</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="comment">/* note: the number of terms included from this series expansion is appropriate</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment">       for the size of the exact table (25) and the precision of doubles */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keywordtype">double</span> pow = invSq; <span class="comment">// now n^-2</span></div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    sum -= pow * (1.0 / 12.0);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    pow *= invSq; <span class="comment">// now n^-4</span></div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    sum += pow * (1.0 / 120.0);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    pow *= invSq; <span class="comment">/* now n^-6 */</span></div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    sum -= pow * (1.0 / 252.0);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    pow *= invSq; <span class="comment">/* now n^-8 */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    sum += pow * (1.0 / 240.0);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keywordflow">return</span> sum;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  }</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;}</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160; </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;}</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _HARMONICNUMBERS_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/HarmonicNumbers_8hpp_source.html b/docs/master/HarmonicNumbers_8hpp_source.html
index c9f499d..aa76c1f 100644
--- a/docs/master/HarmonicNumbers_8hpp_source.html
+++ b/docs/master/HarmonicNumbers_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/HarmonicNumbers.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,55 +65,56 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">HarmonicNumbers.hpp</div></div>
+  <div class="headertitle">
+<div class="title">HarmonicNumbers.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _HARMONICNUMBERS_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _HARMONICNUMBERS_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &lt;cstdint&gt;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A = std::allocator&lt;u<span class="keywordtype">int</span>8_t&gt;&gt;</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">class </span>HarmonicNumbers {</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>  <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>    <span class="keyword">static</span> <span class="keywordtype">double</span> getBitMapEstimate(<span class="keywordtype">int</span> bitVectorLength, <span class="keywordtype">int</span> numBitsSet);</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span> </div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>  <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>    <span class="keyword">static</span> <span class="keywordtype">double</span> harmonicNumber(uint64_t x_i);</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>};</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>}</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span> </div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span><span class="preprocessor">#include &quot;HarmonicNumbers-internal.hpp&quot;</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span> </div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span><span class="preprocessor">#endif </span><span class="comment">/* _HARMONICNUMBERS_HPP_ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _HARMONICNUMBERS_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _HARMONICNUMBERS_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A = std::allocator&lt;u<span class="keywordtype">int</span>8_t&gt;&gt;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">class </span>HarmonicNumbers {</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">double</span> getBitMapEstimate(<span class="keywordtype">int</span> bitVectorLength, <span class="keywordtype">int</span> numBitsSet);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">double</span> harmonicNumber(uint64_t x_i);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;};</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;}</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#include &quot;HarmonicNumbers-internal.hpp&quot;</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _HARMONICNUMBERS_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/Hll4Array-internal_8hpp_source.html b/docs/master/Hll4Array-internal_8hpp_source.html
index 90ce2b6..33c1065 100644
--- a/docs/master/Hll4Array-internal_8hpp_source.html
+++ b/docs/master/Hll4Array-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/Hll4Array-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,364 +65,365 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">Hll4Array-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">Hll4Array-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _HLL4ARRAY_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _HLL4ARRAY_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;Hll4Array.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &lt;cstring&gt;</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#include &lt;memory&gt;</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="preprocessor">#include &lt;string&gt;</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span> </div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>Hll4Array&lt;A&gt;::Hll4Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator):</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span>HllArray&lt;A&gt;(lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>, startFullSize, allocator),</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>auxHashMap_(nullptr)</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>{</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>  <span class="keyword">const</span> uint32_t numBytes = this-&gt;hll4ArrBytes(lgConfigK);</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>}</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span> </div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>Hll4Array&lt;A&gt;::Hll4Array(<span class="keyword">const</span> Hll4Array&lt;A&gt;&amp; that) :</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>  HllArray&lt;A&gt;(that)</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>{</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>  <span class="comment">// can determine hllByteArr size in parent class, no need to allocate here</span></div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>  <span class="comment">// but parent class doesn&#39;t handle the auxHashMap</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>  <span class="keywordflow">if</span> (that.auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>    auxHashMap_ = that.auxHashMap_-&gt;copy();</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>  } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>    auxHashMap_ = <span class="keyword">nullptr</span>;</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>  }</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>}</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>Hll4Array&lt;A&gt;::Hll4Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; other) :</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>  HllArray&lt;A&gt;(other.getLgConfigK(), <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>, other.isStartFullSize(), other.getAllocator()),</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>  auxHashMap_(nullptr)</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>{</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll4ArrBytes(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>  this-&gt;oooFlag_ = other.isOutOfOrderFlag();</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span> </div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon : other) { <span class="comment">// all = false, so skip empty values</span></div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>    internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>  }</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>  this-&gt;hipAccum_ = other.getHipAccum();</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>  this-&gt;rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>}</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span> </div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>Hll4Array&lt;A&gt;::~Hll4Array() {</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>  <span class="comment">// hllByteArr deleted in parent</span></div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>  <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>    AuxHashMap&lt;A&gt;::make_deleter()(auxHashMap_);</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>  }</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>}</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span> </div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; Hll4Array&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>    Hll4Array&lt;A&gt;* hll = <span class="keyword">static_cast&lt;</span>Hll4Array&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>    <span class="keyword">using </span>Hll4Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll4Array&lt;A&gt;&gt;;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>    Hll4Alloc hll4Alloc(hll-&gt;getAllocator());</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>    hll-&gt;~Hll4Array();</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>    hll4Alloc.deallocate(hll, 1);</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>  };</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>}</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span> </div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>Hll4Array&lt;A&gt;* Hll4Array&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>  <span class="keyword">using </span>Hll4Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll4Array&lt;A&gt;&gt;;</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>  Hll4Alloc hll4Alloc(this-&gt;getAllocator());</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (hll4Alloc.allocate(1)) Hll4Array&lt;A&gt;(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>}</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span> </div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>uint32_t Hll4Array&lt;A&gt;::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>  AuxHashMap&lt;A&gt;* auxHashMap = getAuxHashMap();</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>  uint32_t auxBytes;</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>  <span class="keywordflow">if</span> (auxHashMap == <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>    auxBytes = 4 &lt;&lt; hll_constants::LG_AUX_ARR_INTS[this-&gt;lgConfigK_];</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>  } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>    auxBytes = 4 &lt;&lt; auxHashMap-&gt;getLgAuxArrInts();</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>  }</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>  <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + getHllByteArrBytes() + auxBytes;</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>}</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span> </div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>uint32_t Hll4Array&lt;A&gt;::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>  <span class="keywordflow">return</span> this-&gt;hll4ArrBytes(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>}</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span> </div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>AuxHashMap&lt;A&gt;* Hll4Array&lt;A&gt;::getAuxHashMap()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>  <span class="keywordflow">return</span> auxHashMap_;</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>}</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span> </div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span><span class="keywordtype">void</span> Hll4Array&lt;A&gt;::putAuxHashMap(AuxHashMap&lt;A&gt;* auxHashMap) {</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>  this-&gt;auxHashMap_ = auxHashMap;</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span>}</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span> </div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span>uint8_t Hll4Array&lt;A&gt;::getSlot(uint32_t slotNo)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>  <span class="keyword">const</span> uint8_t <span class="keywordtype">byte</span> = this-&gt;hllByteArr_[slotNo &gt;&gt; 1];</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>  <span class="keywordflow">if</span> ((slotNo &amp; 1) &gt; 0) { <span class="comment">// odd?</span></div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span>    <span class="keywordflow">return</span> <span class="keywordtype">byte</span> &gt;&gt; 4;</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>  }</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>  <span class="keywordflow">return</span> <span class="keywordtype">byte</span> &amp; hll_constants::loNibbleMask;</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>}</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span> </div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>uint8_t Hll4Array&lt;A&gt;::adjustRawValue(uint32_t slot, uint8_t value)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>  <span class="keywordflow">if</span> (value != hll_constants::AUX_TOKEN) <span class="keywordflow">return</span> value + this-&gt;curMin_;</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>  <span class="keywordflow">return</span> auxHashMap_-&gt;mustFindValueFor(slot);</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>}</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span> </div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>HllSketchImpl&lt;A&gt;* Hll4Array&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span>  internalCouponUpdate(coupon);</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>}</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span> </div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span><span class="keywordtype">void</span> Hll4Array&lt;A&gt;::internalCouponUpdate(uint32_t coupon) {</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>  <span class="keyword">const</span> uint8_t newValue = HllUtil&lt;A&gt;::getValue(coupon);</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>  <span class="keywordflow">if</span> (newValue &lt;= this-&gt;curMin_) {</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>    <span class="keywordflow">return</span>; <span class="comment">// quick rejection, but only works for large N</span></div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span>  }</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span>  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; this-&gt;lgConfigK_) - 1;</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>  <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(coupon) &amp; configKmask;</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>  internalHll4Update(slotNo, newValue);</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>}</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span> </div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span><span class="keywordtype">void</span> Hll4Array&lt;A&gt;::putSlot(uint32_t slotNo, uint8_t newValue) {</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span>  <span class="keyword">const</span> uint32_t byteno = slotNo &gt;&gt; 1;</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span>  <span class="keyword">const</span> uint8_t oldValue = this-&gt;hllByteArr_[byteno];</div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span>  <span class="keywordflow">if</span> ((slotNo &amp; 1) == 0) { <span class="comment">// set low nibble</span></div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span>    this-&gt;hllByteArr_[byteno]</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span>      = ((oldValue &amp; hll_constants::hiNibbleMask) | (newValue &amp; hll_constants::loNibbleMask));</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>  } <span class="keywordflow">else</span> { <span class="comment">// set high nibble</span></div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span>    this-&gt;hllByteArr_[byteno]</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span>      = ((oldValue &amp; hll_constants::loNibbleMask) | ((newValue &lt;&lt; 4) &amp; hll_constants::hiNibbleMask));</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span>  }</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span>}</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span> </div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span><span class="comment">//In C: two-registers.c Line 836 in &quot;hhb_abstract_set_slot_if_new_value_bigger&quot; non-sparse</span></div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span><span class="keywordtype">void</span> Hll4Array&lt;A&gt;::internalHll4Update(uint32_t slotNo, uint8_t newVal) {</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span> </div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>  <span class="keyword">const</span> uint8_t rawStoredOldValue = getSlot(slotNo); <span class="comment">// could be a 0</span></div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>  <span class="comment">// this is provably a LB:</span></div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>  <span class="keyword">const</span> uint8_t lbOnOldValue = rawStoredOldValue + this-&gt;curMin_; <span class="comment">// lower bound, could be 0</span></div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span> </div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span>  <span class="keywordflow">if</span> (newVal &gt; lbOnOldValue) { <span class="comment">// 842</span></div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>    <span class="comment">// Note: if an AUX_TOKEN exists, then auxHashMap must already exist</span></div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span>    <span class="comment">// 846: rawStoredOldValue == AUX_TOKEN</span></div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span>    <span class="keyword">const</span> uint8_t actualOldValue = (rawStoredOldValue &lt; hll_constants::AUX_TOKEN)</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>       ? (lbOnOldValue) : (auxHashMap_-&gt;mustFindValueFor(slotNo));</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span> </div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>    <span class="keywordflow">if</span> (newVal &gt; actualOldValue) { <span class="comment">// 848: actualOldValue could still be 0; newValue &gt; 0</span></div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>      <span class="comment">// we know that the array will change, but we haven&#39;t actually updated yet</span></div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span>      this-&gt;hipAndKxQIncrementalUpdate(actualOldValue, newVal);</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span> </div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span>      <span class="comment">// newVal &gt;= curMin</span></div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span> </div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>      <span class="keyword">const</span> uint8_t shiftedNewValue = newVal - this-&gt;curMin_; <span class="comment">// 874</span></div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>      <span class="comment">// redundant since we know newVal &gt;= curMin,</span></div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>      <span class="comment">// and lgConfigK bounds do not allow overflowing an int</span></div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>      <span class="comment">//assert(shiftedNewValue &gt;= 0);</span></div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span> </div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>      <span class="keywordflow">if</span> (rawStoredOldValue == hll_constants::AUX_TOKEN) { <span class="comment">// 879</span></div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>        <span class="comment">// Given that we have an AUX_TOKEN, there are 4 cases for how to</span></div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>        <span class="comment">// actually modify the data structure</span></div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span> </div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>        <span class="keywordflow">if</span> (shiftedNewValue &gt;= hll_constants::AUX_TOKEN) { <span class="comment">// case 1: 881</span></div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>          <span class="comment">// the byte array already contains aux token</span></div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>          <span class="comment">// This is the case where old and new values are both exceptions.</span></div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span>          <span class="comment">// The 4-bit array already is AUX_TOKEN, only need to update auxHashMap</span></div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>          auxHashMap_-&gt;mustReplace(slotNo, newVal);</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>        }</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>        <span class="keywordflow">else</span> { <span class="comment">// case 2: 885</span></div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>          <span class="comment">// This is the hypothetical case where the old value is an exception and the new one is not,</span></div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>          <span class="comment">// which is impossible given that curMin has not changed here and newVal &gt; oldValue</span></div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span>        }</div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>      } <span class="keywordflow">else</span> { <span class="comment">// rawStoredOldValue != AUX_TOKEN</span></div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>        <span class="keywordflow">if</span> (shiftedNewValue &gt;= hll_constants::AUX_TOKEN) { <span class="comment">// case 3: 892</span></div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>          <span class="comment">// This is the case where the old value is not an exception and the new value is.</span></div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>          <span class="comment">// The AUX_TOKEN must be stored in the 4-bit array and the new value</span></div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span>          <span class="comment">// added to the exception table</span></div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span>          putSlot(slotNo, hll_constants::AUX_TOKEN);</div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>          <span class="keywordflow">if</span> (auxHashMap_ == <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span>            auxHashMap_ = AuxHashMap&lt;A&gt;::newAuxHashMap(hll_constants::LG_AUX_ARR_INTS[this-&gt;lgConfigK_],</div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span>                this-&gt;lgConfigK_, this-&gt;getAllocator());</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span>          }</div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span>          auxHashMap_-&gt;mustAdd(slotNo, newVal);</div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span>        }</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>        <span class="keywordflow">else</span> { <span class="comment">// case 4: 897</span></div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>          <span class="comment">// This is the case where neither the old value nor the new value is an exception.</span></div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>          <span class="comment">// We just overwrite the 4-bit array with the shifted new value.</span></div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>          putSlot(slotNo, shiftedNewValue);</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>        }</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>      }</div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span> </div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>      <span class="comment">// we just increased a pair value, so it might be time to change curMin</span></div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>      <span class="keywordflow">if</span> (actualOldValue == this-&gt;curMin_) { <span class="comment">// 908</span></div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>        --(this-&gt;numAtCurMin_);</div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span>        <span class="keywordflow">while</span> (this-&gt;numAtCurMin_ == 0) {</div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span>          shiftToBiggerCurMin(); <span class="comment">// increases curMin by 1, builds a new aux table</span></div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span>          <span class="comment">// shifts values in 4-bit table and recounts curMin</span></div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span>        }</div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span>      }</div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span>    } <span class="comment">// end newVal &lt;= actualOldValue</span></div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span>  } <span class="comment">// end newValue &lt;= lbOnOldValue -&gt; return, no need to update array</span></div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span>}</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span> </div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span><span class="comment">// This scheme only works with two double registers (2 kxq values).</span></div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span><span class="comment">//   HipAccum, kxq0 and kxq1 remain untouched.</span></div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span><span class="comment">//   This changes curMin, numAtCurMin, hllByteArr and auxMap.</span></div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span><span class="comment">// Entering this routine assumes that all slots have valid values &gt; 0 and &lt;= 15.</span></div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span><span class="comment">// An AuxHashMap must exist if any values in the current hllByteArray are already 15.</span></div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span><span class="comment">// In C: again-two-registers.c Lines 710 &quot;hhb_shift_to_bigger_curmin&quot;</span></div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span><span class="keywordtype">void</span> Hll4Array&lt;A&gt;::shiftToBiggerCurMin() {</div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>  <span class="keyword">const</span> uint8_t newCurMin = this-&gt;curMin_ + 1;</div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>  <span class="keyword">const</span> uint32_t configK = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span>  <span class="keyword">const</span> uint32_t configKmask = configK - 1;</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span> </div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span>  uint32_t numAtNewCurMin = 0;</div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span>  uint32_t numAuxTokens = 0;</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span> </div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span>  <span class="comment">// Walk through the slots of 4-bit array decrementing stored values by one unless it</span></div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span>  <span class="comment">// equals AUX_TOKEN, where it is left alone but counted to be checked later.</span></div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span>  <span class="comment">// If oldStoredValue is 0 it is an error.</span></div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span>  <span class="comment">// If the decremented value is 0, we increment numAtNewCurMin.</span></div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>  <span class="comment">// Because getNibble is masked to 4 bits oldStoredValue can never be &gt; 15 or negative</span></div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span>  <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; configK; i++) { <span class="comment">//724</span></div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span>    uint8_t oldStoredValue = getSlot(i);</div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span>    <span class="keywordflow">if</span> (oldStoredValue == 0) {</div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span>      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Array slots cannot be 0 at this point.&quot;</span>);</div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>    }</div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>    <span class="keywordflow">if</span> (oldStoredValue &lt; hll_constants::AUX_TOKEN) {</div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span>      putSlot(i, --oldStoredValue);</div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span>      <span class="keywordflow">if</span> (oldStoredValue == 0) { numAtNewCurMin++; }</div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span>    } <span class="keywordflow">else</span> { <span class="comment">//oldStoredValue == AUX_TOKEN</span></div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span>      numAuxTokens++;</div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>      <span class="keywordflow">if</span> (auxHashMap_ == <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span>        <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;auxHashMap cannot be null at this point&quot;</span>);</div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span>      }</div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>    }</div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span>  }</div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span> </div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span>  <span class="comment">// If old AuxHashMap exists, walk through it updating some slots and build a new AuxHashMap</span></div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span>  <span class="comment">// if needed.</span></div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno">  276</span>  AuxHashMap&lt;A&gt;* newAuxMap = <span class="keyword">nullptr</span>;</div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno">  277</span>  <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00278" name="l00278"></a><span class="lineno">  278</span>    uint32_t slotNum;</div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno">  279</span>    uint8_t oldActualVal;</div>
-<div class="line"><a id="l00280" name="l00280"></a><span class="lineno">  280</span>    uint8_t newShiftedVal;</div>
-<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span> </div>
-<div class="line"><a id="l00282" name="l00282"></a><span class="lineno">  282</span>    <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: *auxHashMap_) {</div>
-<div class="line"><a id="l00283" name="l00283"></a><span class="lineno">  283</span>      slotNum = HllUtil&lt;A&gt;::getLow26(coupon) &amp; configKmask;</div>
-<div class="line"><a id="l00284" name="l00284"></a><span class="lineno">  284</span>      oldActualVal = HllUtil&lt;A&gt;::getValue(coupon);</div>
-<div class="line"><a id="l00285" name="l00285"></a><span class="lineno">  285</span>      <span class="keywordflow">if</span> (oldActualVal &lt; newCurMin) {</div>
-<div class="line"><a id="l00286" name="l00286"></a><span class="lineno">  286</span>        <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;oldActualVal &lt; newCurMin when incrementing curMin&quot;</span>);</div>
-<div class="line"><a id="l00287" name="l00287"></a><span class="lineno">  287</span>      }</div>
-<div class="line"><a id="l00288" name="l00288"></a><span class="lineno">  288</span>      newShiftedVal = oldActualVal - newCurMin;</div>
-<div class="line"><a id="l00289" name="l00289"></a><span class="lineno">  289</span> </div>
-<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span>      <span class="keywordflow">if</span> (getSlot(slotNum) != hll_constants::AUX_TOKEN) {</div>
-<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span>        <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;getSlot(slotNum) != AUX_TOKEN for item in auxiliary hash map&quot;</span>);</div>
-<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span>      }</div>
-<div class="line"><a id="l00293" name="l00293"></a><span class="lineno">  293</span>      <span class="comment">// Array slot != AUX_TOKEN at getSlot(slotNum);</span></div>
-<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span>      <span class="keywordflow">if</span> (newShiftedVal &lt; hll_constants::AUX_TOKEN) { <span class="comment">// 756</span></div>
-<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span>        <span class="keywordflow">if</span> (newShiftedVal != 14) {</div>
-<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span>          <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;newShiftedVal != 14 for item in old auxHashMap despite curMin increment&quot;</span>);</div>
-<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span>        }</div>
-<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span>        <span class="comment">// The former exception value isn&#39;t one anymore, so it stays out of new AuxHashMap.</span></div>
-<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span>        <span class="comment">// Correct the AUX_TOKEN value in the HLL array to the newShiftedVal (14).</span></div>
-<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span>        putSlot(slotNum, newShiftedVal);</div>
-<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span>        numAuxTokens--;</div>
-<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span>      } <span class="keywordflow">else</span> { <span class="comment">//newShiftedVal &gt;= AUX_TOKEN</span></div>
-<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span>        <span class="comment">// the former exception remains an exception, so must be added to the newAuxMap</span></div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span>        <span class="keywordflow">if</span> (newAuxMap == <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span>          newAuxMap = AuxHashMap&lt;A&gt;::newAuxHashMap(hll_constants::LG_AUX_ARR_INTS[this-&gt;lgConfigK_],</div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno">  306</span>              this-&gt;lgConfigK_, this-&gt;getAllocator());</div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span>        }</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span>        newAuxMap-&gt;mustAdd(slotNum, oldActualVal);</div>
-<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span>      }</div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span>    } <span class="comment">//end scan of oldAuxMap</span></div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span>  } <span class="comment">//end if (auxHashMap != null)</span></div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span>  <span class="keywordflow">else</span> { <span class="comment">// oldAuxMap == null</span></div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span>    <span class="keywordflow">if</span> (numAuxTokens != 0) {</div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span>      <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;No auxiliary hash map, but numAuxTokens != 0&quot;</span>);</div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span>    }</div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno">  316</span>  }</div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno">  317</span> </div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno">  318</span>  <span class="keywordflow">if</span> (newAuxMap != <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span>    <span class="keywordflow">if</span> (newAuxMap-&gt;getAuxCount() != numAuxTokens) {</div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno">  320</span>      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Inconsistent counts: auxCount: &quot;</span> + std::to_string(newAuxMap-&gt;getAuxCount())</div>
-<div class="line"><a id="l00321" name="l00321"></a><span class="lineno">  321</span>                               + <span class="stringliteral">&quot;, HLL tokesn: &quot;</span> + std::to_string(numAuxTokens));</div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno">  322</span>    }</div>
-<div class="line"><a id="l00323" name="l00323"></a><span class="lineno">  323</span>  }</div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno">  324</span> </div>
-<div class="line"><a id="l00325" name="l00325"></a><span class="lineno">  325</span>  <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00326" name="l00326"></a><span class="lineno">  326</span>    AuxHashMap&lt;A&gt;::make_deleter()(auxHashMap_);</div>
-<div class="line"><a id="l00327" name="l00327"></a><span class="lineno">  327</span>  }</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno">  328</span>  auxHashMap_ = newAuxMap;</div>
-<div class="line"><a id="l00329" name="l00329"></a><span class="lineno">  329</span> </div>
-<div class="line"><a id="l00330" name="l00330"></a><span class="lineno">  330</span>  this-&gt;curMin_ = newCurMin;</div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno">  331</span>  this-&gt;numAtCurMin_ = numAtNewCurMin;</div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno">  332</span>}</div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno">  333</span> </div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno">  334</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno">  335</span><span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator Hll4Array&lt;A&gt;::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span>  <span class="keywordflow">return</span> <span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator(this-&gt;hllByteArr_.data(), 1 &lt;&lt; this-&gt;lgConfigK_, 0, this-&gt;tgtHllType_,</div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno">  337</span>      auxHashMap_, this-&gt;curMin_, all);</div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno">  338</span>}</div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno">  339</span> </div>
-<div class="line"><a id="l00340" name="l00340"></a><span class="lineno">  340</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00341" name="l00341"></a><span class="lineno">  341</span><span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator Hll4Array&lt;A&gt;::end()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00342" name="l00342"></a><span class="lineno">  342</span>  <span class="keywordflow">return</span> <span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator(this-&gt;hllByteArr_.data(), 1 &lt;&lt; this-&gt;lgConfigK_, 1 &lt;&lt; this-&gt;lgConfigK_,</div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno">  343</span>      this-&gt;tgtHllType_, auxHashMap_, this-&gt;curMin_, <span class="keyword">false</span>);</div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno">  344</span>}</div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno">  345</span> </div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno">  346</span>}</div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno">  347</span> </div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno">  348</span><span class="preprocessor">#endif </span><span class="comment">// _HLL4ARRAY_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">datasketches::HLL_4</a></div><div class="ttdeci">@ HLL_4</div><div class="ttdoc">4 bits per entry (most compact, size may vary)</div><div class="ttdef"><b>Definition</b> hll.hpp:73</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _HLL4ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _HLL4ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;Hll4Array.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;Hll4Array&lt;A&gt;::Hll4Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator):</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;HllArray&lt;A&gt;(lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>, startFullSize, allocator),</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;auxHashMap_(nullptr)</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;{</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;  <span class="keyword">const</span> uint32_t numBytes = this-&gt;hll4ArrBytes(lgConfigK);</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;}</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;Hll4Array&lt;A&gt;::Hll4Array(<span class="keyword">const</span> Hll4Array&lt;A&gt;&amp; that) :</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;  HllArray&lt;A&gt;(that)</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;{</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  <span class="comment">// can determine hllByteArr size in parent class, no need to allocate here</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;  <span class="comment">// but parent class doesn&#39;t handle the auxHashMap</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;  <span class="keywordflow">if</span> (that.auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    auxHashMap_ = that.auxHashMap_-&gt;copy();</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    auxHashMap_ = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  }</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;}</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;Hll4Array&lt;A&gt;::Hll4Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; other) :</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  HllArray&lt;A&gt;(other.getLgConfigK(), <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>, other.isStartFullSize(), other.getAllocator()),</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  auxHashMap_(nullptr)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;{</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll4ArrBytes(this-&gt;lgConfigK_);</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  this-&gt;oooFlag_ = other.isOutOfOrderFlag();</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon : other) { <span class="comment">// all = false, so skip empty values</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  }</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  this-&gt;hipAccum_ = other.getHipAccum();</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  this-&gt;rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;}</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160; </div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;Hll4Array&lt;A&gt;::~Hll4Array() {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  <span class="comment">// hllByteArr deleted in parent</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    AuxHashMap&lt;A&gt;::make_deleter()(auxHashMap_);</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;}</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160; </div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; Hll4Array&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    Hll4Array&lt;A&gt;* hll = <span class="keyword">static_cast&lt;</span>Hll4Array&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    <span class="keyword">using</span> Hll4Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll4Array&lt;A&gt;&gt;;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    Hll4Alloc hll4Alloc(hll-&gt;getAllocator());</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    hll-&gt;~Hll4Array();</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    hll4Alloc.deallocate(hll, 1);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  };</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;}</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160; </div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;Hll4Array&lt;A&gt;* Hll4Array&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <span class="keyword">using</span> Hll4Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll4Array&lt;A&gt;&gt;;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  Hll4Alloc hll4Alloc(this-&gt;getAllocator());</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (hll4Alloc.allocate(1)) Hll4Array&lt;A&gt;(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;}</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;uint32_t Hll4Array&lt;A&gt;::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  AuxHashMap&lt;A&gt;* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  uint32_t auxBytes;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  <span class="keywordflow">if</span> (auxHashMap == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    auxBytes = 4 &lt;&lt; hll_constants::LG_AUX_ARR_INTS[this-&gt;lgConfigK_];</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    auxBytes = 4 &lt;&lt; auxHashMap-&gt;getLgAuxArrInts();</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + getHllByteArrBytes() + auxBytes;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;}</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;uint32_t Hll4Array&lt;A&gt;::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  <span class="keywordflow">return</span> this-&gt;hll4ArrBytes(this-&gt;lgConfigK_);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;}</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;AuxHashMap&lt;A&gt;* Hll4Array&lt;A&gt;::getAuxHashMap()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  <span class="keywordflow">return</span> auxHashMap_;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;}</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160; </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="keywordtype">void</span> Hll4Array&lt;A&gt;::putAuxHashMap(AuxHashMap&lt;A&gt;* auxHashMap) {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  this-&gt;auxHashMap_ = auxHashMap;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;}</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160; </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;uint8_t Hll4Array&lt;A&gt;::getSlot(uint32_t slotNo)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  <span class="keyword">const</span> uint8_t <span class="keywordtype">byte</span> = this-&gt;hllByteArr_[slotNo &gt;&gt; 1];</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="keywordflow">if</span> ((slotNo &amp; 1) &gt; 0) { <span class="comment">// odd?</span></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="keywordflow">return</span> <span class="keywordtype">byte</span> &gt;&gt; 4;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  }</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="keywordflow">return</span> <span class="keywordtype">byte</span> &amp; hll_constants::loNibbleMask;</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;}</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160; </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;uint8_t Hll4Array&lt;A&gt;::adjustRawValue(uint32_t slot, uint8_t value)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="keywordflow">if</span> (value != hll_constants::AUX_TOKEN) <span class="keywordflow">return</span> value + this-&gt;curMin_;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="keywordflow">return</span> auxHashMap_-&gt;mustFindValueFor(slot);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;}</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;HllSketchImpl&lt;A&gt;* Hll4Array&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  internalCouponUpdate(coupon);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;}</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160; </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="keywordtype">void</span> Hll4Array&lt;A&gt;::internalCouponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="keyword">const</span> uint8_t newValue = HllUtil&lt;A&gt;::getValue(coupon);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <span class="keywordflow">if</span> (newValue &lt;= this-&gt;curMin_) {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    <span class="keywordflow">return</span>; <span class="comment">// quick rejection, but only works for large N</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; this-&gt;lgConfigK_) - 1;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(coupon) &amp; configKmask;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  internalHll4Update(slotNo, newValue);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;}</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="keywordtype">void</span> Hll4Array&lt;A&gt;::putSlot(uint32_t slotNo, uint8_t newValue) {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  <span class="keyword">const</span> uint32_t byteno = slotNo &gt;&gt; 1;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;  <span class="keyword">const</span> uint8_t oldValue = this-&gt;hllByteArr_[byteno];</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  <span class="keywordflow">if</span> ((slotNo &amp; 1) == 0) { <span class="comment">// set low nibble</span></div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    this-&gt;hllByteArr_[byteno]</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;      = ((oldValue &amp; hll_constants::hiNibbleMask) | (newValue &amp; hll_constants::loNibbleMask));</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  } <span class="keywordflow">else</span> { <span class="comment">// set high nibble</span></div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    this-&gt;hllByteArr_[byteno]</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;      = ((oldValue &amp; hll_constants::loNibbleMask) | ((newValue &lt;&lt; 4) &amp; hll_constants::hiNibbleMask));</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;  }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;}</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160; </div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="comment">//In C: two-registers.c Line 836 in &quot;hhb_abstract_set_slot_if_new_value_bigger&quot; non-sparse</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="keywordtype">void</span> Hll4Array&lt;A&gt;::internalHll4Update(uint32_t slotNo, uint8_t newVal) {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160; </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  <span class="keyword">const</span> uint8_t rawStoredOldValue = getSlot(slotNo); <span class="comment">// could be a 0</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  <span class="comment">// this is provably a LB:</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;  <span class="keyword">const</span> uint8_t lbOnOldValue = rawStoredOldValue + this-&gt;curMin_; <span class="comment">// lower bound, could be 0</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160; </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;  <span class="keywordflow">if</span> (newVal &gt; lbOnOldValue) { <span class="comment">// 842</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    <span class="comment">// Note: if an AUX_TOKEN exists, then auxHashMap must already exist</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="comment">// 846: rawStoredOldValue == AUX_TOKEN</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keyword">const</span> uint8_t actualOldValue = (rawStoredOldValue &lt; hll_constants::AUX_TOKEN)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;       ? (lbOnOldValue) : (auxHashMap_-&gt;mustFindValueFor(slotNo));</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160; </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    <span class="keywordflow">if</span> (newVal &gt; actualOldValue) { <span class="comment">// 848: actualOldValue could still be 0; newValue &gt; 0</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;      <span class="comment">// we know that the array will change, but we haven&#39;t actually updated yet</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;      this-&gt;hipAndKxQIncrementalUpdate(actualOldValue, newVal);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160; </div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      <span class="comment">// newVal &gt;= curMin</span></div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160; </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      <span class="keyword">const</span> uint8_t shiftedNewValue = newVal - this-&gt;curMin_; <span class="comment">// 874</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;      <span class="comment">// redundant since we know newVal &gt;= curMin,</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;      <span class="comment">// and lgConfigK bounds do not allow overflowing an int</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;      <span class="comment">//assert(shiftedNewValue &gt;= 0);</span></div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;      <span class="keywordflow">if</span> (rawStoredOldValue == hll_constants::AUX_TOKEN) { <span class="comment">// 879</span></div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        <span class="comment">// Given that we have an AUX_TOKEN, there are 4 cases for how to</span></div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;        <span class="comment">// actually modify the data structure</span></div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160; </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;        <span class="keywordflow">if</span> (shiftedNewValue &gt;= hll_constants::AUX_TOKEN) { <span class="comment">// case 1: 881</span></div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;          <span class="comment">// the byte array already contains aux token</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;          <span class="comment">// This is the case where old and new values are both exceptions.</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;          <span class="comment">// The 4-bit array already is AUX_TOKEN, only need to update auxHashMap</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;          auxHashMap_-&gt;mustReplace(slotNo, newVal);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        }</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;        <span class="keywordflow">else</span> { <span class="comment">// case 2: 885</span></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;          <span class="comment">// This is the hypothetical case where the old value is an exception and the new one is not,</span></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;          <span class="comment">// which is impossible given that curMin has not changed here and newVal &gt; oldValue</span></div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        }</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;      } <span class="keywordflow">else</span> { <span class="comment">// rawStoredOldValue != AUX_TOKEN</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        <span class="keywordflow">if</span> (shiftedNewValue &gt;= hll_constants::AUX_TOKEN) { <span class="comment">// case 3: 892</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;          <span class="comment">// This is the case where the old value is not an exception and the new value is.</span></div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;          <span class="comment">// The AUX_TOKEN must be stored in the 4-bit array and the new value</span></div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;          <span class="comment">// added to the exception table</span></div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;          putSlot(slotNo, hll_constants::AUX_TOKEN);</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;          <span class="keywordflow">if</span> (auxHashMap_ == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;            auxHashMap_ = AuxHashMap&lt;A&gt;::newAuxHashMap(hll_constants::LG_AUX_ARR_INTS[this-&gt;lgConfigK_],</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;                this-&gt;lgConfigK_, this-&gt;getAllocator());</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;          }</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;          auxHashMap_-&gt;mustAdd(slotNo, newVal);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        }</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <span class="keywordflow">else</span> { <span class="comment">// case 4: 897</span></div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;          <span class="comment">// This is the case where neither the old value nor the new value is an exception.</span></div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;          <span class="comment">// We just overwrite the 4-bit array with the shifted new value.</span></div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;          putSlot(slotNo, shiftedNewValue);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;        }</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;      }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      <span class="comment">// we just increased a pair value, so it might be time to change curMin</span></div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;      <span class="keywordflow">if</span> (actualOldValue == this-&gt;curMin_) { <span class="comment">// 908</span></div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        --(this-&gt;numAtCurMin_);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        <span class="keywordflow">while</span> (this-&gt;numAtCurMin_ == 0) {</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;          shiftToBiggerCurMin(); <span class="comment">// increases curMin by 1, builds a new aux table</span></div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;          <span class="comment">// shifts values in 4-bit table and recounts curMin</span></div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;        }</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;      }</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    } <span class="comment">// end newVal &lt;= actualOldValue</span></div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  } <span class="comment">// end newValue &lt;= lbOnOldValue -&gt; return, no need to update array</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;}</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160; </div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="comment">// This scheme only works with two double registers (2 kxq values).</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="comment">//   HipAccum, kxq0 and kxq1 remain untouched.</span></div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="comment">//   This changes curMin, numAtCurMin, hllByteArr and auxMap.</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<span class="comment">// Entering this routine assumes that all slots have valid values &gt; 0 and &lt;= 15.</span></div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;<span class="comment">// An AuxHashMap must exist if any values in the current hllByteArray are already 15.</span></div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="comment">// In C: again-two-registers.c Lines 710 &quot;hhb_shift_to_bigger_curmin&quot;</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="keywordtype">void</span> Hll4Array&lt;A&gt;::shiftToBiggerCurMin() {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  <span class="keyword">const</span> uint8_t newCurMin = this-&gt;curMin_ + 1;</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  <span class="keyword">const</span> uint32_t configK = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  <span class="keyword">const</span> uint32_t configKmask = configK - 1;</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160; </div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  uint32_t numAtNewCurMin = 0;</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  uint32_t numAuxTokens = 0;</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160; </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;  <span class="comment">// Walk through the slots of 4-bit array decrementing stored values by one unless it</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  <span class="comment">// equals AUX_TOKEN, where it is left alone but counted to be checked later.</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  <span class="comment">// If oldStoredValue is 0 it is an error.</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;  <span class="comment">// If the decremented value is 0, we increment numAtNewCurMin.</span></div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  <span class="comment">// Because getNibble is masked to 4 bits oldStoredValue can never be &gt; 15 or negative</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; configK; i++) { <span class="comment">//724</span></div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    uint8_t oldStoredValue = getSlot(i);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <span class="keywordflow">if</span> (oldStoredValue == 0) {</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Array slots cannot be 0 at this point.&quot;</span>);</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    }</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <span class="keywordflow">if</span> (oldStoredValue &lt; hll_constants::AUX_TOKEN) {</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;      putSlot(i, --oldStoredValue);</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;      <span class="keywordflow">if</span> (oldStoredValue == 0) { numAtNewCurMin++; }</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    } <span class="keywordflow">else</span> { <span class="comment">//oldStoredValue == AUX_TOKEN</span></div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;      numAuxTokens++;</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;      <span class="keywordflow">if</span> (auxHashMap_ == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;        <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;auxHashMap cannot be null at this point&quot;</span>);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;      }</div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    }</div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  }</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  <span class="comment">// If old AuxHashMap exists, walk through it updating some slots and build a new AuxHashMap</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  <span class="comment">// if needed.</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  AuxHashMap&lt;A&gt;* newAuxMap = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;  <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    uint32_t slotNum;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    uint8_t oldActualVal;</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    uint8_t newShiftedVal;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160; </div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: *auxHashMap_) {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;      slotNum = HllUtil&lt;A&gt;::getLow26(coupon) &amp; configKmask;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;      oldActualVal = HllUtil&lt;A&gt;::getValue(coupon);</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;      <span class="keywordflow">if</span> (oldActualVal &lt; newCurMin) {</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;        <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;oldActualVal &lt; newCurMin when incrementing curMin&quot;</span>);</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;      }</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;      newShiftedVal = oldActualVal - newCurMin;</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160; </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;      <span class="keywordflow">if</span> (getSlot(slotNum) != hll_constants::AUX_TOKEN) {</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;        <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;getSlot(slotNum) != AUX_TOKEN for item in auxiliary hash map&quot;</span>);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;      }</div>
+<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;      <span class="comment">// Array slot != AUX_TOKEN at getSlot(slotNum);</span></div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;      <span class="keywordflow">if</span> (newShiftedVal &lt; hll_constants::AUX_TOKEN) { <span class="comment">// 756</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;        <span class="keywordflow">if</span> (newShiftedVal != 14) {</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;          <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;newShiftedVal != 14 for item in old auxHashMap despite curMin increment&quot;</span>);</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        }</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;        <span class="comment">// The former exception value isn&#39;t one anymore, so it stays out of new AuxHashMap.</span></div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;        <span class="comment">// Correct the AUX_TOKEN value in the HLL array to the newShiftedVal (14).</span></div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;        putSlot(slotNum, newShiftedVal);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;        numAuxTokens--;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;      } <span class="keywordflow">else</span> { <span class="comment">//newShiftedVal &gt;= AUX_TOKEN</span></div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;        <span class="comment">// the former exception remains an exception, so must be added to the newAuxMap</span></div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;        <span class="keywordflow">if</span> (newAuxMap == <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;          newAuxMap = AuxHashMap&lt;A&gt;::newAuxHashMap(hll_constants::LG_AUX_ARR_INTS[this-&gt;lgConfigK_],</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;              this-&gt;lgConfigK_, this-&gt;getAllocator());</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;        }</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;        newAuxMap-&gt;mustAdd(slotNum, oldActualVal);</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;      }</div>
+<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    } <span class="comment">//end scan of oldAuxMap</span></div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;  } <span class="comment">//end if (auxHashMap != null)</span></div>
+<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;  <span class="keywordflow">else</span> { <span class="comment">// oldAuxMap == null</span></div>
+<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    <span class="keywordflow">if</span> (numAuxTokens != 0) {</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;      <span class="keywordflow">throw</span> std::logic_error(<span class="stringliteral">&quot;No auxiliary hash map, but numAuxTokens != 0&quot;</span>);</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    }</div>
+<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;  }</div>
+<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160; </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;  <span class="keywordflow">if</span> (newAuxMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="keywordflow">if</span> (newAuxMap-&gt;getAuxCount() != numAuxTokens) {</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;      <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Inconsistent counts: auxCount: &quot;</span> + std::to_string(newAuxMap-&gt;getAuxCount())</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;                               + <span class="stringliteral">&quot;, HLL tokesn: &quot;</span> + std::to_string(numAuxTokens));</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    }</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;  }</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160; </div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;  <span class="keywordflow">if</span> (auxHashMap_ != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    AuxHashMap&lt;A&gt;::make_deleter()(auxHashMap_);</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;  }</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;  auxHashMap_ = newAuxMap;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160; </div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;  this-&gt;curMin_ = newCurMin;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  this-&gt;numAtCurMin_ = numAtNewCurMin;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;}</div>
+<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160; </div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;<span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator Hll4Array&lt;A&gt;::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator(this-&gt;hllByteArr_.data(), 1 &lt;&lt; this-&gt;lgConfigK_, 0, this-&gt;tgtHllType_,</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;      auxHashMap_, this-&gt;curMin_, all);</div>
+<div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;}</div>
+<div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160; </div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;<span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator Hll4Array&lt;A&gt;::end()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator(this-&gt;hllByteArr_.data(), 1 &lt;&lt; this-&gt;lgConfigK_, 1 &lt;&lt; this-&gt;lgConfigK_,</div>
+<div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;      this-&gt;tgtHllType_, auxHashMap_, this-&gt;curMin_, <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;}</div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160; </div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;}</div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160; </div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _HLL4ARRAY_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition:</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">datasketches::HLL_4</a></div><div class="ttdeci">@ HLL_4</div><div class="ttdoc">4 bits per entry (most compact, size may vary)</div><div class="ttdef"><b>Definition:</b> hll.hpp:73</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/Hll4Array_8hpp_source.html b/docs/master/Hll4Array_8hpp_source.html
index b920b64..ce8dfbd 100644
--- a/docs/master/Hll4Array_8hpp_source.html
+++ b/docs/master/Hll4Array_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/Hll4Array.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,80 +65,81 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">Hll4Array.hpp</div></div>
+  <div class="headertitle">
+<div class="title">Hll4Array.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _HLL4ARRAY_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _HLL4ARRAY_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;AuxHashMap.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="preprocessor">#include &quot;HllArray.hpp&quot;</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span> </div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span> </div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">class </span>Hll4Array final : <span class="keyword">public</span> HllArray&lt;A&gt; {</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>  <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span>    <span class="keyword">explicit</span> Hll4Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>    <span class="keyword">explicit</span> Hll4Array(<span class="keyword">const</span> Hll4Array&lt;A&gt;&amp; that);</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>    <span class="keyword">explicit</span> Hll4Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; that);</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>    <span class="keyword">virtual</span> ~Hll4Array();</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span> </div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>    <span class="keyword">virtual</span> Hll4Array* copy() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span> </div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>    <span class="keyword">inline</span> uint8_t getSlot(uint32_t slotNo) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> putSlot(uint32_t slotNo, uint8_t value);</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>    <span class="keyword">inline</span> uint8_t adjustRawValue(uint32_t index, uint8_t value) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>    <span class="keyword">virtual</span> uint32_t getUpdatableSerializationBytes() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>    <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span> </div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon) <span class="keyword">final</span>;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span> </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>    <span class="keyword">virtual</span> AuxHashMap&lt;A&gt;* getAuxHashMap() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>    <span class="comment">// does *not* delete old map if overwriting</span></div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>    <span class="keywordtype">void</span> putAuxHashMap(AuxHashMap&lt;A&gt;* auxHashMap);</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span> </div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>    <span class="keyword">virtual</span> <span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>    <span class="keyword">virtual</span> <span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator end() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span> </div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>  <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>    <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>    <span class="keywordtype">void</span> internalHll4Update(uint32_t slotNo, uint8_t newVal);</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>    <span class="keywordtype">void</span> shiftToBiggerCurMin();</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span> </div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>    AuxHashMap&lt;A&gt;* auxHashMap_;</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>};</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span> </div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>}</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span> </div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span><span class="preprocessor">#endif </span><span class="comment">/* _HLL4ARRAY_HPP_ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _HLL4ARRAY_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _HLL4ARRAY_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;AuxHashMap.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;HllArray.hpp&quot;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">class </span>Hll4Array final : <span class="keyword">public</span> HllArray&lt;A&gt; {</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keyword">explicit</span> Hll4Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    <span class="keyword">explicit</span> Hll4Array(<span class="keyword">const</span> Hll4Array&lt;A&gt;&amp; that);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keyword">explicit</span> Hll4Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; that);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keyword">virtual</span> ~Hll4Array();</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keyword">virtual</span> Hll4Array* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="keyword">inline</span> uint8_t getSlot(uint32_t slotNo) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> putSlot(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">inline</span> uint8_t adjustRawValue(uint32_t index, uint8_t value) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">virtual</span> uint32_t getUpdatableSerializationBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon) <span class="keyword">final</span>;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="keyword">virtual</span> AuxHashMap&lt;A&gt;* getAuxHashMap() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="comment">// does *not* delete old map if overwriting</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keywordtype">void</span> putAuxHashMap(AuxHashMap&lt;A&gt;* auxHashMap);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator begin(<span class="keywordtype">bool</span> all = <span class="keyword">false</span>) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keyword">virtual</span> <span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator end() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keywordtype">void</span> internalHll4Update(uint32_t slotNo, uint8_t newVal);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keywordtype">void</span> shiftToBiggerCurMin();</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160; </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    AuxHashMap&lt;A&gt;* auxHashMap_;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;};</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160; </div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;}</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _HLL4ARRAY_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/Hll6Array-internal_8hpp_source.html b/docs/master/Hll6Array-internal_8hpp_source.html
index 0f01598..f928407 100644
--- a/docs/master/Hll6Array-internal_8hpp_source.html
+++ b/docs/master/Hll6Array-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/Hll6Array-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,141 +65,142 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">Hll6Array-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">Hll6Array-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _HLL6ARRAY_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _HLL6ARRAY_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &lt;cstring&gt;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &quot;Hll6Array.hpp&quot;</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span> </div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>Hll6Array&lt;A&gt;::Hll6Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator):</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span>HllArray&lt;A&gt;(lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>, startFullSize, allocator)</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>{</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll6ArrBytes(lgConfigK);</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span>  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>}</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span> </div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>Hll6Array&lt;A&gt;::Hll6Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; other) :</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>  HllArray&lt;A&gt;(other.getLgConfigK(), <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>, other.isStartFullSize(), other.getAllocator())</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>{</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll6ArrBytes(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>  this-&gt;oooFlag_ = other.isOutOfOrderFlag();</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>  uint32_t num_zeros = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>  </div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon : other) { <span class="comment">// all = false, so skip empty values</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>    num_zeros--;</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>    internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>  }</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>  </div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>  this-&gt;numAtCurMin_ = num_zeros;</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>  this-&gt;hipAccum_ = other.getHipAccum();</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>  this-&gt;rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>}</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span> </div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; Hll6Array&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>    <span class="keyword">using </span>Hll6Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll6Array&lt;A&gt;&gt;;</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>    Hll6Array&lt;A&gt;* hll = <span class="keyword">static_cast&lt;</span>Hll6Array&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>    Hll6Alloc hll6Alloc(hll-&gt;getAllocator());</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>    hll-&gt;~Hll6Array();</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>    hll6Alloc.deallocate(hll, 1);</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span>  };</div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>}</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span> </div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>Hll6Array&lt;A&gt;* Hll6Array&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>  <span class="keyword">using </span>Hll6Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll6Array&lt;A&gt;&gt;;</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>  Hll6Alloc hll6Alloc(this-&gt;getAllocator());</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (hll6Alloc.allocate(1)) Hll6Array&lt;A&gt;(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>}</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span> </div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>uint8_t Hll6Array&lt;A&gt;::getSlot(uint32_t slotNo)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>  <span class="keyword">const</span> uint32_t startBit = slotNo * 6;</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>  <span class="keyword">const</span> uint32_t shift = startBit &amp; 0x7;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>  <span class="keyword">const</span> uint32_t byteIdx = startBit &gt;&gt; 3;  </div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>  <span class="keyword">const</span> uint16_t twoByteVal = (this-&gt;hllByteArr_[byteIdx + 1] &lt;&lt; 8) | this-&gt;hllByteArr_[byteIdx];</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>  <span class="keywordflow">return</span> (twoByteVal &gt;&gt; shift) &amp; hll_constants::VAL_MASK_6;</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>}</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span> </div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span><span class="keywordtype">void</span> Hll6Array&lt;A&gt;::putSlot(uint32_t slotNo, uint8_t value) {</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>  <span class="keyword">const</span> uint32_t startBit = slotNo * 6;</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>  <span class="keyword">const</span> uint32_t shift = startBit &amp; 0x7;</div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>  <span class="keyword">const</span> uint32_t byteIdx = startBit &gt;&gt; 3;</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>  <span class="keyword">const</span> uint16_t valShifted = (value &amp; 0x3F) &lt;&lt; shift;</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span>  uint16_t curMasked = (this-&gt;hllByteArr_[byteIdx + 1] &lt;&lt; 8) | this-&gt;hllByteArr_[byteIdx];</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>  curMasked &amp;= (~(hll_constants::VAL_MASK_6 &lt;&lt; shift));</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>  <span class="keyword">const</span> uint16_t insert = curMasked | valShifted;</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>  this-&gt;hllByteArr_[byteIdx]     = insert &amp; 0xFF;</div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>  this-&gt;hllByteArr_[byteIdx + 1] = (insert &amp; 0xFF00) &gt;&gt; 8;</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>}</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span> </div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>uint32_t Hll6Array&lt;A&gt;::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>  <span class="keywordflow">return</span> this-&gt;hll6ArrBytes(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>}</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span> </div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>HllSketchImpl&lt;A&gt;* Hll6Array&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>  internalCouponUpdate(coupon);</div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>}</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span> </div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span><span class="keywordtype">void</span> Hll6Array&lt;A&gt;::internalCouponUpdate(uint32_t coupon) {</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; this-&gt;lgConfigK_) - 1;</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>  <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(coupon) &amp; configKmask;</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>  <span class="keyword">const</span> uint8_t newVal = HllUtil&lt;A&gt;::getValue(coupon);</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span> </div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>  <span class="keyword">const</span> uint8_t curVal = getSlot(slotNo);</div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>  <span class="keywordflow">if</span> (newVal &gt; curVal) {</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>    putSlot(slotNo, newVal);</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>    this-&gt;hipAndKxQIncrementalUpdate(curVal, newVal);</div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>    <span class="keywordflow">if</span> (curVal == 0) {</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>      this-&gt;numAtCurMin_--; <span class="comment">// interpret numAtCurMin as num zeros</span></div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>    }</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>  }</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span>}</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span> </div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>}</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span> </div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span><span class="preprocessor">#endif </span><span class="comment">// _HLL6ARRAY_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">datasketches::HLL_6</a></div><div class="ttdeci">@ HLL_6</div><div class="ttdoc">6 bits per entry (fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:74</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _HLL6ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _HLL6ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;Hll6Array.hpp&quot;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;Hll6Array&lt;A&gt;::Hll6Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator):</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;HllArray&lt;A&gt;(lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>, startFullSize, allocator)</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;{</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll6ArrBytes(lgConfigK);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;}</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;Hll6Array&lt;A&gt;::Hll6Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; other) :</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;  HllArray&lt;A&gt;(other.getLgConfigK(), <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>, other.isStartFullSize(), other.getAllocator())</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;{</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll6ArrBytes(this-&gt;lgConfigK_);</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;  this-&gt;oooFlag_ = other.isOutOfOrderFlag();</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;  uint32_t num_zeros = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon : other) { <span class="comment">// all = false, so skip empty values</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    num_zeros--;</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;  }</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  </div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  this-&gt;numAtCurMin_ = num_zeros;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  this-&gt;hipAccum_ = other.getHipAccum();</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  this-&gt;rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;}</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; Hll6Array&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="keyword">using</span> Hll6Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll6Array&lt;A&gt;&gt;;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    Hll6Array&lt;A&gt;* hll = <span class="keyword">static_cast&lt;</span>Hll6Array&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    Hll6Alloc hll6Alloc(hll-&gt;getAllocator());</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    hll-&gt;~Hll6Array();</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    hll6Alloc.deallocate(hll, 1);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  };</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;}</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160; </div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;Hll6Array&lt;A&gt;* Hll6Array&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="keyword">using</span> Hll6Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll6Array&lt;A&gt;&gt;;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  Hll6Alloc hll6Alloc(this-&gt;getAllocator());</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (hll6Alloc.allocate(1)) Hll6Array&lt;A&gt;(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;}</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;uint8_t Hll6Array&lt;A&gt;::getSlot(uint32_t slotNo)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  <span class="keyword">const</span> uint32_t startBit = slotNo * 6;</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  <span class="keyword">const</span> uint32_t shift = startBit &amp; 0x7;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <span class="keyword">const</span> uint32_t byteIdx = startBit &gt;&gt; 3;  </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  <span class="keyword">const</span> uint16_t twoByteVal = (this-&gt;hllByteArr_[byteIdx + 1] &lt;&lt; 8) | this-&gt;hllByteArr_[byteIdx];</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  <span class="keywordflow">return</span> (twoByteVal &gt;&gt; shift) &amp; hll_constants::VAL_MASK_6;</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;}</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160; </div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="keywordtype">void</span> Hll6Array&lt;A&gt;::putSlot(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="keyword">const</span> uint32_t startBit = slotNo * 6;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  <span class="keyword">const</span> uint32_t shift = startBit &amp; 0x7;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  <span class="keyword">const</span> uint32_t byteIdx = startBit &gt;&gt; 3;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <span class="keyword">const</span> uint16_t valShifted = (value &amp; 0x3F) &lt;&lt; shift;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  uint16_t curMasked = (this-&gt;hllByteArr_[byteIdx + 1] &lt;&lt; 8) | this-&gt;hllByteArr_[byteIdx];</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  curMasked &amp;= (~(hll_constants::VAL_MASK_6 &lt;&lt; shift));</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <span class="keyword">const</span> uint16_t insert = curMasked | valShifted;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  this-&gt;hllByteArr_[byteIdx]     = insert &amp; 0xFF;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  this-&gt;hllByteArr_[byteIdx + 1] = (insert &amp; 0xFF00) &gt;&gt; 8;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;}</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;uint32_t Hll6Array&lt;A&gt;::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  <span class="keywordflow">return</span> this-&gt;hll6ArrBytes(this-&gt;lgConfigK_);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;}</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160; </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;HllSketchImpl&lt;A&gt;* Hll6Array&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  internalCouponUpdate(coupon);</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;}</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="keywordtype">void</span> Hll6Array&lt;A&gt;::internalCouponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; this-&gt;lgConfigK_) - 1;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(coupon) &amp; configKmask;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  <span class="keyword">const</span> uint8_t newVal = HllUtil&lt;A&gt;::getValue(coupon);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  <span class="keyword">const</span> uint8_t curVal = getSlot(slotNo);</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  <span class="keywordflow">if</span> (newVal &gt; curVal) {</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    putSlot(slotNo, newVal);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    this-&gt;hipAndKxQIncrementalUpdate(curVal, newVal);</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="keywordflow">if</span> (curVal == 0) {</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      this-&gt;numAtCurMin_--; <span class="comment">// interpret numAtCurMin as num zeros</span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;}</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160; </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;}</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _HLL6ARRAY_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition:</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">datasketches::HLL_6</a></div><div class="ttdeci">@ HLL_6</div><div class="ttdoc">6 bits per entry (fixed size)</div><div class="ttdef"><b>Definition:</b> hll.hpp:74</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/Hll6Array_8hpp_source.html b/docs/master/Hll6Array_8hpp_source.html
index 996786b..53db56c 100644
--- a/docs/master/Hll6Array_8hpp_source.html
+++ b/docs/master/Hll6Array_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/Hll6Array.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,68 +65,69 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">Hll6Array.hpp</div></div>
+  <div class="headertitle">
+<div class="title">Hll6Array.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _HLL6ARRAY_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _HLL6ARRAY_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;HllArray.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">class </span>Hll6Iterator;</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="keyword">class </span>Hll6Array final : <span class="keyword">public</span> HllArray&lt;A&gt; {</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>  <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>    Hll6Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span>    <span class="keyword">explicit</span> Hll6Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; that);</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span> </div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>    <span class="keyword">virtual</span> ~Hll6Array() = <span class="keywordflow">default</span>;</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span> </div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>    <span class="keyword">virtual</span> Hll6Array* copy() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span> </div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>    <span class="keyword">inline</span> uint8_t getSlot(uint32_t slotNo) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> putSlot(uint32_t slotNo, uint8_t value);</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon) <span class="keyword">final</span>;</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span> </div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>    <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span> </div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>  <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>    <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>};</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span> </div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>}</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span><span class="preprocessor">#endif </span><span class="comment">/* _HLL6ARRAY_HPP_ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _HLL6ARRAY_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _HLL6ARRAY_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;HllArray.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">class </span>Hll6Iterator;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">class </span>Hll6Array final : <span class="keyword">public</span> HllArray&lt;A&gt; {</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    Hll6Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keyword">explicit</span> Hll6Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; that);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keyword">virtual</span> ~Hll6Array() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keyword">virtual</span> Hll6Array* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keyword">inline</span> uint8_t getSlot(uint32_t slotNo) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> putSlot(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon) <span class="keyword">final</span>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;};</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;}</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _HLL6ARRAY_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/Hll8Array-internal_8hpp_source.html b/docs/master/Hll8Array-internal_8hpp_source.html
index 55d708d..62463ca 100644
--- a/docs/master/Hll8Array-internal_8hpp_source.html
+++ b/docs/master/Hll8Array-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/Hll8Array-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,219 +65,220 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">Hll8Array-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">Hll8Array-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _HLL8ARRAY_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _HLL8ARRAY_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;Hll8Array.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span>Hll8Array&lt;A&gt;::Hll8Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator):</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span>HllArray&lt;A&gt;(lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, startFullSize, allocator)</div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>{</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll8ArrBytes(lgConfigK);</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>}</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>Hll8Array&lt;A&gt;::Hll8Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; other):</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>  HllArray&lt;A&gt;(other.getLgConfigK(), <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, other.isStartFullSize(), other.getAllocator())</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>{</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll8ArrBytes(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>  this-&gt;oooFlag_ = other.isOutOfOrderFlag();</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>  uint32_t num_zeros = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>  </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon : other) { <span class="comment">// all = false, so skip empty values</span></div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>    num_zeros--;</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>    internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>  }</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>  </div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>  this-&gt;numAtCurMin_ = num_zeros;</div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>  this-&gt;hipAccum_ = other.getHipAccum();</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>  this-&gt;rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>}</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span> </div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; Hll8Array&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>    Hll8Array&lt;A&gt;* hll = <span class="keyword">static_cast&lt;</span>Hll8Array&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>    <span class="keyword">using </span>Hll8Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll8Array&lt;A&gt;&gt;;</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>    Hll8Alloc hll8Alloc(hll-&gt;getAllocator());</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>    hll-&gt;~Hll8Array();</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>    hll8Alloc.deallocate(hll, 1);</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>  };</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>}</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span> </div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>Hll8Array&lt;A&gt;* Hll8Array&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>  <span class="keyword">using </span>Hll8Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll8Array&lt;A&gt;&gt;;</div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>  Hll8Alloc hll8Alloc(this-&gt;getAllocator());</div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>  <span class="keywordflow">return</span> <span class="keyword">new</span> (hll8Alloc.allocate(1)) Hll8Array&lt;A&gt;(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>}</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span> </div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>uint8_t Hll8Array&lt;A&gt;::getSlot(uint32_t slotNo)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>  <span class="keywordflow">return</span> this-&gt;hllByteArr_[slotNo];</div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>}</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span> </div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span><span class="keywordtype">void</span> Hll8Array&lt;A&gt;::putSlot(uint32_t slotNo, uint8_t value) {</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>  this-&gt;hllByteArr_[slotNo] = value;</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>}</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span> </div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>uint32_t Hll8Array&lt;A&gt;::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>  <span class="keywordflow">return</span> this-&gt;hll8ArrBytes(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>}</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span> </div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>HllSketchImpl&lt;A&gt;* Hll8Array&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span>  internalCouponUpdate(coupon);</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>}</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span> </div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span><span class="keywordtype">void</span> Hll8Array&lt;A&gt;::internalCouponUpdate(uint32_t coupon) {</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; this-&gt;lgConfigK_) - 1;</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>  <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(coupon) &amp; configKmask;</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>  <span class="keyword">const</span> uint8_t newVal = HllUtil&lt;A&gt;::getValue(coupon);</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span> </div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>  <span class="keyword">const</span> uint8_t curVal = this-&gt;hllByteArr_[slotNo];</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>  <span class="keywordflow">if</span> (newVal &gt; curVal) {</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>    this-&gt;hllByteArr_[slotNo] = newVal;</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>    this-&gt;hipAndKxQIncrementalUpdate(curVal, newVal);</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span>    this-&gt;numAtCurMin_ -= curVal == 0; <span class="comment">// interpret numAtCurMin as num zeros</span></div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>  }</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>}</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span> </div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span><span class="keywordtype">void</span> Hll8Array&lt;A&gt;::mergeList(<span class="keyword">const</span> CouponList&lt;A&gt;&amp; src) {</div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: src) {</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>    internalCouponUpdate(coupon);</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>  }</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>}</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span> </div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span><span class="keywordtype">void</span> Hll8Array&lt;A&gt;::mergeHll(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; src) {</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span>  <span class="comment">// at this point src_k &gt;= dst_k</span></div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>  <span class="comment">// we can optimize further when the k values are equal</span></div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>  <span class="keywordflow">if</span> (this-&gt;getLgConfigK() == src.getLgConfigK()) {</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>    <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_8) {</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>      uint32_t i = 0;</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span>      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> value: src.getHllArray()) {</div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span>        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>        ++i;</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span>      }</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_6) {</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>      <span class="keyword">const</span> uint32_t src_k = 1 &lt;&lt; src.getLgConfigK();</div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span>      uint32_t i = 0;</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>      <span class="keyword">const</span> uint8_t* ptr = src.getHllArray().data();</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>      <span class="keywordflow">while</span> (i &lt; src_k) {</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>        uint8_t value = *ptr &amp; 0x3f;</div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span>        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span>        ++i;</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>        value = *ptr++ &gt;&gt; 6;</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>        value |= (*ptr &amp; 0x0f) &lt;&lt; 2;</div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>        ++i;</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>        value = *ptr++ &gt;&gt; 4;</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>        value |= (*ptr &amp; 3) &lt;&lt; 4;</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span>        ++i;</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>        value = *ptr++ &gt;&gt; 2;</div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span>        ++i;</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span>      }</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span>    } <span class="keywordflow">else</span> { <span class="comment">// HLL_4</span></div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>      <span class="keyword">const</span> <span class="keyword">auto</span>&amp; src4 = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>Hll4Array&lt;A&gt;&amp;<span class="keyword">&gt;</span>(src);</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>      uint32_t i = 0;</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> <span class="keywordtype">byte</span>: src.getHllArray()) {</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span>        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], src4.adjustRawValue(i, <span class="keywordtype">byte</span> &amp; hll_constants::loNibbleMask));</div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span>        ++i;</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], src4.adjustRawValue(i, <span class="keywordtype">byte</span> &gt;&gt; 4));</div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>        ++i;</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>      }</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span>    }</div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span>  } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span>    <span class="comment">// src_k &gt; dst_k</span></div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span>    <span class="keyword">const</span> uint32_t dst_mask = (1 &lt;&lt; this-&gt;getLgConfigK()) - 1;</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span>    <span class="comment">// special treatment below to optimize performance</span></div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span>    <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_8) {</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span>      uint32_t i = 0;</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span>      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> value: src.getHllArray()) {</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>        processValue(i++, dst_mask, value);</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span>      }</div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_6) {</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span>      <span class="keyword">const</span> uint32_t src_k = 1 &lt;&lt; src.getLgConfigK();</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span>      uint32_t i = 0;</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span>      <span class="keyword">const</span> uint8_t* ptr = src.getHllArray().data();</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>      <span class="keywordflow">while</span> (i &lt; src_k) {</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>        uint8_t value = *ptr &amp; 0x3f;</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span>        processValue(i++, dst_mask, value);</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span>        value = *ptr++ &gt;&gt; 6;</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>        value |= (*ptr &amp; 0x0f) &lt;&lt; 2;</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>        processValue(i++, dst_mask, value);</div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>        value = *ptr++ &gt;&gt; 4;</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>        value |= (*ptr &amp; 3) &lt;&lt; 4;</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span>        processValue(i++, dst_mask, value);</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>        value = *ptr++ &gt;&gt; 2;</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span>        processValue(i++, dst_mask, value);</div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span>      }</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>    } <span class="keywordflow">else</span> { <span class="comment">// HLL_4</span></div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span>      <span class="keyword">const</span> <span class="keyword">auto</span>&amp; src4 = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>Hll4Array&lt;A&gt;&amp;<span class="keyword">&gt;</span>(src);</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>      uint32_t i = 0;</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> <span class="keywordtype">byte</span>: src.getHllArray()) {</div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span>        processValue(i, dst_mask, src4.adjustRawValue(i, <span class="keywordtype">byte</span> &amp; hll_constants::loNibbleMask));</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span>        ++i;</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span>        processValue(i, dst_mask, src4.adjustRawValue(i, <span class="keywordtype">byte</span> &gt;&gt; 4));</div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>        ++i;</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>      }</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>    }</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>  }</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>  this-&gt;setRebuildKxqCurminFlag(<span class="keyword">true</span>);</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>}</div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span> </div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span> </div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span><span class="keywordtype">void</span> Hll8Array&lt;A&gt;::processValue(uint32_t slot, uint32_t mask, uint8_t new_val) {</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> index = slot &amp; mask;</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>  this-&gt;hllByteArr_[index] = std::max(this-&gt;hllByteArr_[index], new_val);</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>}</div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span> </div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>}</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span> </div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span><span class="preprocessor">#endif </span><span class="comment">// _HLL8ARRAY_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">datasketches::HLL_8</a></div><div class="ttdeci">@ HLL_8</div><div class="ttdoc">8 bits per entry (fastest, fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:75</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _HLL8ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _HLL8ARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;Hll8Array.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;Hll8Array&lt;A&gt;::Hll8Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator):</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;HllArray&lt;A&gt;(lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, startFullSize, allocator)</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;{</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll8ArrBytes(lgConfigK);</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;}</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;Hll8Array&lt;A&gt;::Hll8Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; other):</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;  HllArray&lt;A&gt;(other.getLgConfigK(), <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a>::<a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>, other.isStartFullSize(), other.getAllocator())</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;{</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">int</span> numBytes = this-&gt;hll8ArrBytes(this-&gt;lgConfigK_);</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;  this-&gt;hllByteArr_.resize(numBytes, 0);</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;  this-&gt;oooFlag_ = other.isOutOfOrderFlag();</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;  uint32_t num_zeros = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;  </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon : other) { <span class="comment">// all = false, so skip empty values</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    num_zeros--;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    internalCouponUpdate(coupon); <span class="comment">// updates KxQ registers</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;  }</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;  this-&gt;numAtCurMin_ = num_zeros;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  this-&gt;hipAccum_ = other.getHipAccum();</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  this-&gt;rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;}</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; Hll8Array&lt;A&gt;::get_deleter()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  <span class="keywordflow">return</span> [](HllSketchImpl&lt;A&gt;* ptr) {</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    Hll8Array&lt;A&gt;* hll = <span class="keyword">static_cast&lt;</span>Hll8Array&lt;A&gt;*<span class="keyword">&gt;</span>(ptr);</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keyword">using</span> Hll8Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll8Array&lt;A&gt;&gt;;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    Hll8Alloc hll8Alloc(hll-&gt;getAllocator());</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    hll-&gt;~Hll8Array();</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    hll8Alloc.deallocate(hll, 1);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  };</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;}</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;Hll8Array&lt;A&gt;* Hll8Array&lt;A&gt;::copy()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  <span class="keyword">using</span> Hll8Alloc = <span class="keyword">typename</span> std::allocator_traits&lt;A&gt;::template rebind_alloc&lt;Hll8Array&lt;A&gt;&gt;;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  Hll8Alloc hll8Alloc(this-&gt;getAllocator());</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">new</span> (hll8Alloc.allocate(1)) Hll8Array&lt;A&gt;(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;}</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;uint8_t Hll8Array&lt;A&gt;::getSlot(uint32_t slotNo)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="keywordflow">return</span> this-&gt;hllByteArr_[slotNo];</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;}</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="keywordtype">void</span> Hll8Array&lt;A&gt;::putSlot(uint32_t slotNo, uint8_t value) {</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;  this-&gt;hllByteArr_[slotNo] = value;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;}</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;uint32_t Hll8Array&lt;A&gt;::getHllByteArrBytes()<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  <span class="keywordflow">return</span> this-&gt;hll8ArrBytes(this-&gt;lgConfigK_);</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;}</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160; </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;HllSketchImpl&lt;A&gt;* Hll8Array&lt;A&gt;::couponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  internalCouponUpdate(coupon);</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="keywordflow">return</span> <span class="keyword">this</span>;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;}</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160; </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="keywordtype">void</span> Hll8Array&lt;A&gt;::internalCouponUpdate(uint32_t coupon) {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  <span class="keyword">const</span> uint32_t configKmask = (1 &lt;&lt; this-&gt;lgConfigK_) - 1;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <span class="keyword">const</span> uint32_t slotNo = HllUtil&lt;A&gt;::getLow26(coupon) &amp; configKmask;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <span class="keyword">const</span> uint8_t newVal = HllUtil&lt;A&gt;::getValue(coupon);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keyword">const</span> uint8_t curVal = this-&gt;hllByteArr_[slotNo];</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  <span class="keywordflow">if</span> (newVal &gt; curVal) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    this-&gt;hllByteArr_[slotNo] = newVal;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    this-&gt;hipAndKxQIncrementalUpdate(curVal, newVal);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    this-&gt;numAtCurMin_ -= curVal == 0; <span class="comment">// interpret numAtCurMin as num zeros</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;}</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="keywordtype">void</span> Hll8Array&lt;A&gt;::mergeList(<span class="keyword">const</span> CouponList&lt;A&gt;&amp; src) {</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> coupon: src) {</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    internalCouponUpdate(coupon);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;}</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160; </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;<span class="keywordtype">void</span> Hll8Array&lt;A&gt;::mergeHll(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; src) {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  <span class="comment">// at this point src_k &gt;= dst_k</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  <span class="comment">// we can optimize further when the k values are equal</span></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  <span class="keywordflow">if</span> (this-&gt;getLgConfigK() == src.getLgConfigK()) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_8) {</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;      uint32_t i = 0;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> value: src.getHllArray()) {</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        ++i;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;      }</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_6) {</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;      <span class="keyword">const</span> uint32_t src_k = 1 &lt;&lt; src.getLgConfigK();</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;      uint32_t i = 0;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;      <span class="keyword">const</span> uint8_t* ptr = src.getHllArray().data();</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;      <span class="keywordflow">while</span> (i &lt; src_k) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        uint8_t value = *ptr &amp; 0x3f;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        ++i;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        value = *ptr++ &gt;&gt; 6;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        value |= (*ptr &amp; 0x0f) &lt;&lt; 2;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        ++i;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        value = *ptr++ &gt;&gt; 4;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        value |= (*ptr &amp; 3) &lt;&lt; 4;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        ++i;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        value = *ptr++ &gt;&gt; 2;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], value);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        ++i;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;      }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    } <span class="keywordflow">else</span> { <span class="comment">// HLL_4</span></div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;      <span class="keyword">const</span> <span class="keyword">auto</span>&amp; src4 = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>Hll4Array&lt;A&gt;&amp;<span class="keyword">&gt;</span>(src);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;      uint32_t i = 0;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> <span class="keywordtype">byte</span>: src.getHllArray()) {</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], src4.adjustRawValue(i, <span class="keywordtype">byte</span> &amp; hll_constants::loNibbleMask));</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        ++i;</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        this-&gt;hllByteArr_[i] = std::max(this-&gt;hllByteArr_[i], src4.adjustRawValue(i, <span class="keywordtype">byte</span> &gt;&gt; 4));</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        ++i;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;      }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    }</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="comment">// src_k &gt; dst_k</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="keyword">const</span> uint32_t dst_mask = (1 &lt;&lt; this-&gt;getLgConfigK()) - 1;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="comment">// special treatment below to optimize performance</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_8) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;      uint32_t i = 0;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> value: src.getHllArray()) {</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;      }</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (src.getTgtHllType() == target_hll_type::HLL_6) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;      <span class="keyword">const</span> uint32_t src_k = 1 &lt;&lt; src.getLgConfigK();</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;      uint32_t i = 0;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;      <span class="keyword">const</span> uint8_t* ptr = src.getHllArray().data();</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;      <span class="keywordflow">while</span> (i &lt; src_k) {</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        uint8_t value = *ptr &amp; 0x3f;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;        processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        value = *ptr++ &gt;&gt; 6;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        value |= (*ptr &amp; 0x0f) &lt;&lt; 2;</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;        processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;        value = *ptr++ &gt;&gt; 4;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        value |= (*ptr &amp; 3) &lt;&lt; 4;</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;        value = *ptr++ &gt;&gt; 2;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        processValue(i++, dst_mask, value);</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;      }</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    } <span class="keywordflow">else</span> { <span class="comment">// HLL_4</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;      <span class="keyword">const</span> <span class="keyword">auto</span>&amp; src4 = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>Hll4Array&lt;A&gt;&amp;<span class="keyword">&gt;</span>(src);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;      uint32_t i = 0;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> <span class="keywordtype">byte</span>: src.getHllArray()) {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;        processValue(i, dst_mask, src4.adjustRawValue(i, <span class="keywordtype">byte</span> &amp; hll_constants::loNibbleMask));</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;        ++i;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        processValue(i, dst_mask, src4.adjustRawValue(i, <span class="keywordtype">byte</span> &gt;&gt; 4));</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        ++i;</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      }</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;    }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  this-&gt;setRebuildKxqCurminFlag(<span class="keyword">true</span>);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;}</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160; </div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160; </div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="keywordtype">void</span> Hll8Array&lt;A&gt;::processValue(uint32_t slot, uint32_t mask, uint8_t new_val) {</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> index = slot &amp; mask;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  this-&gt;hllByteArr_[index] = std::max(this-&gt;hllByteArr_[index], new_val);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;}</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160; </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;}</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160; </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _HLL8ARRAY_INTERNAL_HPP_</span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition:</b> hll.hpp:72</div></div>
+<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">datasketches::HLL_8</a></div><div class="ttdeci">@ HLL_8</div><div class="ttdoc">8 bits per entry (fastest, fixed size)</div><div class="ttdef"><b>Definition:</b> hll.hpp:75</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/Hll8Array_8hpp_source.html b/docs/master/Hll8Array_8hpp_source.html
index 103ae6f..083549d 100644
--- a/docs/master/Hll8Array_8hpp_source.html
+++ b/docs/master/Hll8Array_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/Hll8Array.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,71 +65,72 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">Hll8Array.hpp</div></div>
+  <div class="headertitle">
+<div class="title">Hll8Array.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _HLL8ARRAY_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _HLL8ARRAY_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;HllArray.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span> </div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">class </span>Hll8Iterator;</div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span> </div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="keyword">class </span>Hll8Array final : <span class="keyword">public</span> HllArray&lt;A&gt; {</div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span>  <span class="keyword">public</span>:</div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>    Hll8Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator);</div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span>    <span class="keyword">explicit</span> Hll8Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; that);</div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span> </div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>    <span class="keyword">virtual</span> ~Hll8Array() = <span class="keywordflow">default</span>;</div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span> </div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>    <span class="keyword">virtual</span> Hll8Array&lt;A&gt;* copy() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span> </div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>    <span class="keyword">inline</span> uint8_t getSlot(uint32_t slotNo) <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> putSlot(uint32_t slotNo, uint8_t value);</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span> </div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon) <span class="keyword">final</span>;</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>    <span class="keywordtype">void</span> mergeList(<span class="keyword">const</span> CouponList&lt;A&gt;&amp; src);</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>    <span class="keywordtype">void</span> mergeHll(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; src);</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span> </div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>    <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span>;</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span> </div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>  <span class="keyword">private</span>:</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>    <span class="keyword">inline</span> <span class="keywordtype">void</span> processValue(uint32_t slot, uint32_t mask, uint8_t new_val);</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>};</div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span> </div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>}</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span> </div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span><span class="preprocessor">#endif </span><span class="comment">/* _HLL8ARRAY_HPP_ */</span><span class="preprocessor"></span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _HLL8ARRAY_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _HLL8ARRAY_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;HllArray.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">class </span>Hll8Iterator;</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">class </span>Hll8Array final : <span class="keyword">public</span> HllArray&lt;A&gt; {</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  <span class="keyword">public</span>:</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    Hll8Array(uint8_t lgConfigK, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator);</div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keyword">explicit</span> Hll8Array(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; that);</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keyword">virtual</span> ~Hll8Array() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    <span class="keyword">virtual</span> std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt; get_deleter() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160; </div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keyword">virtual</span> Hll8Array&lt;A&gt;* copy() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keyword">inline</span> uint8_t getSlot(uint32_t slotNo) <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> putSlot(uint32_t slotNo, uint8_t value);</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="keyword">virtual</span> HllSketchImpl&lt;A&gt;* couponUpdate(uint32_t coupon) <span class="keyword">final</span>;</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="keywordtype">void</span> mergeList(<span class="keyword">const</span> CouponList&lt;A&gt;&amp; src);</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keywordtype">void</span> mergeHll(<span class="keyword">const</span> HllArray&lt;A&gt;&amp; src);</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160; </div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="keyword">virtual</span> uint32_t getHllByteArrBytes() <span class="keyword">const</span>;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  <span class="keyword">private</span>:</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> internalCouponUpdate(uint32_t coupon);</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> processValue(uint32_t slot, uint32_t mask, uint8_t new_val);</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;};</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160; </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;}</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* _HLL8ARRAY_HPP_ */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition:</b> binomial_bounds.hpp:38</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
-Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
 </small></address>
 </body>
 </html>
diff --git a/docs/master/HllArray-internal_8hpp_source.html b/docs/master/HllArray-internal_8hpp_source.html
index b8e3559..a1f5521 100644
--- a/docs/master/HllArray-internal_8hpp_source.html
+++ b/docs/master/HllArray-internal_8hpp_source.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
+<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<meta http-equiv="X-UA-Compatible" content="IE=11"/>
-<meta name="generator" content="Doxygen 1.9.8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <title>datasketches-cpp: hll/include/HllArray-internal.hpp Source File</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -19,8 +19,8 @@
 <div id="titlearea">
 <table cellspacing="0" cellpadding="0">
  <tbody>
- <tr id="projectrow">
-  <td id="projectalign">
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
    <div id="projectname">datasketches-cpp
    </div>
   </td>
@@ -29,28 +29,22 @@
 </table>
 </div>
 <!-- end header part -->
-<!-- Generated by Doxygen 1.9.8 -->
+<!-- Generated by Doxygen 1.9.1 -->
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-var searchBox = new SearchBox("searchBox", "search/",'.html');
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
 /* @license-end */
 </script>
 <script type="text/javascript" src="menudata.js"></script>
 <script type="text/javascript" src="menu.js"></script>
 <script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
 $(function() {
   initMenu('',true,false,'search.php','Search');
   $(document).ready(function() { init_search(); });
 });
-/* @license-end */
-</script>
+/* @license-end */</script>
 <div id="main-nav"></div>
-<script type="text/javascript">
-/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
-$(document).ready(function() { init_codefold(0); });
-/* @license-end */
-</script>
 <!-- window showing the filter options -->
 <div id="MSearchSelectWindow"
      onmouseover="return searchBox.OnSearchSelectShow()"
@@ -60,16 +54,9 @@ $(document).ready(function() { init_codefold(0); });
 
 <!-- iframe showing the search results (closed by default) -->
 <div id="MSearchResultsWindow">
-<div id="MSearchResults">
-<div class="SRPage">
-<div id="SRIndex">
-<div id="SRResults"></div>
-<div class="SRStatus" id="Loading">Loading...</div>
-<div class="SRStatus" id="Searching">Searching...</div>
-<div class="SRStatus" id="NoMatches">No Matches</div>
-</div>
-</div>
-</div>
+<iframe src="javascript:void(0)" frameborder="0" 
+        name="MSearchResults" id="MSearchResults">
+</iframe>
 </div>
 
 <div id="nav-path" class="navpath">
@@ -78,716 +65,717 @@ $(document).ready(function() { init_codefold(0); });
 </div>
 </div><!-- top -->
 <div class="header">
-  <div class="headertitle"><div class="title">HllArray-internal.hpp</div></div>
+  <div class="headertitle">
+<div class="title">HllArray-internal.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
-<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
-<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"> * distributed with this work for additional information</span></div>
-<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
-<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
-<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
-<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
-<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
-<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
-<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"> * software distributed under the License is distributed on an</span></div>
-<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
-<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
-<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment"> * specific language governing permissions and limitations</span></div>
-<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span><span class="comment"> * under the License.</span></div>
-<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span> </div>
-<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="preprocessor">#ifndef _HLLARRAY_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="preprocessor">#define _HLLARRAY_INTERNAL_HPP_</span></div>
-<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span> </div>
-<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="preprocessor">#include &quot;HllArray.hpp&quot;</span></div>
-<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="preprocessor">#include &quot;HllUtil.hpp&quot;</span></div>
-<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="preprocessor">#include &quot;HarmonicNumbers.hpp&quot;</span></div>
-<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="preprocessor">#include &quot;CubicInterpolation.hpp&quot;</span></div>
-<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="preprocessor">#include &quot;CompositeInterpolationXTable.hpp&quot;</span></div>
-<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="preprocessor">#include &quot;CouponList.hpp&quot;</span></div>
-<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="preprocessor">#include &quot;inv_pow2_table.hpp&quot;</span></div>
-<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="preprocessor">#include &lt;cstring&gt;</span></div>
-<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="preprocessor">#include &lt;cmath&gt;</span></div>
-<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span><span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
-<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span><span class="preprocessor">#include &lt;string&gt;</span></div>
-<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span> </div>
-<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacedatasketches.html">datasketches</a> {</div>
-<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span> </div>
-<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>HllArray&lt;A&gt;::HllArray(uint8_t lgConfigK, <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator):</div>
-<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>HllSketchImpl&lt;A&gt;(lgConfigK, tgtHllType, hll_mode::HLL, startFullSize),</div>
-<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>hipAccum_(0.0),</div>
-<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>kxq0_(1 &lt;&lt; lgConfigK),</div>
-<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>kxq1_(0.0),</div>
-<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>hllByteArr_(allocator),</div>
-<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span>curMin_(0),</div>
-<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>numAtCurMin_(1 &lt;&lt; lgConfigK),</div>
-<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>oooFlag_(false),</div>
-<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>rebuild_kxq_curmin_(false)</div>
-<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>{}</div>
-<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span> </div>
-<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span>HllArray&lt;A&gt;::HllArray(<span class="keyword">const</span> HllArray&amp; other, target_hll_type tgtHllType) :</div>
-<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>  HllSketchImpl&lt;A&gt;(other.getLgConfigK(), tgtHllType, hll_mode::HLL, other.isStartFullSize()),</div>
-<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>  <span class="comment">// remaining fields are initialized to empty sketch defaults</span></div>
-<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>  <span class="comment">// and left to subclass constructor to populate</span></div>
-<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>  hipAccum_(0.0),</div>
-<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>  kxq0_(1 &lt;&lt; other.getLgConfigK()),</div>
-<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span>  kxq1_(0.0),</div>
-<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>  hllByteArr_(other.getAllocator()),</div>
-<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>  curMin_(0),</div>
-<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>  numAtCurMin_(1 &lt;&lt; other.getLgConfigK()),</div>
-<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>  oooFlag_(false),</div>
-<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>  rebuild_kxq_curmin_(false)</div>
-<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>{}</div>
-<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span> </div>
-<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>HllArray&lt;A&gt;* HllArray&lt;A&gt;::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>  <span class="comment">// we may need to recompute KxQ and curMin data for a union gadget,</span></div>
-<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>  <span class="comment">// so only use a direct copy if we have a valid sketch</span></div>
-<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>  <span class="keywordflow">if</span> (tgtHllType == this-&gt;getTgtHllType() &amp;&amp; !this-&gt;isRebuildKxqCurminFlag()) {</div>
-<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span>    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>HllArray*<span class="keyword">&gt;</span>(copy());</div>
-<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>  }</div>
-<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>  </div>
-<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>  <span class="comment">// the factory methods replay the coupons and will always rebuild</span></div>
-<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>  <span class="comment">// the sketch in a consistent way</span></div>
-<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>  <span class="keywordflow">switch</span> (tgtHllType) {</div>
-<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span>    <span class="keywordflow">case</span> target_hll_type::HLL_4:</div>
-<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>      <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::convertToHll4(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>    <span class="keywordflow">case</span> target_hll_type::HLL_6:</div>
-<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>      <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::convertToHll6(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>    <span class="keywordflow">case</span> target_hll_type::HLL_8:</div>
-<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>      <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::convertToHll8(*<span class="keyword">this</span>);</div>
-<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span>    <span class="keywordflow">default</span>:</div>
-<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>      <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Invalid target HLL type&quot;</span>); </div>
-<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>  }</div>
-<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>}</div>
-<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span> </div>
-<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>HllArray&lt;A&gt;* HllArray&lt;A&gt;::newHll(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator) {</div>
-<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span>  <span class="keywordflow">if</span> (len &lt; hll_constants::HLL_BYTE_ARR_START) {</div>
-<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input data length insufficient to hold HLL array&quot;</span>);</div>
-<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>  }</div>
-<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span> </div>
-<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>  <span class="keyword">const</span> uint8_t* data = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(bytes);</div>
-<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>  <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HLL_PREINTS) {</div>
-<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
-<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span>  }</div>
-<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>  <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
-<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
-<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>  }</div>
-<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>  <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
-<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input array is not an HLL sketch&quot;</span>);</div>
-<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>  }</div>
-<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span> </div>
-<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>  <span class="keyword">const</span> hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>  <span class="keywordflow">if</span> (mode != HLL) {</div>
-<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling HLL array constructor with non-HLL mode data&quot;</span>);</div>
-<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>  }</div>
-<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span> </div>
-<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>  <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> comapctFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> startFullSizeFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::FULL_SIZE_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span> </div>
-<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>  <span class="keyword">const</span> uint8_t lgK = data[hll_constants::LG_K_BYTE];</div>
-<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>  <span class="keyword">const</span> uint8_t curMin = data[hll_constants::HLL_CUR_MIN_BYTE];</div>
-<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span> </div>
-<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>  <span class="keyword">const</span> uint32_t arrayBytes = hllArrBytes(tgtHllType, lgK);</div>
-<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>  <span class="keywordflow">if</span> (len &lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(hll_constants::HLL_BYTE_ARR_START + arrayBytes)) {</div>
-<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input array too small to hold sketch image&quot;</span>);</div>
-<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>  }</div>
-<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span> </div>
-<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span>  <span class="keywordtype">double</span> hip, kxq0, kxq1;</div>
-<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>  std::memcpy(&amp;hip, data + hll_constants::HIP_ACCUM_DOUBLE, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
-<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span>  std::memcpy(&amp;kxq0, data + hll_constants::KXQ0_DOUBLE, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
-<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>  std::memcpy(&amp;kxq1, data + hll_constants::KXQ1_DOUBLE, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
-<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span> </div>
-<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span>  uint32_t numAtCurMin, auxCount;</div>
-<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>  std::memcpy(&amp;numAtCurMin, data + hll_constants::CUR_MIN_COUNT_INT, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
-<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>  std::memcpy(&amp;auxCount, data + hll_constants::AUX_COUNT_INT, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
-<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span> </div>
-<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span>  AuxHashMap&lt;A&gt;* auxHashMap = <span class="keyword">nullptr</span>;</div>
-<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span>  <span class="keyword">typedef</span> std::unique_ptr&lt;AuxHashMap&lt;A&gt;, std::function&lt;void(AuxHashMap&lt;A&gt;*)&gt;&gt; aux_hash_map_ptr;</div>
-<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>  aux_hash_map_ptr aux_ptr;</div>
-<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span>  <span class="keywordflow">if</span> (auxCount &gt; 0) { <span class="comment">// necessarily TgtHllType == HLL_4</span></div>
-<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>    uint8_t auxLgIntArrSize = data[4];</div>
-<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>    <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = hll_constants::HLL_BYTE_ARR_START + arrayBytes;</div>
-<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>    <span class="keyword">const</span> uint8_t* auxDataStart = data + offset;</div>
-<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>    auxHashMap = AuxHashMap&lt;A&gt;::deserialize(auxDataStart, len - offset, lgK, auxCount, auxLgIntArrSize, comapctFlag, allocator);</div>
-<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>    aux_ptr = aux_hash_map_ptr(auxHashMap, auxHashMap-&gt;make_deleter());</div>
-<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span>  }</div>
-<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span> </div>
-<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span>  HllArray&lt;A&gt;* sketch = HllSketchImplFactory&lt;A&gt;::newHll(lgK, tgtHllType, startFullSizeFlag, allocator);</div>
-<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span>  sketch-&gt;putCurMin(curMin);</div>
-<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span>  sketch-&gt;putOutOfOrderFlag(oooFlag);</div>
-<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span>  <span class="keywordflow">if</span> (!oooFlag) sketch-&gt;putHipAccum(hip);</div>
-<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>  sketch-&gt;putKxQ0(kxq0);</div>
-<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>  sketch-&gt;putKxQ1(kxq1);</div>
-<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>  sketch-&gt;putNumAtCurMin(numAtCurMin);</div>
-<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span> </div>
-<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span>  std::memcpy(sketch-&gt;hllByteArr_.data(), data + hll_constants::HLL_BYTE_ARR_START, arrayBytes);</div>
-<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span> </div>
-<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>  <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>)</div>
-<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>    ((Hll4Array&lt;A&gt;*)sketch)-&gt;putAuxHashMap(auxHashMap);</div>
-<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span> </div>
-<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span>  aux_ptr.release();</div>
-<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span>  <span class="keywordflow">return</span> sketch;</div>
-<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span>}</div>
-<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span> </div>
-<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span>HllArray&lt;A&gt;* HllArray&lt;A&gt;::newHll(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator) {</div>
-<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span>  uint8_t listHeader[8];</div>
-<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>  read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
-<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span> </div>
-<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HLL_PREINTS) {</div>
-<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
-<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span>  }</div>
-<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
-<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
-<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>  }</div>
-<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span>  <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
-<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
-<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>  }</div>
-<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span> </div>
-<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>  hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>  <span class="keywordflow">if</span> (mode != HLL) {</div>
-<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling HLL construtor with non-HLL mode data&quot;</span>);</div>
-<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>  }</div>
-<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span> </div>
-<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span>  <span class="keyword">const</span> <a class="code hl_enumeration" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
-<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> comapctFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> startFullSizeFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::FULL_SIZE_FLAG_MASK) ? <span class="keyword">true</span> : false);</div>
-<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span> </div>
-<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span>  <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
-<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span>  <span class="keyword">const</span> uint8_t curMin = listHeader[hll_constants::HLL_CUR_MIN_BYTE];</div>
-<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span> </div>
-<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>  HllArray* sketch = HllSketchImplFactory&lt;A&gt;::newHll(lgK, tgtHllType, startFullSizeFlag, allocator);</div>
-<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>  <span class="keyword">typedef</span> std::unique_ptr&lt;HllArray&lt;A&gt;, std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt;&gt; hll_array_ptr;</div>
-<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>  hll_array_ptr sketch_ptr(sketch, sketch-&gt;get_deleter());</div>
-<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>  sketch-&gt;putCurMin(curMin);</div>
-<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>  sketch-&gt;putOutOfOrderFlag(oooFlag);</div>
-<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span> </div>
-<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>  <span class="keyword">const</span> <span class="keyword">auto</span> hip = read&lt;double&gt;(is);</div>
-<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>  <span class="keyword">const</span> <span class="keyword">auto</span> kxq0 = read&lt;double&gt;(is);</div>
-<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span>  <span class="keyword">const</span> <span class="keyword">auto</span> kxq1 = read&lt;double&gt;(is);</div>
-<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>  <span class="keywordflow">if</span> (!oooFlag) sketch-&gt;putHipAccum(hip);</div>
-<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>  sketch-&gt;putKxQ0(kxq0);</div>
-<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>  sketch-&gt;putKxQ1(kxq1);</div>
-<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span> </div>
-<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span>  <span class="keyword">const</span> <span class="keyword">auto</span> numAtCurMin = read&lt;uint32_t&gt;(is);</div>
-<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>  <span class="keyword">const</span> <span class="keyword">auto</span> auxCount = read&lt;uint32_t&gt;(is);</div>
-<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>  sketch-&gt;putNumAtCurMin(numAtCurMin);</div>
-<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>  </div>
-<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>  read(is, sketch-&gt;hllByteArr_.data(), sketch-&gt;getHllByteArrBytes());</div>
-<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>  </div>
-<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span>  <span class="keywordflow">if</span> (auxCount &gt; 0) { <span class="comment">// necessarily TgtHllType == HLL_4</span></div>
-<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>    uint8_t auxLgIntArrSize = listHeader[4];</div>
-<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>    AuxHashMap&lt;A&gt;* auxHashMap = AuxHashMap&lt;A&gt;::deserialize(is, lgK, auxCount, auxLgIntArrSize, comapctFlag, allocator);</div>
-<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>    ((Hll4Array&lt;A&gt;*)sketch)-&gt;putAuxHashMap(auxHashMap);</div>
-<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>  }</div>
-<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span> </div>
-<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span>  <span class="keywordflow">if</span> (!is.good())</div>
-<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>    <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;error reading from std::istream&quot;</span>); </div>
-<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span> </div>
-<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span>  <span class="keywordflow">return</span> sketch_ptr.release();</div>
-<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span>}</div>
-<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span> </div>
-<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span><span class="keyword">auto</span> HllArray&lt;A&gt;::serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span> -&gt; vector_bytes {</div>
-<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;</div>
-<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>  vector_bytes byteArr(sketchSizeBytes, 0, getAllocator());</div>
-<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>  uint8_t* bytes = byteArr.data() + header_size_bytes;</div>
-<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>  AuxHashMap&lt;A&gt;* auxHashMap = getAuxHashMap();</div>
-<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span> </div>
-<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>  bytes[hll_constants::PREAMBLE_INTS_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(getPreInts());</div>
-<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>  bytes[hll_constants::SER_VER_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(hll_constants::SER_VER);</div>
-<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>  bytes[hll_constants::FAMILY_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(hll_constants::FAMILY_ID);</div>
-<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>  bytes[hll_constants::LG_K_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span>  bytes[hll_constants::LG_ARR_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap-&gt;getLgAuxArrInts());</div>
-<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span>  bytes[hll_constants::FLAGS_BYTE] = this-&gt;makeFlagsByte(compact);</div>
-<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span>  bytes[hll_constants::HLL_CUR_MIN_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(curMin_);</div>
-<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span>  bytes[hll_constants::MODE_BYTE] = this-&gt;makeModeByte();</div>
-<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span> </div>
-<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span>  std::memcpy(bytes + hll_constants::HIP_ACCUM_DOUBLE, &amp;hipAccum_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
-<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span>  std::memcpy(bytes + hll_constants::KXQ0_DOUBLE, &amp;kxq0_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
-<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span>  std::memcpy(bytes + hll_constants::KXQ1_DOUBLE, &amp;kxq1_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
-<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span>  std::memcpy(bytes + hll_constants::CUR_MIN_COUNT_INT, &amp;numAtCurMin_, <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span>  <span class="keyword">const</span> uint32_t auxCount = (auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap-&gt;getAuxCount());</div>
-<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span>  std::memcpy(bytes + hll_constants::AUX_COUNT_INT, &amp;auxCount, <span class="keyword">sizeof</span>(uint32_t));</div>
-<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span> </div>
-<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span>  <span class="keyword">const</span> uint32_t hllByteArrBytes = getHllByteArrBytes();</div>
-<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span>  std::memcpy(bytes + getMemDataStart(), hllByteArr_.data(), hllByteArrBytes);</div>
-<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span> </div>
-<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span>  <span class="comment">// aux map if HLL_4</span></div>
-<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span>  <span class="keywordflow">if</span> (this-&gt;tgtHllType_ == HLL_4) {</div>
-<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>    bytes += getMemDataStart() + hllByteArrBytes; <span class="comment">// start of auxHashMap</span></div>
-<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>    <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span>      <span class="keywordflow">if</span> (compact) {</div>
-<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span>        <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *auxHashMap) {</div>
-<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span>          std::memcpy(bytes, &amp;coupon, <span class="keyword">sizeof</span>(coupon));</div>
-<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span>          bytes += <span class="keyword">sizeof</span>(coupon);</div>
-<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span>        }</div>
-<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span>      } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span>        std::memcpy(bytes, auxHashMap-&gt;getAuxIntArr(), auxHashMap-&gt;getUpdatableSizeBytes());</div>
-<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span>      }</div>
-<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!compact) {</div>
-<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span>      <span class="comment">// if updatable, we write even if currently unused so the binary can be wrapped</span></div>
-<div class="line"><a id="l00258" name="l00258"></a><span class="lineno">  258</span>      uint32_t auxBytes = 4 &lt;&lt; hll_constants::LG_AUX_ARR_INTS[this-&gt;lgConfigK_];</div>
-<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span>      std::fill_n(bytes, auxBytes, <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(0));</div>
-<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span>    }</div>
-<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span>  }</div>
-<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span> </div>
-<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>  <span class="keywordflow">return</span> byteArr;</div>
-<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span>}</div>
-<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span> </div>
-<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::serialize(std::ostream&amp; os, <span class="keywordtype">bool</span> compact)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>  <span class="comment">// header</span></div>
-<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span>  <span class="keyword">const</span> uint8_t preInts = getPreInts();</div>
-<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span>  write(os, preInts);</div>
-<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>  <span class="keyword">const</span> uint8_t serialVersion = hll_constants::SER_VER;</div>
-<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span>  write(os, serialVersion);</div>
-<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span>  <span class="keyword">const</span> uint8_t familyId = hll_constants::FAMILY_ID;</div>
-<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span>  write(os, familyId);</div>
-<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span>  <span class="keyword">const</span> uint8_t lgKByte = this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00276" name="l00276"></a><span class="lineno">  276</span>  write(os, lgKByte);</div>
-<div class="line"><a id="l00277" name="l00277"></a><span class="lineno">  277</span> </div>
-<div class="line"><a id="l00278" name="l00278"></a><span class="lineno">  278</span>  AuxHashMap&lt;A&gt;* auxHashMap = getAuxHashMap();</div>
-<div class="line"><a id="l00279" name="l00279"></a><span class="lineno">  279</span>  uint8_t lgArrByte = 0;</div>
-<div class="line"><a id="l00280" name="l00280"></a><span class="lineno">  280</span>  <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span>    lgArrByte = auxHashMap-&gt;getLgAuxArrInts();</div>
-<div class="line"><a id="l00282" name="l00282"></a><span class="lineno">  282</span>  }</div>
-<div class="line"><a id="l00283" name="l00283"></a><span class="lineno">  283</span>  write(os, lgArrByte);</div>
-<div class="line"><a id="l00284" name="l00284"></a><span class="lineno">  284</span> </div>
-<div class="line"><a id="l00285" name="l00285"></a><span class="lineno">  285</span>  <span class="keyword">const</span> uint8_t flagsByte = this-&gt;makeFlagsByte(compact);</div>
-<div class="line"><a id="l00286" name="l00286"></a><span class="lineno">  286</span>  write(os, flagsByte);</div>
-<div class="line"><a id="l00287" name="l00287"></a><span class="lineno">  287</span>  write(os, curMin_);</div>
-<div class="line"><a id="l00288" name="l00288"></a><span class="lineno">  288</span>  <span class="keyword">const</span> uint8_t modeByte = this-&gt;makeModeByte();</div>
-<div class="line"><a id="l00289" name="l00289"></a><span class="lineno">  289</span>  write(os, modeByte);</div>
-<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span> </div>
-<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span>  <span class="comment">// estimator data</span></div>
-<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span>  write(os, hipAccum_);</div>
-<div class="line"><a id="l00293" name="l00293"></a><span class="lineno">  293</span>  write(os, kxq0_);</div>
-<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span>  write(os, kxq1_);</div>
-<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span> </div>
-<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span>  <span class="comment">// array data</span></div>
-<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span>  write(os, numAtCurMin_);</div>
-<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span> </div>
-<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span>  <span class="keyword">const</span> uint32_t auxCount = (auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap-&gt;getAuxCount());</div>
-<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span>  write(os, auxCount);</div>
-<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span>  write(os, hllByteArr_.data(), getHllByteArrBytes());</div>
-<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span> </div>
-<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span>  <span class="comment">// aux map if HLL_4</span></div>
-<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span>  <span class="keywordflow">if</span> (this-&gt;tgtHllType_ == HLL_4) {</div>
-<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span>    <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
-<div class="line"><a id="l00306" name="l00306"></a><span class="lineno">  306</span>      <span class="keywordflow">if</span> (compact) {</div>
-<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span>        <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *auxHashMap) {</div>
-<div class="line"><a id="l00308" name="l00308"></a><span class="lineno">  308</span>          write(os, coupon);</div>
-<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span>        }</div>
-<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span>      } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span>        write(os, auxHashMap-&gt;getAuxIntArr(), auxHashMap-&gt;getUpdatableSizeBytes());</div>
-<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span>      }</div>
-<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span>    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!compact) {</div>
-<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span>      <span class="comment">// if updatable, we write even if currently unused so the binary can be wrapped      </span></div>
-<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span>      uint32_t auxBytes = 4 &lt;&lt; hll_constants::LG_AUX_ARR_INTS[this-&gt;lgConfigK_];</div>
-<div class="line"><a id="l00316" name="l00316"></a><span class="lineno">  316</span>      std::fill_n(std::ostreambuf_iterator&lt;char&gt;(os), auxBytes, <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span><span class="keyword">&gt;</span>(0));</div>
-<div class="line"><a id="l00317" name="l00317"></a><span class="lineno">  317</span>    }</div>
-<div class="line"><a id="l00318" name="l00318"></a><span class="lineno">  318</span>  }</div>
-<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span>}</div>
-<div class="line"><a id="l00320" name="l00320"></a><span class="lineno">  320</span> </div>
-<div class="line"><a id="l00321" name="l00321"></a><span class="lineno">  321</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00322" name="l00322"></a><span class="lineno">  322</span><span class="keywordtype">double</span> HllArray&lt;A&gt;::getEstimate()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00323" name="l00323"></a><span class="lineno">  323</span>  <span class="keywordflow">if</span> (oooFlag_) {</div>
-<div class="line"><a id="l00324" name="l00324"></a><span class="lineno">  324</span>    <span class="keywordflow">return</span> getCompositeEstimate();</div>
-<div class="line"><a id="l00325" name="l00325"></a><span class="lineno">  325</span>  }</div>
-<div class="line"><a id="l00326" name="l00326"></a><span class="lineno">  326</span>  <span class="keywordflow">return</span> hipAccum_;</div>
-<div class="line"><a id="l00327" name="l00327"></a><span class="lineno">  327</span>}</div>
-<div class="line"><a id="l00328" name="l00328"></a><span class="lineno">  328</span> </div>
-<div class="line"><a id="l00329" name="l00329"></a><span class="lineno">  329</span><span class="comment">// HLL UPPER AND LOWER BOUNDS</span></div>
-<div class="line"><a id="l00330" name="l00330"></a><span class="lineno">  330</span> </div>
-<div class="line"><a id="l00331" name="l00331"></a><span class="lineno">  331</span><span class="comment">/*</span></div>
-<div class="line"><a id="l00332" name="l00332"></a><span class="lineno">  332</span><span class="comment"> * The upper and lower bounds are not symmetric and thus are treated slightly differently.</span></div>
-<div class="line"><a id="l00333" name="l00333"></a><span class="lineno">  333</span><span class="comment"> * For the lower bound, when the unique count is &lt;= k, LB &gt;= numNonZeros, where</span></div>
-<div class="line"><a id="l00334" name="l00334"></a><span class="lineno">  334</span><span class="comment"> * numNonZeros = k - numAtCurMin AND curMin == 0.</span></div>
-<div class="line"><a id="l00335" name="l00335"></a><span class="lineno">  335</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span><span class="comment"> * For HLL6 and HLL8, curMin is always 0 and numAtCurMin is initialized to k and is decremented</span></div>
-<div class="line"><a id="l00337" name="l00337"></a><span class="lineno">  337</span><span class="comment"> * down for each valid update until it reaches 0, where it stays. Thus, for these two</span></div>
-<div class="line"><a id="l00338" name="l00338"></a><span class="lineno">  338</span><span class="comment"> * isomorphs, when numAtCurMin = 0, means the true curMin is &gt; 0 and the unique count must be</span></div>
-<div class="line"><a id="l00339" name="l00339"></a><span class="lineno">  339</span><span class="comment"> * greater than k.</span></div>
-<div class="line"><a id="l00340" name="l00340"></a><span class="lineno">  340</span><span class="comment"> *</span></div>
-<div class="line"><a id="l00341" name="l00341"></a><span class="lineno">  341</span><span class="comment"> * HLL4 always maintains both curMin and numAtCurMin dynamically. Nonetheless, the rules for</span></div>
-<div class="line"><a id="l00342" name="l00342"></a><span class="lineno">  342</span><span class="comment"> * the very small values &lt;= k where curMin = 0 still apply.</span></div>
-<div class="line"><a id="l00343" name="l00343"></a><span class="lineno">  343</span><span class="comment"> */</span></div>
-<div class="line"><a id="l00344" name="l00344"></a><span class="lineno">  344</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00345" name="l00345"></a><span class="lineno">  345</span><span class="keywordtype">double</span> HllArray&lt;A&gt;::getLowerBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00346" name="l00346"></a><span class="lineno">  346</span>  HllUtil&lt;A&gt;::checkNumStdDev(numStdDev);</div>
-<div class="line"><a id="l00347" name="l00347"></a><span class="lineno">  347</span>  <span class="keyword">const</span> uint32_t configK = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00348" name="l00348"></a><span class="lineno">  348</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> numNonZeros = ((curMin_ == 0) ? (configK - numAtCurMin_) : configK);</div>
-<div class="line"><a id="l00349" name="l00349"></a><span class="lineno">  349</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> relErr = HllUtil&lt;A&gt;::getRelErr(<span class="keyword">false</span>, this-&gt;oooFlag_, this-&gt;lgConfigK_, numStdDev);</div>
-<div class="line"><a id="l00350" name="l00350"></a><span class="lineno">  350</span>  <span class="keywordflow">return</span> fmax(getEstimate() / (1.0 + relErr), numNonZeros);</div>
-<div class="line"><a id="l00351" name="l00351"></a><span class="lineno">  351</span>}</div>
-<div class="line"><a id="l00352" name="l00352"></a><span class="lineno">  352</span> </div>
-<div class="line"><a id="l00353" name="l00353"></a><span class="lineno">  353</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00354" name="l00354"></a><span class="lineno">  354</span><span class="keywordtype">double</span> HllArray&lt;A&gt;::getUpperBound(uint8_t numStdDev)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00355" name="l00355"></a><span class="lineno">  355</span>  HllUtil&lt;A&gt;::checkNumStdDev(numStdDev);</div>
-<div class="line"><a id="l00356" name="l00356"></a><span class="lineno">  356</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> relErr = HllUtil&lt;A&gt;::getRelErr(<span class="keyword">true</span>, this-&gt;oooFlag_, this-&gt;lgConfigK_, numStdDev);</div>
-<div class="line"><a id="l00357" name="l00357"></a><span class="lineno">  357</span>  <span class="keywordflow">return</span> getEstimate() / (1.0 + relErr);</div>
-<div class="line"><a id="l00358" name="l00358"></a><span class="lineno">  358</span>}</div>
-<div class="line"><a id="l00359" name="l00359"></a><span class="lineno">  359</span> </div>
-<div class="line"><a id="l00365" name="l00365"></a><span class="lineno">  365</span><span class="comment">// Original C: again-two-registers.c hhb_get_composite_estimate L1489</span></div>
-<div class="line"><a id="l00366" name="l00366"></a><span class="lineno">  366</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00367" name="l00367"></a><span class="lineno">  367</span><span class="keywordtype">double</span> HllArray&lt;A&gt;::getCompositeEstimate()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00368" name="l00368"></a><span class="lineno">  368</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> rawEst = getHllRawEstimate();</div>
-<div class="line"><a id="l00369" name="l00369"></a><span class="lineno">  369</span> </div>
-<div class="line"><a id="l00370" name="l00370"></a><span class="lineno">  370</span>  <span class="keyword">const</span> <span class="keywordtype">double</span>* xArr = CompositeInterpolationXTable&lt;A&gt;::get_x_arr(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00371" name="l00371"></a><span class="lineno">  371</span>  <span class="keyword">const</span> uint32_t xArrLen = CompositeInterpolationXTable&lt;A&gt;::get_x_arr_length();</div>
-<div class="line"><a id="l00372" name="l00372"></a><span class="lineno">  372</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> yStride = CompositeInterpolationXTable&lt;A&gt;::get_y_stride(this-&gt;lgConfigK_);</div>
-<div class="line"><a id="l00373" name="l00373"></a><span class="lineno">  373</span> </div>
-<div class="line"><a id="l00374" name="l00374"></a><span class="lineno">  374</span>  <span class="keywordflow">if</span> (rawEst &lt; xArr[0]) {</div>
-<div class="line"><a id="l00375" name="l00375"></a><span class="lineno">  375</span>    <span class="keywordflow">return</span> 0;</div>
-<div class="line"><a id="l00376" name="l00376"></a><span class="lineno">  376</span>  }</div>
-<div class="line"><a id="l00377" name="l00377"></a><span class="lineno">  377</span> </div>
-<div class="line"><a id="l00378" name="l00378"></a><span class="lineno">  378</span>  <span class="keyword">const</span> uint32_t xArrLenM1 = xArrLen - 1;</div>
-<div class="line"><a id="l00379" name="l00379"></a><span class="lineno">  379</span> </div>
-<div class="line"><a id="l00380" name="l00380"></a><span class="lineno">  380</span>  <span class="keywordflow">if</span> (rawEst &gt; xArr[xArrLenM1]) {</div>
-<div class="line"><a id="l00381" name="l00381"></a><span class="lineno">  381</span>    <span class="keyword">const</span> <span class="keywordtype">double</span> finalY = yStride * xArrLenM1;</div>
-<div class="line"><a id="l00382" name="l00382"></a><span class="lineno">  382</span>    <span class="keyword">const</span> <span class="keywordtype">double</span> factor = finalY / xArr[xArrLenM1];</div>
-<div class="line"><a id="l00383" name="l00383"></a><span class="lineno">  383</span>    <span class="keywordflow">return</span> rawEst * factor;</div>
-<div class="line"><a id="l00384" name="l00384"></a><span class="lineno">  384</span>  }</div>
-<div class="line"><a id="l00385" name="l00385"></a><span class="lineno">  385</span> </div>
-<div class="line"><a id="l00386" name="l00386"></a><span class="lineno">  386</span>  <span class="keywordtype">double</span> adjEst = CubicInterpolation&lt;A&gt;::usingXArrAndYStride(xArr, xArrLen, yStride, rawEst);</div>
-<div class="line"><a id="l00387" name="l00387"></a><span class="lineno">  387</span> </div>
-<div class="line"><a id="l00388" name="l00388"></a><span class="lineno">  388</span>  <span class="comment">// We need to completely avoid the linear_counting estimator if it might have a crazy value.</span></div>
-<div class="line"><a id="l00389" name="l00389"></a><span class="lineno">  389</span>  <span class="comment">// Empirical evidence suggests that the threshold 3*k will keep us safe if 2^4 &lt;= k &lt;= 2^21.</span></div>
-<div class="line"><a id="l00390" name="l00390"></a><span class="lineno">  390</span> </div>
-<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span>  <span class="keywordflow">if</span> (adjEst &gt; (3 &lt;&lt; this-&gt;lgConfigK_)) { <span class="keywordflow">return</span> adjEst; }</div>
-<div class="line"><a id="l00392" name="l00392"></a><span class="lineno">  392</span> </div>
-<div class="line"><a id="l00393" name="l00393"></a><span class="lineno">  393</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> linEst = getHllBitMapEstimate();</div>
-<div class="line"><a id="l00394" name="l00394"></a><span class="lineno">  394</span> </div>
-<div class="line"><a id="l00395" name="l00395"></a><span class="lineno">  395</span>  <span class="comment">// Bias is created when the value of an estimator is compared with a threshold to decide whether</span></div>
-<div class="line"><a id="l00396" name="l00396"></a><span class="lineno">  396</span>  <span class="comment">// to use that estimator or a different one.</span></div>
-<div class="line"><a id="l00397" name="l00397"></a><span class="lineno">  397</span>  <span class="comment">// We conjecture that less bias is created when the average of the two estimators</span></div>
-<div class="line"><a id="l00398" name="l00398"></a><span class="lineno">  398</span>  <span class="comment">// is compared with the threshold. Empirical measurements support this conjecture.</span></div>
-<div class="line"><a id="l00399" name="l00399"></a><span class="lineno">  399</span> </div>
-<div class="line"><a id="l00400" name="l00400"></a><span class="lineno">  400</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> avgEst = (adjEst + linEst) / 2.0;</div>
-<div class="line"><a id="l00401" name="l00401"></a><span class="lineno">  401</span> </div>
-<div class="line"><a id="l00402" name="l00402"></a><span class="lineno">  402</span>  <span class="comment">// The following constants comes from empirical measurements of the crossover point</span></div>
-<div class="line"><a id="l00403" name="l00403"></a><span class="lineno">  403</span>  <span class="comment">// between the average error of the linear estimator and the adjusted hll estimator</span></div>
-<div class="line"><a id="l00404" name="l00404"></a><span class="lineno">  404</span>  <span class="keywordtype">double</span> crossOver = 0.64;</div>
-<div class="line"><a id="l00405" name="l00405"></a><span class="lineno">  405</span>  <span class="keywordflow">if</span> (this-&gt;lgConfigK_ == 4)      { crossOver = 0.718; }</div>
-<div class="line"><a id="l00406" name="l00406"></a><span class="lineno">  406</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;lgConfigK_ == 5) { crossOver = 0.672; }</div>
-<div class="line"><a id="l00407" name="l00407"></a><span class="lineno">  407</span> </div>
-<div class="line"><a id="l00408" name="l00408"></a><span class="lineno">  408</span>  <span class="keywordflow">return</span> (avgEst &gt; (crossOver * (1 &lt;&lt; this-&gt;lgConfigK_))) ? adjEst : linEst;</div>
-<div class="line"><a id="l00409" name="l00409"></a><span class="lineno">  409</span>}</div>
-<div class="line"><a id="l00410" name="l00410"></a><span class="lineno">  410</span> </div>
-<div class="line"><a id="l00411" name="l00411"></a><span class="lineno">  411</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00412" name="l00412"></a><span class="lineno">  412</span><span class="keywordtype">double</span> HllArray&lt;A&gt;::getKxQ0()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00413" name="l00413"></a><span class="lineno">  413</span>  <span class="keywordflow">return</span> kxq0_;</div>
-<div class="line"><a id="l00414" name="l00414"></a><span class="lineno">  414</span>}</div>
-<div class="line"><a id="l00415" name="l00415"></a><span class="lineno">  415</span> </div>
-<div class="line"><a id="l00416" name="l00416"></a><span class="lineno">  416</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00417" name="l00417"></a><span class="lineno">  417</span><span class="keywordtype">double</span> HllArray&lt;A&gt;::getKxQ1()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00418" name="l00418"></a><span class="lineno">  418</span>  <span class="keywordflow">return</span> kxq1_;</div>
-<div class="line"><a id="l00419" name="l00419"></a><span class="lineno">  419</span>}</div>
-<div class="line"><a id="l00420" name="l00420"></a><span class="lineno">  420</span> </div>
-<div class="line"><a id="l00421" name="l00421"></a><span class="lineno">  421</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00422" name="l00422"></a><span class="lineno">  422</span><span class="keywordtype">double</span> HllArray&lt;A&gt;::getHipAccum()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00423" name="l00423"></a><span class="lineno">  423</span>  <span class="keywordflow">return</span> hipAccum_;</div>
-<div class="line"><a id="l00424" name="l00424"></a><span class="lineno">  424</span>}</div>
-<div class="line"><a id="l00425" name="l00425"></a><span class="lineno">  425</span> </div>
-<div class="line"><a id="l00426" name="l00426"></a><span class="lineno">  426</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00427" name="l00427"></a><span class="lineno">  427</span>uint8_t HllArray&lt;A&gt;::getCurMin()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00428" name="l00428"></a><span class="lineno">  428</span>  <span class="keywordflow">return</span> curMin_;</div>
-<div class="line"><a id="l00429" name="l00429"></a><span class="lineno">  429</span>}</div>
-<div class="line"><a id="l00430" name="l00430"></a><span class="lineno">  430</span> </div>
-<div class="line"><a id="l00431" name="l00431"></a><span class="lineno">  431</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00432" name="l00432"></a><span class="lineno">  432</span>uint32_t HllArray&lt;A&gt;::getNumAtCurMin()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00433" name="l00433"></a><span class="lineno">  433</span>  <span class="keywordflow">return</span> numAtCurMin_;</div>
-<div class="line"><a id="l00434" name="l00434"></a><span class="lineno">  434</span>}</div>
-<div class="line"><a id="l00435" name="l00435"></a><span class="lineno">  435</span> </div>
-<div class="line"><a id="l00436" name="l00436"></a><span class="lineno">  436</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00437" name="l00437"></a><span class="lineno">  437</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::putKxQ0(<span class="keywordtype">double</span> kxq0) {</div>
-<div class="line"><a id="l00438" name="l00438"></a><span class="lineno">  438</span>  kxq0_ = kxq0;</div>
-<div class="line"><a id="l00439" name="l00439"></a><span class="lineno">  439</span>}</div>
-<div class="line"><a id="l00440" name="l00440"></a><span class="lineno">  440</span> </div>
-<div class="line"><a id="l00441" name="l00441"></a><span class="lineno">  441</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00442" name="l00442"></a><span class="lineno">  442</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::putKxQ1(<span class="keywordtype">double</span> kxq1) {</div>
-<div class="line"><a id="l00443" name="l00443"></a><span class="lineno">  443</span>  kxq1_ = kxq1;</div>
-<div class="line"><a id="l00444" name="l00444"></a><span class="lineno">  444</span>}</div>
-<div class="line"><a id="l00445" name="l00445"></a><span class="lineno">  445</span> </div>
-<div class="line"><a id="l00446" name="l00446"></a><span class="lineno">  446</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00447" name="l00447"></a><span class="lineno">  447</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::putHipAccum(<span class="keywordtype">double</span> hipAccum) {</div>
-<div class="line"><a id="l00448" name="l00448"></a><span class="lineno">  448</span>  hipAccum_ = hipAccum;</div>
-<div class="line"><a id="l00449" name="l00449"></a><span class="lineno">  449</span>}</div>
-<div class="line"><a id="l00450" name="l00450"></a><span class="lineno">  450</span> </div>
-<div class="line"><a id="l00451" name="l00451"></a><span class="lineno">  451</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00452" name="l00452"></a><span class="lineno">  452</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::putCurMin(uint8_t curMin) {</div>
-<div class="line"><a id="l00453" name="l00453"></a><span class="lineno">  453</span>  curMin_ = curMin;</div>
-<div class="line"><a id="l00454" name="l00454"></a><span class="lineno">  454</span>}</div>
-<div class="line"><a id="l00455" name="l00455"></a><span class="lineno">  455</span> </div>
-<div class="line"><a id="l00456" name="l00456"></a><span class="lineno">  456</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00457" name="l00457"></a><span class="lineno">  457</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::putNumAtCurMin(uint32_t numAtCurMin) {</div>
-<div class="line"><a id="l00458" name="l00458"></a><span class="lineno">  458</span>  numAtCurMin_ = numAtCurMin;</div>
-<div class="line"><a id="l00459" name="l00459"></a><span class="lineno">  459</span>}</div>
-<div class="line"><a id="l00460" name="l00460"></a><span class="lineno">  460</span> </div>
-<div class="line"><a id="l00461" name="l00461"></a><span class="lineno">  461</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00462" name="l00462"></a><span class="lineno">  462</span><span class="keywordtype">bool</span> HllArray&lt;A&gt;::isCompact()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00463" name="l00463"></a><span class="lineno">  463</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a id="l00464" name="l00464"></a><span class="lineno">  464</span>}</div>
-<div class="line"><a id="l00465" name="l00465"></a><span class="lineno">  465</span> </div>
-<div class="line"><a id="l00466" name="l00466"></a><span class="lineno">  466</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00467" name="l00467"></a><span class="lineno">  467</span><span class="keywordtype">bool</span> HllArray&lt;A&gt;::isEmpty()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00468" name="l00468"></a><span class="lineno">  468</span>  <span class="keyword">const</span> uint32_t configK = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00469" name="l00469"></a><span class="lineno">  469</span>  <span class="keywordflow">return</span> (curMin_ == 0) &amp;&amp; (numAtCurMin_ == configK);</div>
-<div class="line"><a id="l00470" name="l00470"></a><span class="lineno">  470</span>}</div>
-<div class="line"><a id="l00471" name="l00471"></a><span class="lineno">  471</span> </div>
-<div class="line"><a id="l00472" name="l00472"></a><span class="lineno">  472</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00473" name="l00473"></a><span class="lineno">  473</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::putOutOfOrderFlag(<span class="keywordtype">bool</span> flag) {</div>
-<div class="line"><a id="l00474" name="l00474"></a><span class="lineno">  474</span>  oooFlag_ = flag;</div>
-<div class="line"><a id="l00475" name="l00475"></a><span class="lineno">  475</span>}</div>
-<div class="line"><a id="l00476" name="l00476"></a><span class="lineno">  476</span> </div>
-<div class="line"><a id="l00477" name="l00477"></a><span class="lineno">  477</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00478" name="l00478"></a><span class="lineno">  478</span><span class="keywordtype">bool</span> HllArray&lt;A&gt;::isOutOfOrderFlag()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00479" name="l00479"></a><span class="lineno">  479</span>  <span class="keywordflow">return</span> oooFlag_;</div>
-<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span>}</div>
-<div class="line"><a id="l00481" name="l00481"></a><span class="lineno">  481</span> </div>
-<div class="line"><a id="l00482" name="l00482"></a><span class="lineno">  482</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00483" name="l00483"></a><span class="lineno">  483</span>uint32_t HllArray&lt;A&gt;::hllArrBytes(target_hll_type tgtHllType, uint8_t lgConfigK) {</div>
-<div class="line"><a id="l00484" name="l00484"></a><span class="lineno">  484</span>  <span class="keywordflow">switch</span> (tgtHllType) {</div>
-<div class="line"><a id="l00485" name="l00485"></a><span class="lineno">  485</span>  <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">HLL_4</a>:</div>
-<div class="line"><a id="l00486" name="l00486"></a><span class="lineno">  486</span>    <span class="keywordflow">return</span> hll4ArrBytes(lgConfigK);</div>
-<div class="line"><a id="l00487" name="l00487"></a><span class="lineno">  487</span>  <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">HLL_6</a>:</div>
-<div class="line"><a id="l00488" name="l00488"></a><span class="lineno">  488</span>    <span class="keywordflow">return</span> hll6ArrBytes(lgConfigK);</div>
-<div class="line"><a id="l00489" name="l00489"></a><span class="lineno">  489</span>  <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">HLL_8</a>:</div>
-<div class="line"><a id="l00490" name="l00490"></a><span class="lineno">  490</span>    <span class="keywordflow">return</span> hll8ArrBytes(lgConfigK);</div>
-<div class="line"><a id="l00491" name="l00491"></a><span class="lineno">  491</span>  <span class="keywordflow">default</span>:</div>
-<div class="line"><a id="l00492" name="l00492"></a><span class="lineno">  492</span>    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Invalid target HLL type&quot;</span>); </div>
-<div class="line"><a id="l00493" name="l00493"></a><span class="lineno">  493</span>  }</div>
-<div class="line"><a id="l00494" name="l00494"></a><span class="lineno">  494</span>}</div>
-<div class="line"><a id="l00495" name="l00495"></a><span class="lineno">  495</span> </div>
-<div class="line"><a id="l00496" name="l00496"></a><span class="lineno">  496</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00497" name="l00497"></a><span class="lineno">  497</span>uint32_t HllArray&lt;A&gt;::hll4ArrBytes(uint8_t lgConfigK) {</div>
-<div class="line"><a id="l00498" name="l00498"></a><span class="lineno">  498</span>  <span class="keywordflow">return</span> 1 &lt;&lt; (lgConfigK - 1);</div>
-<div class="line"><a id="l00499" name="l00499"></a><span class="lineno">  499</span>}</div>
-<div class="line"><a id="l00500" name="l00500"></a><span class="lineno">  500</span> </div>
-<div class="line"><a id="l00501" name="l00501"></a><span class="lineno">  501</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00502" name="l00502"></a><span class="lineno">  502</span>uint32_t HllArray&lt;A&gt;::hll6ArrBytes(uint8_t lgConfigK) {</div>
-<div class="line"><a id="l00503" name="l00503"></a><span class="lineno">  503</span>  <span class="keyword">const</span> uint32_t numSlots = 1 &lt;&lt; lgConfigK;</div>
-<div class="line"><a id="l00504" name="l00504"></a><span class="lineno">  504</span>  <span class="keywordflow">return</span> ((numSlots * 3) &gt;&gt; 2) + 1;</div>
-<div class="line"><a id="l00505" name="l00505"></a><span class="lineno">  505</span>}</div>
-<div class="line"><a id="l00506" name="l00506"></a><span class="lineno">  506</span> </div>
-<div class="line"><a id="l00507" name="l00507"></a><span class="lineno">  507</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00508" name="l00508"></a><span class="lineno">  508</span>uint32_t HllArray&lt;A&gt;::hll8ArrBytes(uint8_t lgConfigK) {</div>
-<div class="line"><a id="l00509" name="l00509"></a><span class="lineno">  509</span>  <span class="keywordflow">return</span> 1 &lt;&lt; lgConfigK;</div>
-<div class="line"><a id="l00510" name="l00510"></a><span class="lineno">  510</span>}</div>
-<div class="line"><a id="l00511" name="l00511"></a><span class="lineno">  511</span> </div>
-<div class="line"><a id="l00512" name="l00512"></a><span class="lineno">  512</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00513" name="l00513"></a><span class="lineno">  513</span>uint32_t HllArray&lt;A&gt;::getMemDataStart()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00514" name="l00514"></a><span class="lineno">  514</span>  <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START;</div>
-<div class="line"><a id="l00515" name="l00515"></a><span class="lineno">  515</span>}</div>
-<div class="line"><a id="l00516" name="l00516"></a><span class="lineno">  516</span> </div>
-<div class="line"><a id="l00517" name="l00517"></a><span class="lineno">  517</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00518" name="l00518"></a><span class="lineno">  518</span>uint32_t HllArray&lt;A&gt;::getUpdatableSerializationBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00519" name="l00519"></a><span class="lineno">  519</span>  <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + getHllByteArrBytes();</div>
-<div class="line"><a id="l00520" name="l00520"></a><span class="lineno">  520</span>}</div>
-<div class="line"><a id="l00521" name="l00521"></a><span class="lineno">  521</span> </div>
-<div class="line"><a id="l00522" name="l00522"></a><span class="lineno">  522</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00523" name="l00523"></a><span class="lineno">  523</span>uint32_t HllArray&lt;A&gt;::getCompactSerializationBytes()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00524" name="l00524"></a><span class="lineno">  524</span>  AuxHashMap&lt;A&gt;* auxHashMap = getAuxHashMap();</div>
-<div class="line"><a id="l00525" name="l00525"></a><span class="lineno">  525</span>  <span class="keyword">const</span> uint32_t auxCountBytes = ((auxHashMap == <span class="keyword">nullptr</span>) ? 0 : auxHashMap-&gt;getCompactSizeBytes());</div>
-<div class="line"><a id="l00526" name="l00526"></a><span class="lineno">  526</span>  <span class="keywordflow">return</span> hll_constants::HLL_BYTE_ARR_START + getHllByteArrBytes() + auxCountBytes;</div>
-<div class="line"><a id="l00527" name="l00527"></a><span class="lineno">  527</span>}</div>
-<div class="line"><a id="l00528" name="l00528"></a><span class="lineno">  528</span> </div>
-<div class="line"><a id="l00529" name="l00529"></a><span class="lineno">  529</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00530" name="l00530"></a><span class="lineno">  530</span>uint8_t HllArray&lt;A&gt;::getPreInts()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00531" name="l00531"></a><span class="lineno">  531</span>  <span class="keywordflow">return</span> hll_constants::HLL_PREINTS;</div>
-<div class="line"><a id="l00532" name="l00532"></a><span class="lineno">  532</span>}</div>
-<div class="line"><a id="l00533" name="l00533"></a><span class="lineno">  533</span> </div>
-<div class="line"><a id="l00534" name="l00534"></a><span class="lineno">  534</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00535" name="l00535"></a><span class="lineno">  535</span>AuxHashMap&lt;A&gt;* HllArray&lt;A&gt;::getAuxHashMap()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00536" name="l00536"></a><span class="lineno">  536</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
-<div class="line"><a id="l00537" name="l00537"></a><span class="lineno">  537</span>}</div>
-<div class="line"><a id="l00538" name="l00538"></a><span class="lineno">  538</span> </div>
-<div class="line"><a id="l00539" name="l00539"></a><span class="lineno">  539</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00540" name="l00540"></a><span class="lineno">  540</span><span class="keyword">auto</span> HllArray&lt;A&gt;::getHllArray() const -&gt; const vector_bytes&amp; {</div>
-<div class="line"><a id="l00541" name="l00541"></a><span class="lineno">  541</span>  <span class="keywordflow">return</span> hllByteArr_;</div>
-<div class="line"><a id="l00542" name="l00542"></a><span class="lineno">  542</span>}</div>
-<div class="line"><a id="l00543" name="l00543"></a><span class="lineno">  543</span> </div>
-<div class="line"><a id="l00544" name="l00544"></a><span class="lineno">  544</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00545" name="l00545"></a><span class="lineno">  545</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::hipAndKxQIncrementalUpdate(uint8_t oldValue, uint8_t newValue) {</div>
-<div class="line"><a id="l00546" name="l00546"></a><span class="lineno">  546</span>  <span class="keyword">const</span> uint32_t configK = 1 &lt;&lt; this-&gt;getLgConfigK();</div>
-<div class="line"><a id="l00547" name="l00547"></a><span class="lineno">  547</span>  <span class="comment">// update hip BEFORE updating kxq</span></div>
-<div class="line"><a id="l00548" name="l00548"></a><span class="lineno">  548</span>  <span class="keywordflow">if</span> (!oooFlag_) hipAccum_ += configK / (kxq0_ + kxq1_);</div>
-<div class="line"><a id="l00549" name="l00549"></a><span class="lineno">  549</span>  <span class="comment">// update kxq0 and kxq1; subtract first, then add</span></div>
-<div class="line"><a id="l00550" name="l00550"></a><span class="lineno">  550</span>  <span class="keywordflow">if</span> (oldValue &lt; 32) { kxq0_ -= INVERSE_POWERS_OF_2[oldValue]; }</div>
-<div class="line"><a id="l00551" name="l00551"></a><span class="lineno">  551</span>  <span class="keywordflow">else</span>               { kxq1_ -= INVERSE_POWERS_OF_2[oldValue]; }</div>
-<div class="line"><a id="l00552" name="l00552"></a><span class="lineno">  552</span>  <span class="keywordflow">if</span> (newValue &lt; 32) { kxq0_ += INVERSE_POWERS_OF_2[newValue]; }</div>
-<div class="line"><a id="l00553" name="l00553"></a><span class="lineno">  553</span>  <span class="keywordflow">else</span>               { kxq1_ += INVERSE_POWERS_OF_2[newValue]; }</div>
-<div class="line"><a id="l00554" name="l00554"></a><span class="lineno">  554</span>}</div>
-<div class="line"><a id="l00555" name="l00555"></a><span class="lineno">  555</span> </div>
-<div class="line"><a id="l00561" name="l00561"></a><span class="lineno">  561</span><span class="comment">//In C: again-two-registers.c hhb_get_improved_linear_counting_estimate L1274</span></div>
-<div class="line"><a id="l00562" name="l00562"></a><span class="lineno">  562</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00563" name="l00563"></a><span class="lineno">  563</span><span class="keywordtype">double</span> HllArray&lt;A&gt;::getHllBitMapEstimate()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00564" name="l00564"></a><span class="lineno">  564</span>  <span class="keyword">const</span> uint32_t configK = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00565" name="l00565"></a><span class="lineno">  565</span>  <span class="keyword">const</span> uint32_t numUnhitBuckets = curMin_ == 0 ? numAtCurMin_ : 0;</div>
-<div class="line"><a id="l00566" name="l00566"></a><span class="lineno">  566</span> </div>
-<div class="line"><a id="l00567" name="l00567"></a><span class="lineno">  567</span>  <span class="comment">//This will eventually go away.</span></div>
-<div class="line"><a id="l00568" name="l00568"></a><span class="lineno">  568</span>  <span class="keywordflow">if</span> (numUnhitBuckets == 0) {</div>
-<div class="line"><a id="l00569" name="l00569"></a><span class="lineno">  569</span>    <span class="keywordflow">return</span> configK * log(configK / 0.5);</div>
-<div class="line"><a id="l00570" name="l00570"></a><span class="lineno">  570</span>  }</div>
-<div class="line"><a id="l00571" name="l00571"></a><span class="lineno">  571</span> </div>
-<div class="line"><a id="l00572" name="l00572"></a><span class="lineno">  572</span>  <span class="keyword">const</span> uint32_t numHitBuckets = configK - numUnhitBuckets;</div>
-<div class="line"><a id="l00573" name="l00573"></a><span class="lineno">  573</span>  <span class="keywordflow">return</span> HarmonicNumbers&lt;A&gt;::getBitMapEstimate(configK, numHitBuckets);</div>
-<div class="line"><a id="l00574" name="l00574"></a><span class="lineno">  574</span>}</div>
-<div class="line"><a id="l00575" name="l00575"></a><span class="lineno">  575</span> </div>
-<div class="line"><a id="l00576" name="l00576"></a><span class="lineno">  576</span><span class="comment">//In C: again-two-registers.c hhb_get_raw_estimate L1167</span></div>
-<div class="line"><a id="l00577" name="l00577"></a><span class="lineno">  577</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00578" name="l00578"></a><span class="lineno">  578</span><span class="keywordtype">double</span> HllArray&lt;A&gt;::getHllRawEstimate()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00579" name="l00579"></a><span class="lineno">  579</span>  <span class="keyword">const</span> uint32_t configK = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00580" name="l00580"></a><span class="lineno">  580</span>  <span class="keywordtype">double</span> correctionFactor;</div>
-<div class="line"><a id="l00581" name="l00581"></a><span class="lineno">  581</span>  <span class="keywordflow">if</span> (this-&gt;lgConfigK_ == 4) { correctionFactor = 0.673; }</div>
-<div class="line"><a id="l00582" name="l00582"></a><span class="lineno">  582</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;lgConfigK_ == 5) { correctionFactor = 0.697; }</div>
-<div class="line"><a id="l00583" name="l00583"></a><span class="lineno">  583</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (this-&gt;lgConfigK_ == 6) { correctionFactor = 0.709; }</div>
-<div class="line"><a id="l00584" name="l00584"></a><span class="lineno">  584</span>  <span class="keywordflow">else</span> { correctionFactor = 0.7213 / (1.0 + (1.079 / configK)); }</div>
-<div class="line"><a id="l00585" name="l00585"></a><span class="lineno">  585</span>  <span class="keyword">const</span> <span class="keywordtype">double</span> hyperEst = (correctionFactor * configK * configK) / (kxq0_ + kxq1_);</div>
-<div class="line"><a id="l00586" name="l00586"></a><span class="lineno">  586</span>  <span class="keywordflow">return</span> hyperEst;</div>
-<div class="line"><a id="l00587" name="l00587"></a><span class="lineno">  587</span>}</div>
-<div class="line"><a id="l00588" name="l00588"></a><span class="lineno">  588</span> </div>
-<div class="line"><a id="l00589" name="l00589"></a><span class="lineno">  589</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00590" name="l00590"></a><span class="lineno">  590</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::setRebuildKxqCurminFlag(<span class="keywordtype">bool</span> rebuild) {</div>
-<div class="line"><a id="l00591" name="l00591"></a><span class="lineno">  591</span>  rebuild_kxq_curmin_ = rebuild;</div>
-<div class="line"><a id="l00592" name="l00592"></a><span class="lineno">  592</span>}</div>
-<div class="line"><a id="l00593" name="l00593"></a><span class="lineno">  593</span> </div>
-<div class="line"><a id="l00594" name="l00594"></a><span class="lineno">  594</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00595" name="l00595"></a><span class="lineno">  595</span><span class="keywordtype">bool</span> HllArray&lt;A&gt;::isRebuildKxqCurminFlag()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00596" name="l00596"></a><span class="lineno">  596</span>  <span class="keywordflow">return</span> rebuild_kxq_curmin_;</div>
-<div class="line"><a id="l00597" name="l00597"></a><span class="lineno">  597</span>}</div>
-<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span> </div>
-<div class="line"><a id="l00599" name="l00599"></a><span class="lineno">  599</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00600" name="l00600"></a><span class="lineno">  600</span><span class="keywordtype">void</span> HllArray&lt;A&gt;::check_rebuild_kxq_cur_min() {</div>
-<div class="line"><a id="l00601" name="l00601"></a><span class="lineno">  601</span>  <span class="keywordflow">if</span> (!rebuild_kxq_curmin_) { <span class="keywordflow">return</span>; }</div>
-<div class="line"><a id="l00602" name="l00602"></a><span class="lineno">  602</span> </div>
-<div class="line"><a id="l00603" name="l00603"></a><span class="lineno">  603</span>  uint8_t cur_min = 64;</div>
-<div class="line"><a id="l00604" name="l00604"></a><span class="lineno">  604</span>  uint32_t num_at_cur_min = 0;</div>
-<div class="line"><a id="l00605" name="l00605"></a><span class="lineno">  605</span>  <span class="keywordtype">double</span> kxq0 = 1 &lt;&lt; this-&gt;lgConfigK_;</div>
-<div class="line"><a id="l00606" name="l00606"></a><span class="lineno">  606</span>  <span class="keywordtype">double</span> kxq1 = 0;</div>
-<div class="line"><a id="l00607" name="l00607"></a><span class="lineno">  607</span> </div>
-<div class="line"><a id="l00608" name="l00608"></a><span class="lineno">  608</span>  <span class="keyword">auto</span> it = this-&gt;begin(<span class="keyword">true</span>); <span class="comment">// want all points to adjust cur_min</span></div>
-<div class="line"><a id="l00609" name="l00609"></a><span class="lineno">  609</span>  <span class="keyword">const</span> <span class="keyword">auto</span> end = this-&gt;end();</div>
-<div class="line"><a id="l00610" name="l00610"></a><span class="lineno">  610</span>  <span class="keywordflow">while</span> (it != end) {</div>
-<div class="line"><a id="l00611" name="l00611"></a><span class="lineno">  611</span>    uint8_t v = HllUtil&lt;A&gt;::getValue(*it);</div>
-<div class="line"><a id="l00612" name="l00612"></a><span class="lineno">  612</span>    <span class="keywordflow">if</span> (v &gt; 0) {</div>
-<div class="line"><a id="l00613" name="l00613"></a><span class="lineno">  613</span>      <span class="keywordflow">if</span> (v &lt; 32) { kxq0 += INVERSE_POWERS_OF_2[v] - 1.0; }</div>
-<div class="line"><a id="l00614" name="l00614"></a><span class="lineno">  614</span>      <span class="keywordflow">else</span>        { kxq1 += INVERSE_POWERS_OF_2[v] - 1.0; }</div>
-<div class="line"><a id="l00615" name="l00615"></a><span class="lineno">  615</span>    }</div>
-<div class="line"><a id="l00616" name="l00616"></a><span class="lineno">  616</span>    <span class="keywordflow">if</span> (v &gt; cur_min) { ++it; <span class="keywordflow">continue</span>; }</div>
-<div class="line"><a id="l00617" name="l00617"></a><span class="lineno">  617</span>    <span class="keywordflow">if</span> (v &lt; cur_min) {</div>
-<div class="line"><a id="l00618" name="l00618"></a><span class="lineno">  618</span>      cur_min = v;</div>
-<div class="line"><a id="l00619" name="l00619"></a><span class="lineno">  619</span>      num_at_cur_min = 1;</div>
-<div class="line"><a id="l00620" name="l00620"></a><span class="lineno">  620</span>    } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00621" name="l00621"></a><span class="lineno">  621</span>      ++num_at_cur_min;</div>
-<div class="line"><a id="l00622" name="l00622"></a><span class="lineno">  622</span>    }    </div>
-<div class="line"><a id="l00623" name="l00623"></a><span class="lineno">  623</span>    ++it;</div>
-<div class="line"><a id="l00624" name="l00624"></a><span class="lineno">  624</span>  }</div>
-<div class="line"><a id="l00625" name="l00625"></a><span class="lineno">  625</span> </div>
-<div class="line"><a id="l00626" name="l00626"></a><span class="lineno">  626</span>  kxq0_ = kxq0;</div>
-<div class="line"><a id="l00627" name="l00627"></a><span class="lineno">  627</span>  kxq1_ = kxq1;</div>
-<div class="line"><a id="l00628" name="l00628"></a><span class="lineno">  628</span>  curMin_ = cur_min;</div>
-<div class="line"><a id="l00629" name="l00629"></a><span class="lineno">  629</span>  numAtCurMin_ = num_at_cur_min;</div>
-<div class="line"><a id="l00630" name="l00630"></a><span class="lineno">  630</span>  rebuild_kxq_curmin_ = <span class="keyword">false</span>;</div>
-<div class="line"><a id="l00631" name="l00631"></a><span class="lineno">  631</span>  <span class="comment">// HipAccum is not affected</span></div>
-<div class="line"><a id="l00632" name="l00632"></a><span class="lineno">  632</span> </div>
-<div class="line"><a id="l00633" name="l00633"></a><span class="lineno">  633</span>}</div>
-<div class="line"><a id="l00634" name="l00634"></a><span class="lineno">  634</span> </div>
-<div class="line"><a id="l00635" name="l00635"></a><span class="lineno">  635</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00636" name="l00636"></a><span class="lineno">  636</span><span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator HllArray&lt;A&gt;::begin(<span class="keywordtype">bool</span> all)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00637" name="l00637"></a><span class="lineno">  637</span>  <span class="keywordflow">return</span> const_iterator(hllByteArr_.data(), 1 &lt;&lt; this-&gt;lgConfigK_, 0, this-&gt;tgtHllType_, <span class="keyword">nullptr</span>, 0, all);</div>
-<div class="line"><a id="l00638" name="l00638"></a><span class="lineno">  638</span>}</div>
-<div class="line"><a id="l00639" name="l00639"></a><span class="lineno">  639</span> </div>
-<div class="line"><a id="l00640" name="l00640"></a><span class="lineno">  640</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00641" name="l00641"></a><span class="lineno">  641</span><span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator HllArray&lt;A&gt;::end()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00642" name="l00642"></a><span class="lineno">  642</span>  <span class="keywordflow">return</span> const_iterator(hllByteArr_.data(), 1 &lt;&lt; this-&gt;lgConfigK_, 1 &lt;&lt; this-&gt;lgConfigK_, this-&gt;tgtHllType_, <span class="keyword">nullptr</span>, 0, <span class="keyword">false</span>);</div>
-<div class="line"><a id="l00643" name="l00643"></a><span class="lineno">  643</span>}</div>
-<div class="line"><a id="l00644" name="l00644"></a><span class="lineno">  644</span> </div>
-<div class="line"><a id="l00645" name="l00645"></a><span class="lineno">  645</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00646" name="l00646"></a><span class="lineno">  646</span>HllArray&lt;A&gt;::const_iterator::const_iterator(<span class="keyword">const</span> uint8_t* array, uint32_t array_size, uint32_t index, target_hll_type hll_type, <span class="keyword">const</span> AuxHashMap&lt;A&gt;* exceptions, uint8_t offset, <span class="keywordtype">bool</span> all):</div>
-<div class="line"><a id="l00647" name="l00647"></a><span class="lineno">  647</span>array_(array), array_size_(array_size), index_(index), hll_type_(hll_type), exceptions_(exceptions), offset_(offset), all_(all)</div>
-<div class="line"><a id="l00648" name="l00648"></a><span class="lineno">  648</span>{</div>
-<div class="line"><a id="l00649" name="l00649"></a><span class="lineno">  649</span>  <span class="keywordflow">while</span> (index_ &lt; array_size_) {</div>
-<div class="line"><a id="l00650" name="l00650"></a><span class="lineno">  650</span>    value_ = get_value(array_, index_, hll_type_, exceptions_, offset_);</div>
-<div class="line"><a id="l00651" name="l00651"></a><span class="lineno">  651</span>    <span class="keywordflow">if</span> (all_ || value_ != hll_constants::EMPTY) <span class="keywordflow">break</span>;</div>
-<div class="line"><a id="l00652" name="l00652"></a><span class="lineno">  652</span>    ++index_;</div>
-<div class="line"><a id="l00653" name="l00653"></a><span class="lineno">  653</span>  }</div>
-<div class="line"><a id="l00654" name="l00654"></a><span class="lineno">  654</span>}</div>
-<div class="line"><a id="l00655" name="l00655"></a><span class="lineno">  655</span> </div>
-<div class="line"><a id="l00656" name="l00656"></a><span class="lineno">  656</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00657" name="l00657"></a><span class="lineno">  657</span><span class="keyword">typename</span> HllArray&lt;A&gt;::const_iterator&amp; HllArray&lt;A&gt;::const_iterator::operator++() {</div>
-<div class="line"><a id="l00658" name="l00658"></a><span class="lineno">  658</span>  <span class="keywordflow">while</span> (++index_ &lt; array_size_) {</div>
-<div class="line"><a id="l00659" name="l00659"></a><span class="lineno">  659</span>    value_ = get_value(array_, index_, hll_type_, exceptions_, offset_);</div>
-<div class="line"><a id="l00660" name="l00660"></a><span class="lineno">  660</span>    <span class="keywordflow">if</span> (all_ || value_ != hll_constants::EMPTY) <span class="keywordflow">break</span>;</div>
-<div class="line"><a id="l00661" name="l00661"></a><span class="lineno">  661</span>  }</div>
-<div class="line"><a id="l00662" name="l00662"></a><span class="lineno">  662</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
-<div class="line"><a id="l00663" name="l00663"></a><span class="lineno">  663</span>}</div>
-<div class="line"><a id="l00664" name="l00664"></a><span class="lineno">  664</span> </div>
-<div class="line"><a id="l00665" name="l00665"></a><span class="lineno">  665</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00666" name="l00666"></a><span class="lineno">  666</span><span class="keywordtype">bool</span> HllArray&lt;A&gt;::const_iterator::operator!=(<span class="keyword">const</span> const_iterator&amp; other)<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00667" name="l00667"></a><span class="lineno">  667</span>  <span class="keywordflow">return</span> index_ != other.index_;</div>
-<div class="line"><a id="l00668" name="l00668"></a><span class="lineno">  668</span>}</div>
-<div class="line"><a id="l00669" name="l00669"></a><span class="lineno">  669</span> </div>
-<div class="line"><a id="l00670" name="l00670"></a><span class="lineno">  670</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00671" name="l00671"></a><span class="lineno">  671</span><span class="keyword">auto</span> HllArray&lt;A&gt;::const_iterator::operator*() const -&gt; reference {</div>
-<div class="line"><a id="l00672" name="l00672"></a><span class="lineno">  672</span>  <span class="keywordflow">return</span> HllUtil&lt;A&gt;::pair(index_, value_);</div>
-<div class="line"><a id="l00673" name="l00673"></a><span class="lineno">  673</span>}</div>
-<div class="line"><a id="l00674" name="l00674"></a><span class="lineno">  674</span> </div>
-<div class="line"><a id="l00675" name="l00675"></a><span class="lineno">  675</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00676" name="l00676"></a><span class="lineno">  676</span>uint8_t HllArray&lt;A&gt;::const_iterator::get_value(<span class="keyword">const</span> uint8_t* array, uint32_t index, target_hll_type hll_type, <span class="keyword">const</span> AuxHashMap&lt;A&gt;* exceptions, uint8_t offset) {</div>
-<div class="line"><a id="l00677" name="l00677"></a><span class="lineno">  677</span>  <span class="comment">// TODO: we should be able to improve efficiency here by reading multiple bytes at a time</span></div>
-<div class="line"><a id="l00678" name="l00678"></a><span class="lineno">  678</span>  <span class="comment">//       for HLL4 and HLL6</span></div>
-<div class="line"><a id="l00679" name="l00679"></a><span class="lineno">  679</span>  <span class="keywordflow">if</span> (hll_type == target_hll_type::HLL_4) {</div>
-<div class="line"><a id="l00680" name="l00680"></a><span class="lineno">  680</span>    uint8_t value = array[index &gt;&gt; 1];</div>
-<div class="line"><a id="l00681" name="l00681"></a><span class="lineno">  681</span>    <span class="keywordflow">if</span> ((index &amp; 1) &gt; 0) { <span class="comment">// odd</span></div>
-<div class="line"><a id="l00682" name="l00682"></a><span class="lineno">  682</span>        value &gt;&gt;= 4;</div>
-<div class="line"><a id="l00683" name="l00683"></a><span class="lineno">  683</span>    } <span class="keywordflow">else</span> {</div>
-<div class="line"><a id="l00684" name="l00684"></a><span class="lineno">  684</span>      value &amp;= hll_constants::loNibbleMask;</div>
-<div class="line"><a id="l00685" name="l00685"></a><span class="lineno">  685</span>    }</div>
-<div class="line"><a id="l00686" name="l00686"></a><span class="lineno">  686</span>    <span class="keywordflow">if</span> (value == hll_constants::AUX_TOKEN) { <span class="comment">// exception</span></div>
-<div class="line"><a id="l00687" name="l00687"></a><span class="lineno">  687</span>      <span class="keywordflow">return</span> exceptions-&gt;mustFindValueFor(index);</div>
-<div class="line"><a id="l00688" name="l00688"></a><span class="lineno">  688</span>    }</div>
-<div class="line"><a id="l00689" name="l00689"></a><span class="lineno">  689</span>    <span class="keywordflow">return</span> value + offset;</div>
-<div class="line"><a id="l00690" name="l00690"></a><span class="lineno">  690</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (hll_type == target_hll_type::HLL_6) {</div>
-<div class="line"><a id="l00691" name="l00691"></a><span class="lineno">  691</span>    <span class="keyword">const</span> <span class="keywordtype">size_t</span> start_bit = index * 6;</div>
-<div class="line"><a id="l00692" name="l00692"></a><span class="lineno">  692</span>    <span class="keyword">const</span> uint8_t shift = start_bit &amp; 0x7;</div>
-<div class="line"><a id="l00693" name="l00693"></a><span class="lineno">  693</span>    <span class="keyword">const</span> <span class="keywordtype">size_t</span> byte_idx = start_bit &gt;&gt; 3;</div>
-<div class="line"><a id="l00694" name="l00694"></a><span class="lineno">  694</span>    <span class="keyword">const</span> uint16_t two_byte_val = (array[byte_idx + 1] &lt;&lt; 8) | array[byte_idx];</div>
-<div class="line"><a id="l00695" name="l00695"></a><span class="lineno">  695</span>    <span class="keywordflow">return</span> (two_byte_val &gt;&gt; shift) &amp; hll_constants::VAL_MASK_6;</div>
-<div class="line"><a id="l00696" name="l00696"></a><span class="lineno">  696</span>  }</div>
-<div class="line"><a id="l00697" name="l00697"></a><span class="lineno">  697</span>  <span class="comment">// HLL_8</span></div>
-<div class="line"><a id="l00698" name="l00698"></a><span class="lineno">  698</span>  <span class="keywordflow">return</span> array[index];</div>
-<div class="line"><a id="l00699" name="l00699"></a><span class="lineno">  699</span>}</div>
-<div class="line"><a id="l00700" name="l00700"></a><span class="lineno">  700</span> </div>
-<div class="line"><a id="l00701" name="l00701"></a><span class="lineno">  701</span><span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
-<div class="line"><a id="l00702" name="l00702"></a><span class="lineno">  702</span>A HllArray&lt;A&gt;::getAllocator()<span class="keyword"> const </span>{</div>
-<div class="line"><a id="l00703" name="l00703"></a><span class="lineno">  703</span>  <span class="keywordflow">return</span> hllByteArr_.get_allocator();</div>
-<div class="line"><a id="l00704" name="l00704"></a><span class="lineno">  704</span>}</div>
-<div class="line"><a id="l00705" name="l00705"></a><span class="lineno">  705</span> </div>
-<div class="line"><a id="l00706" name="l00706"></a><span class="lineno">  706</span>}</div>
-<div class="line"><a id="l00707" name="l00707"></a><span class="lineno">  707</span> </div>
-<div class="line"><a id="l00708" name="l00708"></a><span class="lineno">  708</span><span class="preprocessor">#endif </span><span class="comment">// _HLLARRAY_INTERNAL_HPP_</span></div>
-<div class="ttc" id="anamespacedatasketches_html"><div class="ttname"><a href="namespacedatasketches.html">datasketches</a></div><div class="ttdoc">DataSketches namespace.</div><div class="ttdef"><b>Definition</b> binomial_bounds.hpp:38</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">datasketches::target_hll_type</a></div><div class="ttdeci">target_hll_type</div><div class="ttdoc">Specifies the target type of HLL sketch to be created.</div><div class="ttdef"><b>Definition</b> hll.hpp:72</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a0a2179d612c2ce6887e96279f25d7a77">datasketches::HLL_6</a></div><div class="ttdeci">@ HLL_6</div><div class="ttdoc">6 bits per entry (fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:74</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4a3a5efa79623d3e2ab53f27ef53237c7f">datasketches::HLL_8</a></div><div class="ttdeci">@ HLL_8</div><div class="ttdoc">8 bits per entry (fastest, fixed size)</div><div class="ttdef"><b>Definition</b> hll.hpp:75</div></div>
-<div class="ttc" id="anamespacedatasketches_html_a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9"><div class="ttname"><a href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4aebdac6704039b95d8b82629cda14b1b9">datasketches::HLL_4</a></div><div class="ttdeci">@ HLL_4</div><div class="ttdoc">4 bits per entry (most compact, size may vary)</div><div class="ttdef"><b>Definition</b> hll.hpp:73</div></div>
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * or more contributor license agreements.  See the NOTICE file</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * distributed with this work for additional information</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * regarding copyright ownership.  The ASF licenses this file</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * to you under the Apache License, Version 2.0 (the</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * &quot;License&quot;); you may not use this file except in compliance</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * with the License.  You may obtain a copy of the License at</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *   http://www.apache.org/licenses/LICENSE-2.0</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing,</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * software distributed under the License is distributed on an</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> * &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> * KIND, either express or implied.  See the License for the</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> * specific language governing permissions and limitations</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * under the License.</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifndef _HLLARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#define _HLLARRAY_INTERNAL_HPP_</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;HllArray.hpp&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &quot;HllUtil.hpp&quot;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;HarmonicNumbers.hpp&quot;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;CubicInterpolation.hpp&quot;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &quot;CompositeInterpolationXTable.hpp&quot;</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &quot;CouponList.hpp&quot;</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &quot;inv_pow2_table.hpp&quot;</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &lt;cmath&gt;</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacedatasketches.html">datasketches</a> {</div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;HllArray&lt;A&gt;::HllArray(uint8_t lgConfigK, <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType, <span class="keywordtype">bool</span> startFullSize, <span class="keyword">const</span> A&amp; allocator):</div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;HllSketchImpl&lt;A&gt;(lgConfigK, tgtHllType, hll_mode::HLL, startFullSize),</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;hipAccum_(0.0),</div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;kxq0_(1 &lt;&lt; lgConfigK),</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;kxq1_(0.0),</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;hllByteArr_(allocator),</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;curMin_(0),</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;numAtCurMin_(1 &lt;&lt; lgConfigK),</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;oooFlag_(false),</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;rebuild_kxq_curmin_(false)</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;{}</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;HllArray&lt;A&gt;::HllArray(<span class="keyword">const</span> HllArray&amp; other, target_hll_type tgtHllType) :</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  HllSketchImpl&lt;A&gt;(other.getLgConfigK(), tgtHllType, hll_mode::HLL, other.isStartFullSize()),</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  <span class="comment">// remaining fields are initialized to empty sketch defaults</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  <span class="comment">// and left to subclass constructor to populate</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  hipAccum_(0.0),</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  kxq0_(1 &lt;&lt; other.getLgConfigK()),</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  kxq1_(0.0),</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  hllByteArr_(other.getAllocator()),</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  curMin_(0),</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  numAtCurMin_(1 &lt;&lt; other.getLgConfigK()),</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  oooFlag_(false),</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  rebuild_kxq_curmin_(false)</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;{}</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;HllArray&lt;A&gt;* HllArray&lt;A&gt;::copyAs(target_hll_type tgtHllType)<span class="keyword"> const </span>{</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  <span class="comment">// we may need to recompute KxQ and curMin data for a union gadget,</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  <span class="comment">// so only use a direct copy if we have a valid sketch</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="keywordflow">if</span> (tgtHllType == this-&gt;getTgtHllType() &amp;&amp; !this-&gt;isRebuildKxqCurminFlag()) {</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>HllArray*<span class="keyword">&gt;</span>(copy());</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  }</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;  <span class="comment">// the factory methods replay the coupons and will always rebuild</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="comment">// the sketch in a consistent way</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  <span class="keywordflow">switch</span> (tgtHllType) {</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    <span class="keywordflow">case</span> target_hll_type::HLL_4:</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;      <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::convertToHll4(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    <span class="keywordflow">case</span> target_hll_type::HLL_6:</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;      <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::convertToHll6(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keywordflow">case</span> target_hll_type::HLL_8:</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;      <span class="keywordflow">return</span> HllSketchImplFactory&lt;A&gt;::convertToHll8(*<span class="keyword">this</span>);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    <span class="keywordflow">default</span>:</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;      <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Invalid target HLL type&quot;</span>); </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  }</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;}</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160; </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;HllArray&lt;A&gt;* HllArray&lt;A&gt;::newHll(<span class="keyword">const</span> <span class="keywordtype">void</span>* bytes, <span class="keywordtype">size_t</span> len, <span class="keyword">const</span> A&amp; allocator) {</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  <span class="keywordflow">if</span> (len &lt; hll_constants::HLL_BYTE_ARR_START) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input data length insufficient to hold HLL array&quot;</span>);</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  }</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160; </div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  <span class="keyword">const</span> uint8_t* data = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span>uint8_t*<span class="keyword">&gt;</span>(bytes);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  <span class="keywordflow">if</span> (data[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  }</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <span class="keywordflow">if</span> (data[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  }</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  <span class="keywordflow">if</span> (data[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input array is not an HLL sketch&quot;</span>);</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="keyword">const</span> hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  <span class="keywordflow">if</span> (mode != HLL) {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling HLL array constructor with non-HLL mode data&quot;</span>);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(data[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> comapctFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> startFullSizeFlag = ((data[hll_constants::FLAGS_BYTE] &amp; hll_constants::FULL_SIZE_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160; </div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  <span class="keyword">const</span> uint8_t lgK = data[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  <span class="keyword">const</span> uint8_t curMin = data[hll_constants::HLL_CUR_MIN_BYTE];</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  <span class="keyword">const</span> uint32_t arrayBytes = hllArrBytes(tgtHllType, lgK);</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  <span class="keywordflow">if</span> (len &lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(hll_constants::HLL_BYTE_ARR_START + arrayBytes)) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;Input array too small to hold sketch image&quot;</span>);</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  }</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160; </div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <span class="keywordtype">double</span> hip, kxq0, kxq1;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  std::memcpy(&amp;hip, data + hll_constants::HIP_ACCUM_DOUBLE, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  std::memcpy(&amp;kxq0, data + hll_constants::KXQ0_DOUBLE, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  std::memcpy(&amp;kxq1, data + hll_constants::KXQ1_DOUBLE, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160; </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  uint32_t numAtCurMin, auxCount;</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  std::memcpy(&amp;numAtCurMin, data + hll_constants::CUR_MIN_COUNT_INT, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  std::memcpy(&amp;auxCount, data + hll_constants::AUX_COUNT_INT, <span class="keyword">sizeof</span>(<span class="keywordtype">int</span>));</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160; </div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;  AuxHashMap&lt;A&gt;* auxHashMap = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  <span class="keyword">typedef</span> std::unique_ptr&lt;AuxHashMap&lt;A&gt;, std::function&lt;void(AuxHashMap&lt;A&gt;*)&gt;&gt; aux_hash_map_ptr;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  aux_hash_map_ptr aux_ptr;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="keywordflow">if</span> (auxCount &gt; 0) { <span class="comment">// necessarily TgtHllType == HLL_4</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    uint8_t auxLgIntArrSize = data[4];</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> offset = hll_constants::HLL_BYTE_ARR_START + arrayBytes;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <span class="keyword">const</span> uint8_t* auxDataStart = data + offset;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    auxHashMap = AuxHashMap&lt;A&gt;::deserialize(auxDataStart, len - offset, lgK, auxCount, auxLgIntArrSize, comapctFlag, allocator);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    aux_ptr = aux_hash_map_ptr(auxHashMap, auxHashMap-&gt;make_deleter());</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160; </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  HllArray&lt;A&gt;* sketch = HllSketchImplFactory&lt;A&gt;::newHll(lgK, tgtHllType, startFullSizeFlag, allocator);</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  sketch-&gt;putCurMin(curMin);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  sketch-&gt;putOutOfOrderFlag(oooFlag);</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  <span class="keywordflow">if</span> (!oooFlag) sketch-&gt;putHipAccum(hip);</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  sketch-&gt;putKxQ0(kxq0);</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  sketch-&gt;putKxQ1(kxq1);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  sketch-&gt;putNumAtCurMin(numAtCurMin);</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160; </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  std::memcpy(sketch-&gt;hllByteArr_.data(), data + hll_constants::HLL_BYTE_ARR_START, arrayBytes);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160; </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>)</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    ((Hll4Array&lt;A&gt;*)sketch)-&gt;putAuxHashMap(auxHashMap);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  aux_ptr.release();</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  <span class="keywordflow">return</span> sketch;</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;}</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160; </div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;HllArray&lt;A&gt;* HllArray&lt;A&gt;::newHll(std::istream&amp; is, <span class="keyword">const</span> A&amp; allocator) {</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  uint8_t listHeader[8];</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  read(is, listHeader, 8 * <span class="keyword">sizeof</span>(uint8_t));</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160; </div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;  <span class="keywordflow">if</span> (listHeader[hll_constants::PREAMBLE_INTS_BYTE] != hll_constants::HLL_PREINTS) {</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Incorrect number of preInts in input stream&quot;</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  }</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  <span class="keywordflow">if</span> (listHeader[hll_constants::SER_VER_BYTE] != hll_constants::SER_VER) {</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Wrong ser ver in input stream&quot;</span>);</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;  }</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  <span class="keywordflow">if</span> (listHeader[hll_constants::FAMILY_BYTE] != hll_constants::FAMILY_ID) {</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Input stream is not an HLL sketch&quot;</span>);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  }</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160; </div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;  hll_mode mode = HllSketchImpl&lt;A&gt;::extractCurMode(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;  <span class="keywordflow">if</span> (mode != HLL) {</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keywordflow">throw</span> std::invalid_argument(<span class="stringliteral">&quot;Calling HLL construtor with non-HLL mode data&quot;</span>);</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  }</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160; </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  <span class="keyword">const</span> <a class="code" href="namespacedatasketches.html#a76c1ad9235877691984d49415bb263e4">target_hll_type</a> tgtHllType = HllSketchImpl&lt;A&gt;::extractTgtHllType(listHeader[hll_constants::MODE_BYTE]);</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> oooFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::OUT_OF_ORDER_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> comapctFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::COMPACT_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">bool</span> startFullSizeFlag = ((listHeader[hll_constants::FLAGS_BYTE] &amp; hll_constants::FULL_SIZE_FLAG_MASK) ? <span class="keyword">true</span> : <span class="keyword">false</span>);</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160; </div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;  <span class="keyword">const</span> uint8_t lgK = listHeader[hll_constants::LG_K_BYTE];</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;  <span class="keyword">const</span> uint8_t curMin = listHeader[hll_constants::HLL_CUR_MIN_BYTE];</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160; </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;  HllArray* sketch = HllSketchImplFactory&lt;A&gt;::newHll(lgK, tgtHllType, startFullSizeFlag, allocator);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  <span class="keyword">typedef</span> std::unique_ptr&lt;HllArray&lt;A&gt;, std::function&lt;void(HllSketchImpl&lt;A&gt;*)&gt;&gt; hll_array_ptr;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;  hll_array_ptr sketch_ptr(sketch, sketch-&gt;get_deleter());</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  sketch-&gt;putCurMin(curMin);</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  sketch-&gt;putOutOfOrderFlag(oooFlag);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="keyword">const</span> <span class="keyword">auto</span> hip = read&lt;double&gt;(is);</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  <span class="keyword">const</span> <span class="keyword">auto</span> kxq0 = read&lt;double&gt;(is);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  <span class="keyword">const</span> <span class="keyword">auto</span> kxq1 = read&lt;double&gt;(is);</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  <span class="keywordflow">if</span> (!oooFlag) sketch-&gt;putHipAccum(hip);</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  sketch-&gt;putKxQ0(kxq0);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  sketch-&gt;putKxQ1(kxq1);</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160; </div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  <span class="keyword">const</span> <span class="keyword">auto</span> numAtCurMin = read&lt;uint32_t&gt;(is);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  <span class="keyword">const</span> <span class="keyword">auto</span> auxCount = read&lt;uint32_t&gt;(is);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  sketch-&gt;putNumAtCurMin(numAtCurMin);</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;  </div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;  read(is, sketch-&gt;hllByteArr_.data(), sketch-&gt;getHllByteArrBytes());</div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;  </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;  <span class="keywordflow">if</span> (auxCount &gt; 0) { <span class="comment">// necessarily TgtHllType == HLL_4</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    uint8_t auxLgIntArrSize = listHeader[4];</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    AuxHashMap&lt;A&gt;* auxHashMap = AuxHashMap&lt;A&gt;::deserialize(is, lgK, auxCount, auxLgIntArrSize, comapctFlag, allocator);</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    ((Hll4Array&lt;A&gt;*)sketch)-&gt;putAuxHashMap(auxHashMap);</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;  }</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160; </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;  <span class="keywordflow">if</span> (!is.good())</div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;error reading from std::istream&quot;</span>); </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160; </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;  <span class="keywordflow">return</span> sketch_ptr.release();</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;}</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160; </div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> A&gt;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;<span class="keyword">auto</span> HllArray&lt;A&gt;::serialize(<span class="keywordtype">bool</span> compact, <span class="keywordtype">unsigned</span> header_size_bytes) <span class="keyword">const</span> -&gt; vector_bytes {</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  <span class="keyword">const</span> <span class="keywordtype">size_t</span> sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  vector_bytes byteArr(sketchSizeBytes, 0, getAllocator());</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  uint8_t* bytes = byteArr.data() + header_size_bytes;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  AuxHashMap&lt;A&gt;* auxHashMap = getAuxHashMap();</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160; </div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;  bytes[hll_constants::PREAMBLE_INTS_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(getPreInts());</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;  bytes[hll_constants::SER_VER_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(hll_constants::SER_VER);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;  bytes[hll_constants::FAMILY_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(hll_constants::FAMILY_ID);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  bytes[hll_constants::LG_K_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(this-&gt;lgConfigK_);</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;  bytes[hll_constants::LG_ARR_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap-&gt;getLgAuxArrInts());</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  bytes[hll_constants::FLAGS_BYTE] = this-&gt;makeFlagsByte(compact);</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  bytes[hll_constants::HLL_CUR_MIN_BYTE] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(curMin_);</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;  bytes[hll_constants::MODE_BYTE] = this-&gt;makeModeByte();</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160; </div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;  std::memcpy(bytes + hll_constants::HIP_ACCUM_DOUBLE, &amp;hipAccum_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  std::memcpy(bytes + hll_constants::KXQ0_DOUBLE, &amp;kxq0_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  std::memcpy(bytes + hll_constants::KXQ1_DOUBLE, &amp;kxq1_, <span class="keyword">sizeof</span>(<span class="keywordtype">double</span>));</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  std::memcpy(bytes + hll_constants::CUR_MIN_COUNT_INT, &amp;numAtCurMin_, <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;  <span class="keyword">const</span> uint32_t auxCount = (auxHashMap == <span class="keyword">nullptr</span> ? 0 : auxHashMap-&gt;getAuxCount());</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;  std::memcpy(bytes + hll_constants::AUX_COUNT_INT, &amp;auxCount, <span class="keyword">sizeof</span>(uint32_t));</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160; </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <span class="keyword">const</span> uint32_t hllByteArrBytes = getHllByteArrBytes();</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  std::memcpy(bytes + getMemDataStart(), hllByteArr_.data(), hllByteArrBytes);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160; </div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  <span class="comment">// aux map if HLL_4</span></div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  <span class="keywordflow">if</span> (this-&gt;tgtHllType_ == HLL_4) {</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    bytes += getMemDataStart() + hllByteArrBytes; <span class="comment">// start of auxHashMap</span></div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;    <span class="keywordflow">if</span> (auxHashMap != <span class="keyword">nullptr</span>) {</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;      <span class="keywordflow">if</span> (compact) {</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> uint32_t coupon: *auxHashMap) {</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;          std::memcpy(bytes, &amp;coupon, <span class="keyword">sizeof</span>(coupon));</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;          bytes += <span class="keyword">sizeof</span>(coupon);</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;        }</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        std::memcpy(bytes, auxHashMap-&gt;getAuxIntArr(), auxHashMap-&gt;getUpdatableSizeBytes());</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;      }</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!compact) {</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;      <span class="comment">// if updatable, we write even if currently unused so the binary can be wrapped</span></div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;      uint32_t auxBytes = 4 &lt;&lt; hll_constants::LG_AUX_ARR_INTS[this-&gt;lgConfigK_];</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;      std::fill_n(bytes, auxBytes, <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(0));</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    }</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;  }</div>
... 135876 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org