# Adapt ServiceLoader META-INF files at the merchant app R8 pass.
-adaptresourcefilecontents META-INF/services/*
-adaptresourcefilenames META-INF/services/*

# Protect ComponentProvider implementations so ServiceLoader can discover them by name.
-keep class * implements com.checkout.components.interfaces.component.ComponentProvider {
    public <init>();
}

# Protect CardScannerProvider implementations so ServiceLoader can discover them by name.
-keep class * implements com.checkout.components.interfaces.component.CardScannerProvider {
    public <init>();
}

# Protect all component subclasses so :core can instantiate and call them.
-keep class * extends com.checkout.components.interfaces.component.BasePaymentMethodComponent {
    <init>(...);
    public *;
    protected *;
}

-if class com.checkout.components.interfaces.model.BillingAddressNetworkEntity
-keepnames class com.checkout.components.interfaces.model.BillingAddressNetworkEntity
-if class com.checkout.components.interfaces.model.BillingAddressNetworkEntity
-keep class com.checkout.components.interfaces.model.BillingAddressNetworkEntityJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.checkout.components.interfaces.model.BillingAddressNetworkEntity
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class com.checkout.components.interfaces.model.BillingAddressNetworkEntity
-keepclassmembers class com.checkout.components.interfaces.model.BillingAddressNetworkEntity {
    public synthetic <init>(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class com.checkout.components.interfaces.model.PhoneNetworkEntity
-keepnames class com.checkout.components.interfaces.model.PhoneNetworkEntity
-if class com.checkout.components.interfaces.model.PhoneNetworkEntity
-keep class com.checkout.components.interfaces.model.PhoneNetworkEntityJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.checkout.components.interfaces.model.TokenDetailsResponse
-keepnames class com.checkout.components.interfaces.model.TokenDetailsResponse
-if class com.checkout.components.interfaces.model.TokenDetailsResponse
-keep class com.checkout.components.interfaces.model.TokenDetailsResponseJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.checkout.components.interfaces.model.TokenDetailsResponse
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class com.checkout.components.interfaces.model.TokenDetailsResponse
-keepclassmembers class com.checkout.components.interfaces.model.TokenDetailsResponse {
    public synthetic <init>(int,int,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.checkout.components.interfaces.model.BillingAddressNetworkEntity,com.checkout.components.interfaces.model.PhoneNetworkEntity,java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class com.checkout.components.interfaces.model.paymentsession.AuthenticationHints
-keepnames class com.checkout.components.interfaces.model.paymentsession.AuthenticationHints
-if class com.checkout.components.interfaces.model.paymentsession.AuthenticationHints
-keep class com.checkout.components.interfaces.model.paymentsession.AuthenticationHintsJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.checkout.components.interfaces.model.paymentsession.AuthenticationHints
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class com.checkout.components.interfaces.model.paymentsession.AuthenticationHints
-keepclassmembers class com.checkout.components.interfaces.model.paymentsession.AuthenticationHints {
    public synthetic <init>(java.lang.String,java.util.List,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class com.checkout.components.interfaces.model.paymentsession.CardParameters
-keepnames class com.checkout.components.interfaces.model.paymentsession.CardParameters
-if class com.checkout.components.interfaces.model.paymentsession.CardParameters
-keep class com.checkout.components.interfaces.model.paymentsession.CardParametersJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.checkout.components.interfaces.model.paymentsession.Links
-keepnames class com.checkout.components.interfaces.model.paymentsession.Links
-if class com.checkout.components.interfaces.model.paymentsession.Links
-keep class com.checkout.components.interfaces.model.paymentsession.LinksJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.checkout.components.interfaces.model.paymentsession.Merchant
-keepnames class com.checkout.components.interfaces.model.paymentsession.Merchant
-if class com.checkout.components.interfaces.model.paymentsession.Merchant
-keep class com.checkout.components.interfaces.model.paymentsession.MerchantJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.checkout.components.interfaces.model.paymentsession.PaymentMethod
-keepnames class com.checkout.components.interfaces.model.paymentsession.PaymentMethod
-if class com.checkout.components.interfaces.model.paymentsession.PaymentMethod
-keep class com.checkout.components.interfaces.model.paymentsession.PaymentMethodJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.checkout.components.interfaces.model.paymentsession.PaymentMethod
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class com.checkout.components.interfaces.model.paymentsession.PaymentMethod
-keepclassmembers class com.checkout.components.interfaces.model.paymentsession.PaymentMethod {
    public synthetic <init>(java.lang.String,java.util.List,java.lang.Boolean,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,java.util.List,java.util.List,com.checkout.components.interfaces.model.paymentsession.Total,com.checkout.components.interfaces.model.paymentsession.Merchant,com.checkout.components.interfaces.model.paymentsession.TransactionInfo,com.checkout.components.interfaces.model.paymentsession.CardParameters,java.lang.String,java.lang.String,com.checkout.components.interfaces.model.PhoneNetworkEntity,java.lang.Boolean,java.lang.Boolean,java.util.List,java.lang.String,com.checkout.components.interfaces.model.paymentsession.AuthenticationHints,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class com.checkout.components.interfaces.model.paymentsession.PaymentSession
-keepnames class com.checkout.components.interfaces.model.paymentsession.PaymentSession
-if class com.checkout.components.interfaces.model.paymentsession.PaymentSession
-keep class com.checkout.components.interfaces.model.paymentsession.PaymentSessionJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.checkout.components.interfaces.model.paymentsession.Risk
-keepnames class com.checkout.components.interfaces.model.paymentsession.Risk
-if class com.checkout.components.interfaces.model.paymentsession.Risk
-keep class com.checkout.components.interfaces.model.paymentsession.RiskJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.checkout.components.interfaces.model.paymentsession.Self
-keepnames class com.checkout.components.interfaces.model.paymentsession.Self
-if class com.checkout.components.interfaces.model.paymentsession.Self
-keep class com.checkout.components.interfaces.model.paymentsession.SelfJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.checkout.components.interfaces.model.paymentsession.StoredCardInstrument
-keepnames class com.checkout.components.interfaces.model.paymentsession.StoredCardInstrument
-if class com.checkout.components.interfaces.model.paymentsession.StoredCardInstrument
-keep class com.checkout.components.interfaces.model.paymentsession.StoredCardInstrumentJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
-if class com.checkout.components.interfaces.model.paymentsession.StoredCardInstrument
-keepnames class kotlin.jvm.internal.DefaultConstructorMarker
-if class com.checkout.components.interfaces.model.paymentsession.StoredCardInstrument
-keepclassmembers class com.checkout.components.interfaces.model.paymentsession.StoredCardInstrument {
    public synthetic <init>(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.Integer,java.lang.Integer,java.lang.String,java.lang.Boolean,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,int,kotlin.jvm.internal.DefaultConstructorMarker);
}

-if class com.checkout.components.interfaces.model.paymentsession.Total
-keepnames class com.checkout.components.interfaces.model.paymentsession.Total
-if class com.checkout.components.interfaces.model.paymentsession.Total
-keep class com.checkout.components.interfaces.model.paymentsession.TotalJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.checkout.components.interfaces.model.paymentsession.TransactionInfo
-keepnames class com.checkout.components.interfaces.model.paymentsession.TransactionInfo
-if class com.checkout.components.interfaces.model.paymentsession.TransactionInfo
-keep class com.checkout.components.interfaces.model.paymentsession.TransactionInfoJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}

-if class com.checkout.components.interfaces.model.rememberme.HintItem
-keepnames class com.checkout.components.interfaces.model.rememberme.HintItem
-if class com.checkout.components.interfaces.model.rememberme.HintItem
-keep class com.checkout.components.interfaces.model.rememberme.HintItemJsonAdapter {
    public <init>(com.squareup.moshi.Moshi);
}
