anchor.diff:  
   %% @doc Splits P1E into N equal independent sub-processes and returns the P1E
   %%      to use for each of these sub-processes: p_sub = 1 - (1 - p1e)^(1/n).
  +%%      This is based on p0e(total) = (1 - p1e(total)) = p0e(each)^n = (1 - p1e(each))^n.
   -spec calc_n_subparts_p1e(N::pos_integer(), P1E::float()) -> P1E_sub::float().
   calc_n_subparts_p1e(N, P1E) when P1E > 0 andalso P1E < 1 ->
   %%     _VP = 1 - math:pow(1 - P1E, 1 / N).
  
positive.code: %%      NOTE: reduces P1E for the two parts here (bloom and trivial RC)
  -spec bloom_fp(MaxItems::non_neg_integer(), P1E::float()) -> float().
  bloom_fp(MaxItems, P1E) ->
      1 - math:pow(1 - (1 - ?BLOOM_B) * P1E, 1 / erlang:max(MaxItems, 1)).
  
  -spec build_recon_struct(method(), OldSyncStruct::sync_struct() | {},
                           DestI::intervals:non_empty_interval(), db_chunk_kv(),
  
negative.code:                   % start resolve similar to a trivial recon but using the full diff!
                    % (as if non-initiator in trivial recon)
                    % NOTE: reduce P1E for the two parts here (bloom and trivial RC)
                    P1E_sub = calc_n_subparts_p1e(2, P1E),
                    {BuildTime, {DBChunk, SigSize, VSize}} =
                        util:tc(fun() ->
                                        compress_kv_list_p1e(
                                          NewKVList, FullDiffSize,
                                          BFCount, P1E_sub)
                                end),
                    ?DBG_ASSERT(DBChunk =/= <<>>),
                    
  