anchor.diff:                      headers => Headers,
                       body => NewData
                      }},
  -    gen_statem:reply(From, Result),
  -    {next_state, at_rest, StateData, 0};
  +    {next_state, at_rest, StateData, [{reply, From, Result}]};
   receive_data(cast, {gun_error, _Pid, StreamRef, _Reason},
                #{stream := StreamRef} = StateData) ->
       {next_state, at_rest, StateData, 0};
  
positive.code:   {keep_state, statedata(), [{timeout, timeout(), get_work}]}.
  enqueue_work_or_stop(_StateName, get_events, From, #{responses := Responses} = StateData) ->
      Reply = queue:to_list(Responses),
      ok = gen_statem:reply(From, Reply),
      {keep_state, StateData#{responses := queue:new()}};
  enqueue_work_or_stop(StateName = at_rest, Event, From, StateData) ->
      enqueue_work_or_stop(StateName, Event, From, StateData, 0);
  enqueue_work_or_stop(StateName, Event, From, StateData) ->
  
negative.code:               , {data, Data, FinNoFin}
                , #{stream := StreamRef, pid := Pid} = StateData) ->
      ok = gun:data(Pid, StreamRef, FinNoFin, Data),
      {next_state, wait_response, StateData, [{reply, From, ok}]};
  wait_response({call, From}, Event, StateData) ->
      enqueue_work_or_stop(wait_response, Event, From, StateData);
  wait_response(cast, {'DOWN', _, _, _, Reason}, _StateData) ->
  