class MqttUnsubAckMessage extends MqttMessage {

    public MqttUnsubAckMessage(MqttFixedHeader mqttFixedHeader,
                               MqttMessageIdAndPropertiesVariableHeader variableHeader,
                               MqttUnsubAckPayload payload) {
        super(mqttFixedHeader, variableHeader, MqttUnsubAckPayload.withEmptyDefaults(payload));
    }

    public MqttUnsubAckMessage(MqttFixedHeader mqttFixedHeader,
                               MqttMessageIdVariableHeader variableHeader,
                               MqttUnsubAckPayload payload) {
        this(mqttFixedHeader, fallbackVariableHeader(variableHeader), payload);
    }
    public MqttUnsubAckMessage(MqttFixedHeader mqttFixedHeader,
                               MqttMessageIdVariableHeader variableHeader) {
        this(mqttFixedHeader, variableHeader, null);
    }

    private static MqttMessageIdAndPropertiesVariableHeader fallbackVariableHeader(
            MqttMessageIdVariableHeader variableHeader) {<FILL_FUNCTION_BODY>}

    @Override
    public MqttMessageIdVariableHeader variableHeader() {
        return (MqttMessageIdVariableHeader) super.variableHeader();
    }

    public MqttMessageIdAndPropertiesVariableHeader idAndPropertiesVariableHeader() {
        return (MqttMessageIdAndPropertiesVariableHeader) super.variableHeader();
    }

    @Override
    public MqttUnsubAckPayload payload() {
        return (MqttUnsubAckPayload) super.payload();
    }
}

        if (variableHeader instanceof MqttMessageIdAndPropertiesVariableHeader) {
            return (MqttMessageIdAndPropertiesVariableHeader) variableHeader;
        }
        return new MqttMessageIdAndPropertiesVariableHeader(variableHeader.messageId(), MqttProperties.NO_PROPERTIES);
    
<methods>public void <init>(io.netty.handler.codec.mqtt.MqttFixedHeader) ,public void <init>(io.netty.handler.codec.mqtt.MqttFixedHeader, java.lang.Object) ,public void <init>(io.netty.handler.codec.mqtt.MqttFixedHeader, java.lang.Object, java.lang.Object) ,public void <init>(io.netty.handler.codec.mqtt.MqttFixedHeader, java.lang.Object, java.lang.Object, DecoderResult) ,public DecoderResult decoderResult() ,public io.netty.handler.codec.mqtt.MqttFixedHeader fixedHeader() ,public java.lang.Object payload() ,public java.lang.String toString() ,public java.lang.Object variableHeader() <variables>public static final io.netty.handler.codec.mqtt.MqttMessage DISCONNECT,public static final io.netty.handler.codec.mqtt.MqttMessage PINGREQ,public static final io.netty.handler.codec.mqtt.MqttMessage PINGRESP,private final non-sealed DecoderResult decoderResult,private final non-sealed io.netty.handler.codec.mqtt.MqttFixedHeader mqttFixedHeader,private final non-sealed java.lang.Object payload,private final non-sealed java.lang.Object variableHeader