message AckNotificationResponse {
}
message AndroidAppDeliveryData {
    optional int64 downloadSize = 1;
    optional string signature = 2;
    optional string downloadUrl = 3;
    repeated AppFileMetadata additionalFile = 4;
    repeated HttpCookie downloadAuthCookie = 5;
    optional bool forwardLocked = 6;
    optional int64 refundTimeout = 7;
    optional bool serverInitiated = 8;
    optional int64 postInstallRefundWindowMillis = 9;
    optional bool immediateStartNeeded = 10;
    optional AndroidAppPatchData patchData = 11;
    optional EncryptionParams encryptionParams = 12;
    optional string gzippedDownloadUrl = 13;
    optional int64 gzippedDownloadSize = 14;
    repeated SplitDeliveryData splitDeliveryData = 15;
    optional int32 installLocation = 16;
}

message SplitDeliveryData {
    optional string id = 1;
    optional int64 downloadSize = 2;
    optional int64 gzippedDownloadSize = 3;
    optional string signature = 4;
    optional string downloadUrl = 5;
    optional string gzippedDownloadUrl = 6;
    optional AndroidAppPatchData patchData = 7;
}

message AndroidAppPatchData {
    optional int32 baseVersionCode = 1;
    optional string baseSignature = 2;
    optional string downloadUrl = 3;
    optional int32 patchFormat = 4;
    optional int64 maxPatchSize = 5;
}
message AppFileMetadata {
    optional int32 fileType = 1;
    optional int32 versionCode = 2;
    optional int64 size = 3;
    optional string downloadUrl = 4;
}
message EncryptionParams {
    optional int32 version = 1;
    optional string encryptionKey = 2;
    optional string hmacKey = 3;
}
message HttpCookie {
    optional string name = 1;
    optional string value = 2;
}
message Address {
    optional string name = 1;
    optional string addressLine1 = 2;
    optional string addressLine2 = 3;
    optional string city = 4;
    optional string state = 5;
    optional string postalCode = 6;
    optional string postalCountry = 7;
    optional string dependentLocality = 8;
    optional string sortingCode = 9;
    optional string languageCode = 10;
    optional string phoneNumber = 11;
    optional bool deprecatedIsReduced = 12;
    optional string firstName = 13;
    optional string lastName = 14;
    optional string email = 15;
}
message BookAuthor {
    optional string name = 1;
    optional string deprecatedQuery = 2;
    optional Docid docid = 3;
}
message BookDetails {
    repeated BookSubject subject = 3;
    optional string publisher = 4;
    optional string publicationDate = 5;
    optional string isbn = 6;
    optional int32 numberOfPages = 7;
    optional string subtitle = 8;
    repeated BookAuthor author = 9;
    optional string readerUrl = 10;
    optional string downloadEpubUrl = 11;
    optional string downloadPdfUrl = 12;
    optional string acsEpubTokenUrl = 13;
    optional string acsPdfTokenUrl = 14;
    optional bool epubAvailable = 15;
    optional bool pdfAvailable = 16;
    optional string aboutTheAuthor = 17;
    repeated group Identifier = 18 {
        optional int32 type = 19;
        optional string identifier = 20;
    }
    optional bool fixedLayoutContent = 21;
    optional bool audioVideoContent = 22;
    optional bool isAgencyBook = 23;
}
message BookSubject {
    optional string name = 1;
    optional string query = 2;
    optional string subjectId = 3;
}
message BrowseLink {
    optional string name = 1;
    optional string dataUrl = 3;
    optional string serverLogsCookie = 4;
}
message BrowseResponse {
    optional string contentsUrl = 1;
    optional string promoUrl = 2;
    repeated BrowseLink category = 3;
    repeated BrowseLink breadcrumb = 4;
    repeated QuickLink quickLink = 5;
    optional string serverLogsCookie = 6;
}
message QuickLink {
    optional string name = 1;
    optional Image image = 2;
    optional ResolvedLink link = 3;
    optional bool displayRequired = 4;
    optional string serverLogsCookie = 5;
    optional int32 backendId = 6;
    optional bool prismStyle = 7;
}
message BuyResponse {
    optional PurchaseNotificationResponse purchaseResponse = 1;
    optional group CheckoutInfo = 2 {
        optional LineItem item = 3;
        repeated LineItem subItem = 4;
        repeated group CheckoutOption = 5 {
            optional string formOfPayment = 6;
            optional string encodedAdjustedCart = 7;
            optional string instrumentId = 15;
            repeated LineItem item = 16;
            repeated LineItem subItem = 17;
            optional LineItem total = 18;
            repeated string footerHtml = 19;
            optional int32 instrumentFamily = 29;
            optional bool selectedInstrument = 32;
            optional LineItem summary = 33;
            repeated string footnoteHtml = 35;
            optional Instrument instrument = 43;
            optional string purchaseCookie = 45;
            repeated string disabledReason = 48;
        }
        optional string deprecatedCheckoutUrl = 10;
        optional string addInstrumentUrl = 11;
        repeated string footerHtml = 20;
        repeated int32 eligibleInstrumentFamily = 31;
        repeated string footnoteHtml = 36;
        repeated Instrument eligibleInstrument = 44;
    }
    optional string continueViaUrl = 8;
    optional string purchaseStatusUrl = 9;
    optional string checkoutServiceId = 12;
    optional bool checkoutTokenRequired = 13;
    optional string baseCheckoutUrl = 14;
    repeated string tosCheckboxHtml = 37;
    optional int32 permissionError = 38;
    optional PurchaseStatusResponse purchaseStatusResponse = 39;
    optional string purchaseCookie = 46;
    optional Challenge challenge = 49;
    optional string addInstrumentPromptHtml = 50;
    optional string confirmButtonText = 51;
    optional string permissionErrorTitleText = 52;
    optional string permissionErrorMessageText = 53;
    optional string serverLogsCookie = 54;
}
message LineItem {
    optional string name = 1;
    optional string description = 2;
    optional Offer offer = 3;
    optional Money amount = 4;
}
message Money {
    optional int64 micros = 1;
    optional string currencyCode = 2;
    optional string formattedAmount = 3;
}
message PurchaseNotificationResponse {
    optional int32 status = 1;
    optional DebugInfo debugInfo = 2;
    optional string localizedErrorMessage = 3;
    optional string purchaseId = 4;
}
message PurchaseStatusResponse {
    optional int32 status = 1;
    optional string statusMsg = 2;
    optional string statusTitle = 3;
    optional string briefMessage = 4;
    optional string infoUrl = 5;
    optional LibraryUpdate libraryUpdate = 6;
    optional Instrument rejectedInstrument = 7;
    optional AndroidAppDeliveryData appDeliveryData = 8;
}
message BillingProfileResponse {
    optional int32 result = 1;
    optional BillingProfile billingProfile = 2;
    optional string userMessageHtml = 3;
}
message CheckInstrumentResponse {
    optional bool userHasValidInstrument = 1;
    optional bool checkoutTokenRequired = 2;
    repeated Instrument instrument = 4;
    repeated Instrument eligibleInstrument = 5;
}
message InstrumentSetupInfoResponse {
    repeated InstrumentSetupInfo setupInfo = 1;
    optional bool checkoutTokenRequired = 2;
}
message RedeemGiftCardRequest {
    optional string giftCardPin = 1;
    optional Address address = 2;
    repeated string acceptedLegalDocumentId = 3;
    optional string checkoutToken = 4;
}
message RedeemGiftCardResponse {
    optional int32 result = 1;
    optional string userMessageHtml = 2;
    optional string balanceHtml = 3;
    optional AddressChallenge addressChallenge = 4;
    optional bool checkoutTokenRequired = 5;
}
message UpdateInstrumentRequest {
    optional Instrument instrument = 1;
    optional string checkoutToken = 2;
}
message UpdateInstrumentResponse {
    optional int32 result = 1;
    optional string instrumentId = 2;
    optional string userMessageHtml = 3;
    repeated InputValidationError errorInputField = 4;
    optional bool checkoutTokenRequired = 5;
    optional RedeemedPromoOffer redeemedOffer = 6;
}
message InitiateAssociationResponse {
    optional string userToken = 1;
}
message VerifyAssociationResponse {
    optional int32 status = 1;
    optional Address billingAddress = 2;
    optional CarrierTos carrierTos = 3;
    optional string carrierErrorMessage = 4;
}
message AddressChallenge {
    optional string responseAddressParam = 1;
    optional string responseCheckboxesParam = 2;
    optional string title = 3;
    optional string descriptionHtml = 4;
    repeated FormCheckbox checkbox = 5;
    optional Address address = 6;
    repeated InputValidationError errorInputField = 7;
    optional string errorHtml = 8;
    repeated int32 requiredField = 9;
    repeated Country supportedCountry = 10;
}
message AuthenticationChallenge {
    optional int32 authenticationType = 1;
    optional string responseAuthenticationTypeParam = 2;
    optional string responseRetryCountParam = 3;
    optional string gaiaHeaderText = 6;
    optional string gaiaDescriptionTextHtml = 7;
    optional string gaiaFooterTextHtml = 8;
    optional FormCheckbox gaiaOptOutCheckbox = 9;
    optional string gaiaOptOutDescriptionTextHtml = 10;
}
message Challenge {
    optional AddressChallenge addressChallenge = 1;
    optional AuthenticationChallenge authenticationChallenge = 2;
    optional WebViewChallenge webViewChallenge = 3;
}
message Country {
    optional string regionCode = 1;
    optional string displayName = 2;
}
message FormCheckbox {
    optional string description = 1;
    optional bool checked = 2;
    optional bool required = 3;
    optional string id = 4;
}
message InputValidationError {
    optional int32 inputField = 1;
    optional string errorMessage = 2;
}
message WebViewChallenge {
    optional string startUrl = 1;
    optional string targetUrlRegexp = 2;
    optional string cancelButtonDisplayLabel = 3;
    optional string responseTargetUrlParam = 4;
    optional string cancelUrlRegexp = 5;
    optional string title = 6;
}
message AddCreditCardPromoOffer {
    optional string headerText = 1;
    optional string descriptionHtml = 2;
    optional Image image = 3;
    optional string introductoryTextHtml = 4;
    optional string offerTitle = 5;
    optional string noActionDescription = 6;
    optional string termsAndConditionsHtml = 7;
}
message AvailablePromoOffer {
    optional AddCreditCardPromoOffer addCreditCardOffer = 1;
}
message CheckPromoOfferResponse {
    repeated AvailablePromoOffer availableOffer = 1;
    optional RedeemedPromoOffer redeemedOffer = 2;
    optional bool checkoutTokenRequired = 3;
}
message RedeemedPromoOffer {
    optional string headerText = 1;
    optional string descriptionHtml = 2;
    optional Image image = 3;
}
message ActiveExperiments {
    repeated string clientAlteringExperiment = 1;
    repeated string otherExperiment = 2;
    repeated int32 gwsExperiment = 3;
}
message AndroidClientInfo {
    optional int64 androidId = 1;
    optional string loggingId = 2;
    optional int32 sdkVersion = 3;
    optional string model = 4;
    optional string product = 5;
    optional string osBuild = 6;
    optional string applicationBuild = 7;
    optional string hardware = 8;
    optional string device = 9;
    optional string mccMnc = 10;
    optional string locale = 11;
    optional string country = 12;
}
message ClientInfo {
    optional int32 clientType = 1;
    optional AndroidClientInfo androidClientInfo = 2;
    optional DesktopClientInfo desktopClientInfo = 3;
    optional IosClientInfo iosClientInfo = 4;
}
message DesktopClientInfo {
    optional string clientId = 1;
    optional string loggingId = 2;
    optional string os = 3;
    optional string osMajorVersion = 4;
    optional string osFullVersion = 5;
    optional string applicationBuild = 6;
}
message ExperimentIdList {
    repeated string id = 1;
}
message IosClientInfo {
    optional string clientId = 1;
    optional string loggingId = 2;
    optional string osMajorVersion = 3;
    optional string osFullVersion = 4;
    optional string applicationBuild = 5;
}
message LogEvent {
    optional int64 eventTimeMs = 1;
    optional string tag = 2;
    repeated LogEventKeyValues value = 3;
    optional PlayStoreLogEvent store = 4;
    optional string sourceExtension = 6;
    optional ActiveExperiments exp = 7;
}
message LogEventKeyValues {
    optional string key = 1;
    optional string value = 2;
}
message LogRequest {
    optional ClientInfo clientInfo = 1;
    optional int32 logSource = 2;
    repeated LogEvent logEvent = 3;
    optional int64 requestTimeMs = 4;
    optional string serializedLogEvents = 5;
}
message LogResponse {
    optional int64 nextRequestWaitMillis = 1;
    optional ExperimentIdList experiments = 2;
}
message Docid {
    optional string backendDocid = 1;
    optional int32 type = 2;
    optional int32 backend = 3;
}
message Install {
    optional fixed64 androidId = 1;
    optional int32 version = 2;
    optional bool bundled = 3;
    optional bool pending = 4;
}
message Offer {
    optional int64 micros = 1;
    optional string currencyCode = 2;
    optional string formattedAmount = 3;
    repeated Offer convertedPrice = 4;
    optional bool checkoutFlowRequired = 5;
    optional int64 fullPriceMicros = 6;
    optional string formattedFullAmount = 7;
    optional int32 offerType = 8;
    optional RentalTerms rentalTerms = 9;
    optional int64 onSaleDate = 10;
    repeated string promotionLabel = 11;
    optional SubscriptionTerms subscriptionTerms = 12;
    optional string formattedName = 13;
    optional string formattedDescription = 14;
    optional bool preorder = 15;
    optional int32 onSaleDateDisplayTimeZoneOffsetMsec = 16;
    optional int32 licensedOfferType = 17;
    optional SubscriptionContentTerms subscriptionContentTerms = 18;
}
message RentalTerms {
    optional int32 dEPRECATEDGrantPeriodSeconds = 1;
    optional int32 dEPRECATEDActivatePeriodSeconds = 2;
    optional TimePeriod grantPeriod = 3;
    optional TimePeriod activatePeriod = 4;
}
message SignedData {
    optional string signedData = 1;
    optional string signature = 2;
}
message SubscriptionContentTerms {
    optional Docid requiredSubscription = 1;
}
message SubscriptionTerms {
    optional TimePeriod recurringPeriod = 1;
    optional TimePeriod trialPeriod = 2;
}
message TimePeriod {
    optional int32 unit = 1;
    optional int32 count = 2;
}
message BillingAddressSpec {
    optional int32 billingAddressType = 1;
    repeated int32 requiredField = 2;
}
message BillingProfile {
    repeated Instrument instrument = 1;
    optional string selectedExternalInstrumentId = 2;
    repeated BillingProfileOption billingProfileOption = 3;
}
message BillingProfileOption {
    optional int32 type = 1;
    optional string displayTitle = 2;
    optional string externalInstrumentId = 3;
    optional TopupInfo topupInfo = 4;
    optional CarrierBillingInstrumentStatus carrierBillingInstrumentStatus = 5;
}
message CarrierBillingCredentials {
    optional string value = 1;
    optional int64 expiration = 2;
}
message CarrierBillingInstrument {
    optional string instrumentKey = 1;
    optional string accountType = 2;
    optional string currencyCode = 3;
    optional int64 transactionLimit = 4;
    optional string subscriberIdentifier = 5;
    optional EncryptedSubscriberInfo encryptedSubscriberInfo = 6;
    optional CarrierBillingCredentials credentials = 7;
    optional CarrierTos acceptedCarrierTos = 8;
}
message CarrierBillingInstrumentStatus {
    optional CarrierTos carrierTos = 1;
    optional bool associationRequired = 2;
    optional bool passwordRequired = 3;
    optional PasswordPrompt carrierPasswordPrompt = 4;
    optional int32 apiVersion = 5;
    optional string name = 6;
    optional DeviceAssociation deviceAssociation = 7;
    optional string carrierSupportPhoneNumber = 8;
}
message CarrierTos {
    optional CarrierTosEntry dcbTos = 1;
    optional CarrierTosEntry piiTos = 2;
    optional bool needsDcbTosAcceptance = 3;
    optional bool needsPiiTosAcceptance = 4;
}
message CarrierTosEntry {
    optional string url = 1;
    optional string version = 2;
}
message CreditCardInstrument {
    optional int32 type = 1;
    optional string escrowHandle = 2;
    optional string lastDigits = 3;
    optional int32 expirationMonth = 4;
    optional int32 expirationYear = 5;
    repeated EfeParam escrowEfeParam = 6;
}
message DeviceAssociation {
    optional string userTokenRequestMessage = 1;
    optional string userTokenRequestAddress = 2;
}
message DisabledInfo {
    optional int32 disabledReason = 1;
    optional string disabledMessageHtml = 2;
    optional string errorMessage = 3;
}
message EfeParam {
    optional int32 key = 1;
    optional string value = 2;
}
message Instrument {
    optional string externalInstrumentId = 1;
    optional Address billingAddress = 2;
    optional CreditCardInstrument creditCard = 3;
    optional CarrierBillingInstrument carrierBilling = 4;
    optional BillingAddressSpec billingAddressSpec = 5;
    optional int32 instrumentFamily = 6;
    optional CarrierBillingInstrumentStatus carrierBillingStatus = 7;
    optional string displayTitle = 8;
    optional TopupInfo topupInfoDeprecated = 9;
    optional int32 version = 10;
    optional StoredValueInstrument storedValue = 11;
    repeated DisabledInfo disabledInfo = 12;
}
message InstrumentSetupInfo {
    optional int32 instrumentFamily = 1;
    optional bool supported = 2;
    optional AddressChallenge addressChallenge = 3;
    optional Money balance = 4;
    repeated string footerHtml = 5;
}
message PasswordPrompt {
    optional string prompt = 1;
    optional string forgotPasswordUrl = 2;
}
message StoredValueInstrument {
    optional int32 type = 1;
    optional Money balance = 2;
    optional TopupInfo topupInfo = 3;
}
message TopupInfo {
    optional string optionsContainerDocidDeprecated = 1;
    optional string optionsListUrl = 2;
    optional string subtitle = 3;
    optional Docid optionsContainerDocid = 4;
}
message ConsumePurchaseResponse {
    optional LibraryUpdate libraryUpdate = 1;
    optional int32 status = 2;
}
message ContainerMetadata {
    optional string browseUrl = 1;
    optional string nextPageUrl = 2;
    optional double relevance = 3;
    optional int64 estimatedResults = 4;
    optional string analyticsCookie = 5;
    optional bool ordered = 6;
    repeated ContainerView containerView = 7;
}
message ContainerView {
    optional bool selected = 1;
    optional string title = 2;
    optional string listUrl = 3;
    optional string serverLogsCookie = 4;
}
message FlagContentResponse {
}
message ClientDownloadRequest {
    message ApkInfo {
        optional string packageName = 1;
        optional int32 versionCode = 2;
    }
    message CertificateChain {
        message Element {
            optional string certificate = 1;
            optional bool parsedSuccessfully = 2;
            optional string subject = 3;
            optional string issuer = 4;
            optional string fingerprint = 5;
            optional int64 expiryTime = 6;
            optional int64 startTime = 7;
        }
        repeated Element element = 1;
    }
    message Digests {
        optional string sha256 = 1;
        optional string sha1 = 2;
        optional string md5 = 3;
    }
    message Resource {
        optional string url = 1;
        optional int32 type = 2;
        optional string remoteIp = 3;
        optional string referrer = 4;
    }
    message SignatureInfo {
        repeated CertificateChain certificateChain = 1;
        optional bool trusted = 2;
    }
    optional string url = 1;
    optional Digests digests = 2;
    optional int64 length = 3;
    repeated Resource resources = 4;
    optional SignatureInfo signature = 5;
    optional bool userInitiated = 6;
    repeated string clientAsn = 8;
    optional string fileBasename = 9;
    optional int32 downloadType = 10;
    optional string locale = 11;
    optional ApkInfo apkInfo = 12;
    optional fixed64 androidId = 13;
    repeated string originatingPackages = 15;
    optional SignatureInfo originatingSignature = 17;
}
message ClientDownloadResponse {
    message MoreInfo {
        optional string description = 1;
        optional string url = 2;
    }
    optional int32 verdict = 1;
    optional MoreInfo moreInfo = 2;
    optional string token = 3;
}
message ClientDownloadStatsRequest {
    optional int32 userDecision = 1;
    optional string token = 2;
}
message DebugInfo {
    repeated string message = 1;
    repeated group Timing = 2 {
        optional string name = 3;
        optional double timeInMs = 4;
    }
}
message DebugSettingsResponse {
    optional string playCountryOverride = 1;
    optional string playCountryDebugInfo = 2;
}
message DeliveryResponse {
    optional int32 status = 1;
    optional AndroidAppDeliveryData appDeliveryData = 2;
}
message BulkDetailsEntry {
    optional DocV2 doc = 1;
}
message BulkDetailsRequest {
    repeated string docid = 1;
    optional bool includeChildDocs = 2;
    optional bool includeDetails = 3;
    optional string sourcePackageName = 4;
}
message BulkDetailsResponse {
    repeated BulkDetailsEntry entry = 1;
}
message DetailsResponse {
    optional DocV1 docV1 = 1;
    optional string analyticsCookie = 2;
    optional Review userReview = 3;
    optional DocV2 docV2 = 4;
    optional string footerHtml = 5;
    optional string serverLogsCookie = 6;
    repeated DiscoveryBadge discoveryBadge = 7;
}

message DiscoveryBadge {
    optional string title = 1;
    optional Image image = 2;
    optional int32 backgroundColor = 3;
    optional DiscoveryBadgeLink discoveryBadgeLink = 4;
    optional string serverLogsCookie = 5;
    optional bool isPlusOne = 6;
    optional float aggregateRating = 7;
    optional int32 userStarRating = 8;
    optional string downloadCount = 9;
    optional string downloadUnits = 10;
    optional string contentDescription = 11;
}

message DiscoveryBadgeLink {
    optional Link link = 1;
    optional string userReviewsUrl = 2;
    optional string criticReviewsUrl = 3;
}

message DeviceConfigurationProto {
    optional int32 touchScreen = 1;
    optional int32 keyboard = 2;
    optional int32 navigation = 3;
    optional int32 screenLayout = 4;
    optional bool hasHardKeyboard = 5;
    optional bool hasFiveWayNavigation = 6;
    optional int32 screenDensity = 7;
    optional int32 glEsVersion = 8;
    repeated string systemSharedLibrary = 9;
    repeated string systemAvailableFeature = 10;
    repeated string nativePlatform = 11;
    optional int32 screenWidth = 12;
    optional int32 screenHeight = 13;
    repeated string systemSupportedLocale = 14;
    repeated string glExtension = 15;
    optional int32 deviceClass = 16;
    optional int32 maxApkDownloadSizeMb = 17;
}
message Document {
    optional Docid docid = 1;
    optional Docid fetchDocid = 2;
    optional Docid sampleDocid = 3;
    optional string title = 4;
    optional string url = 5;
    repeated string snippet = 6;
    optional Offer priceDeprecated = 7;
    optional Availability availability = 9;
    repeated Image image = 10;
    repeated Document child = 11;
    optional AggregateRating aggregateRating = 13;
    repeated Offer offer = 14;
    repeated TranslatedText translatedSnippet = 15;
    repeated DocumentVariant documentVariant = 16;
    repeated string categoryId = 17;
    repeated Document decoration = 18;
    repeated Document parent = 19;
    optional string privacyPolicyUrl = 20;
    optional string consumptionUrl = 21;
    optional int32 estimatedNumChildren = 22;
    optional string subtitle = 23;
}
message DocumentVariant {
    optional int32 variationType = 1;
    optional Rule rule = 2;
    optional string title = 3;
    repeated string snippet = 4;
    optional string recentChanges = 5;
    repeated TranslatedText autoTranslation = 6;
    repeated Offer offer = 7;
    optional int64 channelId = 9;
    repeated Document child = 10;
    repeated Document decoration = 11;
    repeated Image image = 12;
    repeated string categoryId = 13;
    optional string subtitle = 14;
}
message Image {
    optional int32 imageType = 1;
    optional group Dimension = 2 {
        optional int32 width = 3;
        optional int32 height = 4;
    }
    optional string imageUrl = 5;
    optional string altTextLocalized = 6;
    optional string secureUrl = 7;
    optional int32 positionInSequence = 8;
    optional bool supportsFifeUrlOptions = 9;
    optional group Citation = 10 {
        optional string titleLocalized = 11;
        optional string url = 12;
    }
    optional int32 durationSeconds = 14;
    optional string fillColorRgb = 15;
}
message TranslatedText {
    optional string text = 1;
    optional string sourceLocale = 2;
    optional string targetLocale = 3;
}
message Badge {
    optional string title = 1;
    repeated Image image = 2;
    optional string browseUrl = 3;
    optional string description = 4;
}
message BadgeContainer {
    optional string title = 1;
    repeated Image image = 2;
    repeated Badge badge = 3;
}
message ContainerWithBanner {
    optional string colorThemeArgb = 1;
}
message DealOfTheDay {
    optional string featuredHeader = 1;
    optional string colorThemeArgb = 2;
}
message Dismissal {
    optional string url = 1;
    optional string descriptionHtml = 2;
}
message EditorialSeriesContainer {
    optional string seriesTitle = 1;
    optional string seriesSubtitle = 2;
    optional string episodeTitle = 3;
    optional string episodeSubtitle = 4;
    optional string colorThemeArgb = 5;
    repeated VideoSnippet videoSnippet = 6;
}
message Link {
    optional string uri = 1;
    optional ResolvedLink resolvedLink = 2;
    optional int32 uriBackend = 3;
}
message NextBanner {
    optional string title = 1;
    optional string subtitle = 2;
    optional string colorTextArgb = 3;
}
message OBSOLETE_Reason {
    optional string briefReason = 1;
    optional string oBSOLETEDetailedReason = 2;
    optional string uniqueId = 3;
}
message PlusOneData {
    optional bool setByUser = 1;
    optional int64 total = 2;
    optional int64 circlesTotal = 3;
    repeated PlusProfile circlesProfiles = 4;
}
message PromotedDoc {
    optional string title = 1;
    optional string subtitle = 2;
    repeated Image image = 3;
    optional string descriptionHtml = 4;
    optional string detailsUrl = 5;
}
message Reason {
    optional string descriptionHtml = 3;
    optional ReasonPlusProfiles reasonPlusProfiles = 4;
    optional ReasonReview reasonReview = 5;
    optional Dismissal dismissal = 7;
}
message ReasonPlusProfiles {
    optional string localizedDescriptionHtml = 1;
    repeated PlusProfile plusProfile = 2;
}
message ReasonReview {
    optional Review review = 1;
}
message RecommendationsContainer {
}
message SectionMetadata {
    optional string header = 1;
    optional string listUrl = 2;
    optional string browseUrl = 3;
    optional string descriptionHtml = 4;
}
message SeriesAntenna {
    optional string seriesTitle = 1;
    optional string seriesSubtitle = 2;
    optional string episodeTitle = 3;
    optional string episodeSubtitle = 4;
    optional string colorThemeArgb = 5;
    optional SectionMetadata sectionTracks = 6;
    optional SectionMetadata sectionAlbums = 7;
}
message SuggestionReasons {
    repeated Reason reason = 2;
    optional Dismissal neutralDismissal = 4;
    optional Dismissal positiveDismissal = 5;
}
message Template {
    optional SeriesAntenna seriesAntenna = 1;
    optional TileTemplate tileGraphic2X1 = 2;
    optional TileTemplate tileGraphic4X2 = 3;
    optional TileTemplate tileGraphicColoredTitle2X1 = 4;
    optional TileTemplate tileGraphicUpperLeftTitle2X1 = 5;
    optional TileTemplate tileDetailsReflectedGraphic2X2 = 6;
    optional TileTemplate tileFourBlock4X2 = 7;
    optional ContainerWithBanner containerWithBanner = 8;
    optional DealOfTheDay dealOfTheDay = 9;
    optional TileTemplate tileGraphicColoredTitle4X2 = 10;
    optional EditorialSeriesContainer editorialSeriesContainer = 11;
    optional RecommendationsContainer recommendationsContainer = 12;
    optional NextBanner nextBanner = 13;
}
message TileTemplate {
    optional string colorThemeArgb = 1;
    optional string colorTextArgb = 2;
}
message VideoSnippet {
    repeated Image image = 1;
    optional string title = 2;
    optional string description = 3;
}
message Warning {
    optional string localizedMessage = 1;
}
message AlbumDetails {
    optional string name = 1;
    optional MusicDetails details = 2;
    optional ArtistDetails displayArtist = 3;
}
message AppDetails {
    optional string developerName = 1;
    optional int32 majorVersionNumber = 2;
    optional int32 versionCode = 3;
    optional string versionString = 4;
    optional string title = 5;
    repeated string appCategory = 7;
    optional int32 contentRating = 8;
    optional int64 installationSize = 9;
    repeated string permission = 10;
    optional string developerEmail = 11;
    optional string developerWebsite = 12;
    optional string numDownloads = 13;
    optional string packageName = 14;
    optional string recentChangesHtml = 15;
    optional string uploadDate = 16;
    repeated FileMetadata file = 17;
    optional string appType = 18;
    repeated string certificateHash = 19;
    optional bool variesByAccount = 21;
    repeated CertificateSet certificateSet = 22;
    repeated string autoAcquireFreeAppIfHigherVersionAvailableTag = 23;
    optional bool declaresIab = 24;
    repeated string splitId = 25;
    optional bool gamepadRequired = 26;
    optional bool externallyHosted = 27;
    optional bool everExternallyHosted = 28;
    optional string installNotes = 30;
    optional int32 installLocation = 31;
}

message CertificateSet {
    repeated string certificateHash = 1;
}

message AppPermission {
    optional string key = 1;
    optional bool permissionRequired = 2;
}
message ArtistDetails {
    optional string detailsUrl = 1;
    optional string name = 2;
    optional ArtistExternalLinks externalLinks = 3;
}
message ArtistExternalLinks {
    repeated string websiteUrl = 1;
    optional string googlePlusProfileUrl = 2;
    optional string youtubeChannelUrl = 3;
}
message DocumentDetails {
    optional AppDetails appDetails = 1;
    optional AlbumDetails albumDetails = 2;
    optional ArtistDetails artistDetails = 3;
    optional SongDetails songDetails = 4;
    optional BookDetails bookDetails = 5;
    optional VideoDetails videoDetails = 6;
    optional SubscriptionDetails subscriptionDetails = 7;
    optional MagazineDetails magazineDetails = 8;
    optional TvShowDetails tvShowDetails = 9;
    optional TvSeasonDetails tvSeasonDetails = 10;
    optional TvEpisodeDetails tvEpisodeDetails = 11;
    // optional NewsDetails newsDetails = 12;
}
message FileMetadata {
    optional int32 fileType = 1;
    optional int32 versionCode = 2;
    optional int64 size = 3;
    optional string splitId = 4;
}
message MagazineDetails {
    optional string parentDetailsUrl = 1;
    optional string deviceAvailabilityDescriptionHtml = 2;
    optional string psvDescription = 3;
    optional string deliveryFrequencyDescription = 4;
}
message MusicDetails {
    optional int32 censoring = 1;
    optional int32 durationSec = 2;
    optional string originalReleaseDate = 3;
    optional string label = 4;
    repeated ArtistDetails artist = 5;
    repeated string genre = 6;
    optional string releaseDate = 7;
    repeated int32 releaseType = 8;
}
message NewsDetails {
    optional string parentDetailsUrl = 1;
    optional string psvDescription = 3;
}
message SongDetails {
    optional string name = 1;
    optional MusicDetails details = 2;
    optional string albumName = 3;
    optional int32 trackNumber = 4;
    optional string previewUrl = 5;
    optional ArtistDetails displayArtist = 6;
    optional Badge badge = 7;
}
message SubscriptionDetails {
    optional int32 subscriptionPeriod = 1;
}
message Trailer {
    optional string trailerId = 1;
    optional string title = 2;
    optional string thumbnailUrl = 3;
    optional string watchUrl = 4;
    optional string duration = 5;
}
message TvEpisodeDetails {
    optional string parentDetailsUrl = 1;
    optional int32 episodeIndex = 2;
    optional string releaseDate = 3;
}
message TvSeasonDetails {
    optional string parentDetailsUrl = 1;
    optional int32 seasonIndex = 2;
    optional string releaseDate = 3;
    optional string broadcaster = 4;
    optional int32 episodeCount = 5;
    optional int32 expectedEpisodeCount = 6;
}
message TvShowDetails {
    optional int32 seasonCount = 1;
    optional int32 startYear = 2;
    optional int32 endYear = 3;
    optional string broadcaster = 4;
}
message VideoCredit {
    optional int32 creditType = 1;
    optional string credit = 2;
    repeated string name = 3;
}
message VideoDetails {
    repeated VideoCredit credit = 1;
    optional string duration = 2;
    optional string releaseDate = 3;
    optional string contentRating = 4;
    optional int64 likes = 5;
    optional int64 dislikes = 6;
    repeated string genre = 7;
    repeated Trailer trailer = 8;
    repeated VideoRentalTerm rentalTerm = 9;
    repeated string audioLanguage = 10;
    repeated string captionLanguage = 11;
}
message VideoRentalTerm {
    optional int32 offerType = 1;
    optional string offerAbbreviation = 2;
    optional string rentalHeader = 3;
    repeated group Term = 4 {
        optional string header = 5;
        optional string body = 6;
    }
}
message Bucket {
    repeated DocV1 document = 1;
    optional bool multiCorpus = 2;
    optional string title = 3;
    optional string iconUrl = 4;
    optional string fullContentsUrl = 5;
    optional double relevance = 6;
    optional int64 estimatedResults = 7;
    optional string analyticsCookie = 8;
    optional string fullContentsListUrl = 9;
    optional string nextPageUrl = 10;
    optional bool ordered = 11;
}
message ListResponse {
    repeated Bucket bucket = 1;
    repeated DocV2 doc = 2;
}
message DocV1 {
    optional Document finskyDoc = 1;
    optional string docid = 2;
    optional string detailsUrl = 3;
    optional string reviewsUrl = 4;
    optional string relatedListUrl = 5;
    optional string moreByListUrl = 6;
    optional string shareUrl = 7;
    optional string creator = 8;
    optional DocumentDetails details = 9;
    optional string descriptionHtml = 10;
    optional string relatedBrowseUrl = 11;
    optional string moreByBrowseUrl = 12;
    optional string relatedHeader = 13;
    optional string moreByHeader = 14;
    optional string title = 15;
    optional PlusOneData plusOneData = 16;
    optional string warningMessage = 17;
}
message Annotations {
    optional SectionMetadata sectionRelated = 1;
    optional SectionMetadata sectionMoreBy = 2;
    optional PlusOneData plusOneData = 3;
    repeated Warning warning = 4;
    optional SectionMetadata sectionBodyOfWork = 5;
    optional SectionMetadata sectionCoreContent = 6;
    optional Template template = 7;
    repeated Badge badgeForCreator = 8;
    repeated Badge badgeForDoc = 9;
    optional Link link = 10;
    optional SectionMetadata sectionCrossSell = 11;
    optional SectionMetadata sectionRelatedDocType = 12;
    repeated PromotedDoc promotedDoc = 13;
    optional string offerNote = 14;
    repeated DocV2 subscription = 16;
    optional OBSOLETE_Reason oBSOLETEReason = 17;
    optional string privacyPolicyUrl = 18;
    optional SuggestionReasons suggestionReasons = 19;
    optional Warning optimalDeviceClassWarning = 20;
    repeated BadgeContainer docBadgeContainer = 21;
    optional SectionMetadata sectionSuggestForRating = 22;
    optional SectionMetadata sectionRateAndReview = 23;
    optional SectionMetadata sectionPurchaseCrossSell = 24;
    repeated OverflowLink overflowLink = 25;
    optional DocV2 creatorDoc = 26;
}

message OverflowLink {
    optional string title = 1;
    optional Link link = 2;
}

message DocV2 {
    optional string docid = 1;
    optional string backendDocid = 2;
    optional int32 docType = 3;
    optional int32 backendId = 4;
    optional string title = 5;
    optional string creator = 6;
    optional string descriptionHtml = 7;
    repeated Offer offer = 8;
    optional Availability availability = 9;
    repeated Image image = 10;
    repeated DocV2 child = 11;
    optional ContainerMetadata containerMetadata = 12;
    optional DocumentDetails details = 13;
    optional AggregateRating aggregateRating = 14;
    optional Annotations annotations = 15;
    optional string detailsUrl = 16;
    optional string shareUrl = 17;
    optional string reviewsUrl = 18;
    optional string backendUrl = 19;
    optional string purchaseDetailsUrl = 20;
    optional bool detailsReusable = 21;
    optional string subtitle = 22;
    optional string translatedDescriptionHtml = 23;
    optional string serverLogsCookie = 24;
    optional ProductDetails productDetails = 25;
    optional bool mature = 26;
    optional string promotionalDescription = 27;
}

message ProductDetails {
    optional string title = 1;
    repeated ProductDetailsSection section = 2;
}

message ProductDetailsSection {
    optional string title = 1;
    repeated ProductDetailsDescription description = 3;
}

message ProductDetailsDescription {
    optional Image image = 1;
    optional string description = 2;
}


message EncryptedSubscriberInfo {
    optional string data = 1;
    optional string encryptedKey = 2;
    optional string signature = 3;
    optional string initVector = 4;
    optional int32 googleKeyVersion = 5;
    optional int32 carrierKeyVersion = 6;
}

message Availability {
    optional int32 restriction = 5;
    optional int32 offerType = 6;
    optional Rule rule = 7;
    repeated group PerDeviceAvailabilityRestriction = 9 {
        optional fixed64 androidId = 10;
        optional int32 deviceRestriction = 11;
        optional int64 channelId = 12;
        optional FilterEvaluationInfo filterInfo = 15;
    }
    optional bool availableIfOwned = 13;
    repeated Install install = 14;
    optional FilterEvaluationInfo filterInfo = 16;
    optional OwnershipInfo ownershipInfo = 17;
    repeated AvailabilityProblem availabilityProblem = 18;
    optional bool hidden = 21;
}

message AvailabilityProblem {
    optional int32 problemType = 1;
    repeated string missingValue = 2;
}

message FilterEvaluationInfo {
    repeated RuleEvaluation ruleEvaluation = 1;
}
message Rule {
    optional bool negate = 1;
    optional int32 operator = 2;
    optional int32 key = 3;
    repeated string stringArg = 4;
    repeated int64 longArg = 5;
    repeated double doubleArg = 6;
    repeated Rule subrule = 7;
    optional int32 responseCode = 8;
    optional string comment = 9;
    repeated fixed64 stringArgHash = 10;
    repeated int32 constArg = 11;
    optional int32 availabilityProblemType = 12;
    optional bool includeMissingValues = 13;
}
message RuleEvaluation {
    optional Rule rule = 1;
    repeated string actualStringValue = 2;
    repeated int64 actualLongValue = 3;
    repeated bool actualBoolValue = 4;
    repeated double actualDoubleValue = 5;
}
message GroupLicenseInfo {
    optional int32 licensedOfferType = 1;
    optional fixed64 gaiaGroupId = 2;
}
message LicensedDocumentInfo {
    repeated fixed64 gaiaGroupId = 1;
}
message LibraryAppDetails {
    optional string certificateHash = 2;
    optional int64 refundTimeoutTimestampMsec = 3;
    optional int64 postDeliveryRefundWindowMsec = 4;
}
message LibraryInAppDetails {
    optional string signedPurchaseData = 1;
    optional string signature = 2;
}
message LibraryMutation {
    optional Docid docid = 1;
    optional int32 offerType = 2;
    optional int64 documentHash = 3;
    optional bool deleted = 4;
    optional LibraryAppDetails appDetails = 5;
    optional LibrarySubscriptionDetails subscriptionDetails = 6;
    optional LibraryInAppDetails inAppDetails = 7;
    optional int64 validUntilTimestampMsec = 8;
}
message LibrarySubscriptionDetails {
    optional int64 initiationTimestampMsec = 1;
    optional int64 deprecatedValidUntilTimestampMsec = 2;
    optional bool autoRenewing = 3;
    optional int64 trialUntilTimestampMsec = 4;
    optional string signedPurchaseData = 5;
    optional string signature = 6;
}
message LibraryUpdate {
    optional int32 status = 1;
    optional int32 corpus = 2;
    optional string serverToken = 3;
    repeated LibraryMutation mutation = 4;
    optional bool hasMore = 5;
    optional string libraryId = 6;
}
message ClientLibraryState {
    optional int32 corpus = 1;
    optional string serverToken = 2;
    optional int64 hashCodeSum = 3;
    optional int32 librarySize = 4;
    optional string libraryId = 5;
}
message LibraryReplicationRequest {
    repeated ClientLibraryState libraryState = 1;
}
message LibraryReplicationResponse {
    repeated LibraryUpdate update = 1;
}
message ClickLogEvent {
    optional int64 eventTime = 1;
    optional string url = 2;
    optional string listId = 3;
    optional string referrerUrl = 4;
    optional string referrerListId = 5;
}
message ModifyLibraryRequest {
    optional string libraryId = 1;
    repeated string forAddDocid = 2;
    repeated string forRemovalDocid = 3;
    repeated string forArchiveDocid = 4;
}
message ModifyLibraryResponse {
    optional LibraryUpdate libraryUpdate = 1;
}
message AndroidAppNotificationData {
    optional int32 versionCode = 1;
    optional string assetId = 2;
}
message InAppNotificationData {
    optional string checkoutOrderId = 1;
    optional string inAppNotificationId = 2;
}
message LibraryDirtyData {
    optional int32 backend = 1;
    optional string libraryId = 2;
}
message Notification {
    optional int32 notificationType = 1;
    optional int64 timestamp = 3;
    optional Docid docid = 4;
    optional string docTitle = 5;
    optional string userEmail = 6;
    optional AndroidAppNotificationData appData = 7;
    optional AndroidAppDeliveryData appDeliveryData = 8;
    optional PurchaseRemovalData purchaseRemovalData = 9;
    optional UserNotificationData userNotificationData = 10;
    optional InAppNotificationData inAppNotificationData = 11;
    optional PurchaseDeclinedData purchaseDeclinedData = 12;
    optional string notificationId = 13;
    optional LibraryUpdate libraryUpdate = 14;
    optional LibraryDirtyData libraryDirtyData = 15;
}
message PurchaseDeclinedData {
    optional int32 reason = 1;
    optional bool showNotification = 2;
}
message PurchaseRemovalData {
    optional bool malicious = 1;
}
message UserNotificationData {
    optional string notificationTitle = 1;
    optional string notificationText = 2;
    optional string tickerText = 3;
    optional string dialogTitle = 4;
    optional string dialogText = 5;
}
message OwnershipInfo {
    optional int64 initiationTimestampMsec = 1;
    optional int64 validUntilTimestampMsec = 2;
    optional bool autoRenewing = 3;
    optional int64 refundTimeoutTimestampMsec = 4;
    optional int64 postDeliveryRefundWindowMsec = 5;
    optional SignedData developerPurchaseInfo = 6;
    optional bool preordered = 7;
    optional bool hidden = 8;
    optional RentalTerms rentalTerms = 9;
    optional GroupLicenseInfo groupLicenseInfo = 10;
    optional LicensedDocumentInfo licensedDocumentInfo = 11;
    optional int32 quantity = 12;
    optional int64 libraryExpirationTimestampMsec = 14;
}
message AppData {
    optional int32 version = 1;
    optional int32 oldVersion = 2;
    optional bool systemApp = 3;
}
message PlayStoreBackgroundActionEvent {
    optional int32 type = 1;
    optional string document = 2;
    optional string reason = 3;
    optional int32 errorCode = 4;
    optional string exceptionType = 5;
    optional string serverLogsCookie = 6;
    optional int32 offerType = 7;
    optional int32 fromSetting = 8;
    optional int32 toSetting = 9;
    optional PlayStoreSessionData sessionInfo = 10;
    optional AppData appData = 11;
    optional int64 serverLatencyMs = 12;
    optional int64 clientLatencyMs = 13;
}
message PlayStoreClickEvent {
    repeated PlayStoreUiElement elementPath = 1;
}
message PlayStoreDeepLinkEvent {
    optional string externalUrl = 1;
    optional int32 resolvedType = 2;
}
message PlayStoreImpressionEvent {
    optional PlayStoreUiElement tree = 1;
    repeated PlayStoreUiElement referrerPath = 2;
    optional int64 id = 3;
}
message PlayStoreLogEvent {
    optional PlayStoreImpressionEvent impression = 1;
    optional PlayStoreClickEvent click = 3;
    optional PlayStoreBackgroundActionEvent backgroundAction = 4;
    optional PlayStoreSearchEvent search = 5;
    optional PlayStoreDeepLinkEvent deepLink = 6;
}
message PlayStoreSearchEvent {
    optional string query = 1;
    optional string queryUrl = 2;
    optional string referrerUrl = 3;
}
message PlayStoreSessionData {
    optional bool globalAutoUpdateEnabled = 1;
    optional bool globalAutoUpdateOverWifiOnly = 2;
    optional int32 autoUpdateCleanupDialogNumTimesShown = 3;
    optional int32 networkType = 4;
    optional int32 networkSubType = 5;
    optional int32 numAccountsOnDevice = 6;
    optional int32 numInstalledApps = 7;
    optional int32 numAutoUpdatingInstalledApps = 8;
    optional int32 numInstalledAppsNotAutoUpdating = 9;
    optional bool gaiaPasswordAuthOptedOut = 10;
    optional int32 contentFilterLevel = 11;
    optional bool allowUnknownSources = 12;
}
message PlayStoreUiElement {
    optional int32 type = 1;
    optional string serverLogsCookie = 2;
    optional PlayStoreUiElementInfo clientLogsCookie = 3;
    repeated PlayStoreUiElement child = 4;
}
message PlayStoreUiElementInfo {
    message InstrumentInfo {
        optional int32 instrumentFamily = 1;
        optional bool isDefault = 2;
    }
    optional InstrumentInfo instrumentInfo = 1;
    optional string serialDocid = 2;
}
message PlusProfile {
    optional string displayName = 2;
    optional string profileImageUrl = 4;
    optional Image profileImage = 5;
}
message PlusOneResponse {
}
message PlusProfileResponse {
    optional PlusProfile plusProfile = 1;
}
message ClientCart {
    optional string title = 1;
    optional string formattedPrice = 2;
    optional string purchaseContextToken = 3;
    optional Instrument instrument = 4;
    repeated string extendedDetailHtml = 5;
    optional string footerHtml = 6;
    optional string addInstrumentPromptHtml = 7;
    optional string buttonText = 8;
    optional Challenge completePurchaseChallenge = 9;
    optional string priceByline = 10;
    repeated string detailHtml = 11;
}
message CommitPurchaseResponse {
    optional PurchaseStatus purchaseStatus = 1;
    optional Challenge challenge = 2;
    repeated LibraryUpdate libraryUpdate = 3;
    optional AndroidAppDeliveryData appDeliveryData = 4;
    optional string serverLogsCookie = 5;
}
message PreparePurchaseResponse {
    optional PurchaseStatus purchaseStatus = 1;
    optional Challenge challenge = 2;
    optional ClientCart cart = 3;
    repeated LibraryUpdate libraryUpdate = 4;
    optional string serverLogsCookie = 5;
}
message PurchaseStatus {
    optional int32 statusCode = 1;
    optional string errorMessageHtml = 2;
    optional int32 permissionError = 3;
}
message RateSuggestedContentResponse {
}
message AggregateRating {
    optional int32 type = 1;
    optional float starRating = 2;
    optional uint64 ratingsCount = 3;
    optional uint64 oneStarRatings = 4;
    optional uint64 twoStarRatings = 5;
    optional uint64 threeStarRatings = 6;
    optional uint64 fourStarRatings = 7;
    optional uint64 fiveStarRatings = 8;
    optional uint64 thumbsUpCount = 9;
    optional uint64 thumbsDownCount = 10;
    optional uint64 commentCount = 11;
    optional double bayesianMeanRating = 12;
}
message DirectPurchase {
    optional string detailsUrl = 1;
    optional string purchaseDocid = 2;
    optional string parentDocid = 3;
    optional int32 offerType = 4;
}

message RedeemGiftCard {
    optional string prefillCode = 1;
    optional string partnerPayload = 2;
}

message ResolvedLink {
    optional string detailsUrl = 1;
    optional string browseUrl = 2;
    optional string searchUrl = 3;
    optional DirectPurchase directPurchase = 4;
    optional string homeUrl = 5;
    optional RedeemGiftCard redeemGiftCard = 6;
    optional string serverLogsCookie = 7;
    optional Docid docid = 8;
    optional string wishlistUrl = 9;
    optional int32 backend = 10;
    optional string query = 11;
}
message Payload {
    optional ListResponse listResponse = 1;
    optional DetailsResponse detailsResponse = 2;
    optional ReviewResponse reviewResponse = 3;
    optional BuyResponse buyResponse = 4;
    optional SearchResponse searchResponse = 5;
    optional TocResponse tocResponse = 6;
    optional BrowseResponse browseResponse = 7;
    optional PurchaseStatusResponse purchaseStatusResponse = 8;
    optional UpdateInstrumentResponse updateInstrumentResponse = 9;
    optional LogResponse logResponse = 10;
    optional CheckInstrumentResponse checkInstrumentResponse = 11;
    optional PlusOneResponse plusOneResponse = 12;
    optional FlagContentResponse flagContentResponse = 13;
    optional AckNotificationResponse ackNotificationResponse = 14;
    optional InitiateAssociationResponse initiateAssociationResponse = 15;
    optional VerifyAssociationResponse verifyAssociationResponse = 16;
    optional LibraryReplicationResponse libraryReplicationResponse = 17;
    optional RevokeResponse revokeResponse = 18;
    optional BulkDetailsResponse bulkDetailsResponse = 19;
    optional ResolvedLink resolveLinkResponse = 20;
    optional DeliveryResponse deliveryResponse = 21;
    optional AcceptTosResponse acceptTosResponse = 22;
    optional RateSuggestedContentResponse rateSuggestedContentResponse = 23;
    optional CheckPromoOfferResponse checkPromoOfferResponse = 24;
    optional InstrumentSetupInfoResponse instrumentSetupInfoResponse = 25;
    optional RedeemGiftCardResponse redeemGiftCardResponse = 26;
    optional ModifyLibraryResponse modifyLibraryResponse = 27;
    optional UploadDeviceConfigResponse uploadDeviceConfigResponse = 28;
    optional PlusProfileResponse plusProfileResponse = 29;
    optional ConsumePurchaseResponse consumePurchaseResponse = 30;
    optional BillingProfileResponse billingProfileResponse = 31;
    optional PreparePurchaseResponse preparePurchaseResponse = 32;
    optional CommitPurchaseResponse commitPurchaseResponse = 33;
    optional DebugSettingsResponse debugSettingsResponse = 34;
}
message PreFetch {
    optional string url = 1;
    optional string response = 2;
    optional string etag = 3;
    optional int64 ttl = 4;
    optional int64 softTtl = 5;
}
message ResponseWrapper {
    optional Payload payload = 1;
    optional ServerCommands commands = 2;
    repeated PreFetch preFetch = 3;
    repeated Notification notification = 4;
    optional ServerMetadata serverMetadata = 5;
}
message ServerCommands {
    optional bool clearCache = 1;
    optional string displayErrorMessage = 2;
    optional string logErrorStacktrace = 3;
}
message ServerMetadata {
    optional int64 latencyMillis = 1;
}
message GetReviewsResponse {
    repeated Review review = 1;
    optional int64 matchingCount = 2;
}
message Review {
    optional string authorName = 1;
    optional string url = 2;
    optional string source = 3;
    optional string documentVersion = 4;
    optional int64 timestampMsec = 5;
    optional int32 starRating = 6;
    optional string title = 7;
    optional string comment = 8;
    optional string commentId = 9;
    optional string deviceName = 19;
    optional string replyText = 29;
    optional int64 replyTimestampMsec = 30;
    optional PlusProfile plusProfile = 31;
    optional DocV2 author = 33;
    optional Image sentiment = 34;
}

message ReviewResponse {
    optional GetReviewsResponse getResponse = 1;
    optional string nextPageUrl = 2;
    optional Review updatedReview = 3;
}
message RevokeResponse {
    optional LibraryUpdate libraryUpdate = 1;
}
message RelatedSearch {
    optional string searchUrl = 1;
    optional string header = 2;
    optional int32 backendId = 3;
    optional int32 docType = 4;
    optional bool current = 5;
}
message SearchResponse {
    optional string originalQuery = 1;
    optional string suggestedQuery = 2;
    optional bool aggregateQuery = 3;
    repeated Bucket bucket = 4;
    repeated DocV2 doc = 5;
    repeated RelatedSearch relatedSearch = 6;
    optional string serverLogsCookie = 7;
}
message BillingConfig {
    optional CarrierBillingConfig carrierBillingConfig = 1;
    optional int32 maxIabApiVersion = 2;
}
message CarrierBillingConfig {
    optional string id = 1;
    optional string name = 2;
    optional int32 apiVersion = 3;
    optional string provisioningUrl = 4;
    optional string credentialsUrl = 5;
    optional bool tosRequired = 6;
    optional bool perTransactionCredentialsRequired = 7;
    optional bool sendSubscriberIdWithCarrierBillingRequests = 8;
}
message CorpusMetadata {
    optional int32 backend = 1;
    optional string name = 2;
    optional string landingUrl = 3;
    optional string libraryName = 4;
    optional string recsWidgetUrl = 6;
}
message Experiments {
    repeated string experimentId = 1;
}
message SelfUpdateConfig {
    optional int32 latestClientVersionCode = 1;
}
message TocResponse {
    repeated CorpusMetadata corpus = 1;
    optional int32 tosVersionDeprecated = 2;
    optional string tosContent = 3;
    optional string homeUrl = 4;
    optional Experiments experiments = 5;
    optional string tosCheckboxTextMarketingEmails = 6;
    optional string tosToken = 7;
    optional UserSettings userSettings = 8;
    optional string iconOverrideUrl = 9;
    optional SelfUpdateConfig selfUpdateConfig = 10;
    optional bool requiresUploadDeviceConfig = 11;
    optional BillingConfig billingConfig = 12;
    optional string recsWidgetUrl = 13;
}
message UserSettings {
    optional bool tosCheckboxMarketingEmailsOptedIn = 1;
}
message AcceptTosResponse {
}
message UploadDeviceConfigRequest {
    optional DeviceConfigurationProto deviceConfiguration = 1;
    optional string manufacturer = 2;
    optional string gcmRegistrationId = 3;
}
message UploadDeviceConfigResponse {
    optional string uploadDeviceConfigToken = 1;
}
message AckNotificationsRequestProto {
    repeated string notificationId = 1;
    optional SignatureHashProto signatureHash = 2;
    repeated string nackNotificationId = 3;
}
message AckNotificationsResponseProto {
}
message AddressProto {
    optional string address1 = 1;
    optional string address2 = 2;
    optional string city = 3;
    optional string state = 4;
    optional string postalCode = 5;
    optional string country = 6;
    optional string name = 7;
    optional string type = 8;
    optional string phone = 9;
}
message AppDataProto {
    optional string key = 1;
    optional string value = 2;
}
message AppSuggestionProto {
    optional ExternalAssetProto assetInfo = 1;
}
message AssetIdentifierProto {
    optional string packageName = 1;
    optional int32 versionCode = 2;
    optional string assetId = 3;
}
message AssetsRequestProto {
    optional int32 assetType = 1;
    optional string query = 2;
    optional string categoryId = 3;
    repeated string assetId = 4;
    optional bool retrieveVendingHistory = 5;
    optional bool retrieveExtendedInfo = 6;
    optional int32 sortOrder = 7;
    optional int64 startIndex = 8;
    optional int64 numEntries = 9;
    optional int32 viewFilter = 10;
    optional string rankingType = 11;
    optional bool retrieveCarrierChannel = 12;
    repeated string pendingDownloadAssetId = 13;
    optional bool reconstructVendingHistory = 14;
    optional bool unfilteredResults = 15;
    repeated string badgeId = 16;
}
message AssetsResponseProto {
    repeated ExternalAssetProto asset = 1;
    optional int64 numTotalEntries = 2;
    optional string correctedQuery = 3;
    repeated ExternalAssetProto altAsset = 4;
    optional int64 numCorrectedEntries = 5;
    optional string header = 6;
    optional int32 listType = 7;
}
message BillingEventRequestProto {
    optional int32 eventType = 1;
    optional string billingParametersId = 2;
    optional bool resultSuccess = 3;
    optional string clientMessage = 4;
    optional ExternalCarrierBillingInstrumentProto carrierInstrument = 5;
}
message BillingEventResponseProto {
}
message BillingParameterProto {
    optional string id = 1;
    optional string name = 2;
    repeated string mncMcc = 3;
    repeated string backendUrl = 4;
    optional string iconId = 5;
    optional int32 billingInstrumentType = 6;
    optional string applicationId = 7;
    optional string tosUrl = 8;
    optional bool instrumentTosRequired = 9;
    optional int32 apiVersion = 10;
    optional bool perTransactionCredentialsRequired = 11;
    optional bool sendSubscriberIdWithCarrierBillingRequests = 12;
    optional int32 deviceAssociationMethod = 13;
    optional string userTokenRequestMessage = 14;
    optional string userTokenRequestAddress = 15;
    optional bool passphraseRequired = 16;
}
message CarrierBillingCredentialsProto {
    optional string credentials = 1;
    optional int64 credentialsTimeout = 2;
}
message CategoryProto {
    optional int32 assetType = 2;
    optional string categoryId = 3;
    optional string categoryDisplay = 4;
    optional string categorySubtitle = 5;
    repeated string promotedAssetsNew = 6;
    repeated string promotedAssetsHome = 7;
    repeated CategoryProto subCategories = 8;
    repeated string promotedAssetsPaid = 9;
    repeated string promotedAssetsFree = 10;
}
message CheckForNotificationsRequestProto {
    optional int64 alarmDuration = 1;
}
message CheckForNotificationsResponseProto {
}
message CheckLicenseRequestProto {
    optional string packageName = 1;
    optional int32 versionCode = 2;
    optional int64 nonce = 3;
}
message CheckLicenseResponseProto {
    optional int32 responseCode = 1;
    optional string signedData = 2;
    optional string signature = 3;
}
message CommentsRequestProto {
    optional string assetId = 1;
    optional int64 startIndex = 2;
    optional int64 numEntries = 3;
    optional bool shouldReturnSelfComment = 4;
    optional string assetReferrer = 5;
}
message CommentsResponseProto {
    repeated ExternalCommentProto comment = 1;
    optional int64 numTotalEntries = 2;
    optional ExternalCommentProto selfComment = 3;
}
message ContentSyncRequestProto {
    optional bool incremental = 1;
    repeated group AssetInstallState = 2 {
        optional string assetId = 3;
        optional int32 assetState = 4;
        optional int64 installTime = 5;
        optional int64 uninstallTime = 6;
        optional string packageName = 7;
        optional int32 versionCode = 8;
        optional string assetReferrer = 9;
    }
    repeated group SystemApp = 10 {
        optional string packageName = 11;
        optional int32 versionCode = 12;
        repeated string certificateHash = 13;
    }
    optional int32 sideloadedAppCount = 14;
}
message ContentSyncResponseProto {
    optional int32 numUpdatesAvailable = 1;
}
message DataMessageProto {
    optional string category = 1;
    repeated AppDataProto appData = 3;
}
message DownloadInfoProto {
    optional int64 apkSize = 1;
    repeated FileMetadataProto additionalFile = 2;
}
message ExternalAssetProto {
    optional string id = 1;
    optional string title = 2;
    optional int32 assetType = 3;
    optional string owner = 4;
    optional string version = 5;
    optional string price = 6;
    optional string averageRating = 7;
    optional int64 numRatings = 8;
    optional group PurchaseInformation = 9 {
        optional int64 purchaseTime = 10;
        optional int64 refundTimeoutTime = 11;
        optional int32 refundStartPolicy = 45;
        optional int64 refundWindowDuration = 46;
    }
    optional group ExtendedInfo = 12 {
        optional string description = 13;
        optional int64 downloadCount = 14;
        repeated string applicationPermissionId = 15;
        optional int64 requiredInstallationSize = 16;
        optional string packageName = 17;
        optional string category = 18;
        optional bool forwardLocked = 19;
        optional string contactEmail = 20;
        optional bool everInstalledByUser = 21;
        optional string downloadCountString = 23;
        optional string contactPhone = 26;
        optional string contactWebsite = 27;
        optional bool nextPurchaseRefundable = 28;
        optional int32 numScreenshots = 30;
        optional string promotionalDescription = 31;
        optional int32 serverAssetState = 34;
        optional int32 contentRatingLevel = 36;
        optional string contentRatingString = 37;
        optional string recentChanges = 38;
        repeated group PackageDependency = 39 {
            optional string packageName = 41;
            optional bool skipPermissions = 42;
        }
        optional string videoLink = 43;
        optional DownloadInfoProto downloadInfo = 49;
    }
    optional string ownerId = 22;
    optional string packageName = 24;
    optional int32 versionCode = 25;
    optional bool bundledAsset = 29;
    optional string priceCurrency = 32;
    optional int64 priceMicros = 33;
    optional string filterReason = 35;
    optional string actualSellerPrice = 40;
    repeated ExternalBadgeProto appBadge = 47;
    repeated ExternalBadgeProto ownerBadge = 48;
}
message ExternalBadgeImageProto {
    optional int32 usage = 1;
    optional string url = 2;
}
message ExternalBadgeProto {
    optional string localizedTitle = 1;
    optional string localizedDescription = 2;
    repeated ExternalBadgeImageProto badgeImage = 3;
    optional string searchId = 4;
}
message ExternalCarrierBillingInstrumentProto {
    optional string instrumentKey = 1;
    optional string subscriberIdentifier = 2;
    optional string accountType = 3;
    optional string subscriberCurrency = 4;
    optional uint64 transactionLimit = 5;
    optional string subscriberName = 6;
    optional string address1 = 7;
    optional string address2 = 8;
    optional string city = 9;
    optional string state = 10;
    optional string postalCode = 11;
    optional string country = 12;
    optional EncryptedSubscriberInfo encryptedSubscriberInfo = 13;
}
message ExternalCommentProto {
    optional string body = 1;
    optional int32 rating = 2;
    optional string creatorName = 3;
    optional int64 creationTime = 4;
    optional string creatorId = 5;
}
message ExternalCreditCard {
    optional string type = 1;
    optional string lastDigits = 2;
    optional int32 expYear = 3;
    optional int32 expMonth = 4;
    optional string personName = 5;
    optional string countryCode = 6;
    optional string postalCode = 7;
    optional bool makeDefault = 8;
    optional string address1 = 9;
    optional string address2 = 10;
    optional string city = 11;
    optional string state = 12;
    optional string phone = 13;
}
message ExternalPaypalInstrumentProto {
    optional string instrumentKey = 1;
    optional string preapprovalKey = 2;
    optional string paypalEmail = 3;
    optional AddressProto paypalAddress = 4;
    optional bool multiplePaypalInstrumentsSupported = 5;
}
message FileMetadataProto {
    optional int32 fileType = 1;
    optional int32 versionCode = 2;
    optional int64 size = 3;
    optional string downloadUrl = 4;
}
message GetAddressSnippetRequestProto {
    optional EncryptedSubscriberInfo encryptedSubscriberInfo = 1;
}
message GetAddressSnippetResponseProto {
    optional string addressSnippet = 1;
}
message GetAssetRequestProto {
    optional string assetId = 1;
    optional string directDownloadKey = 2;
}
message GetAssetResponseProto {
    optional group InstallAsset = 1 {
        optional string assetId = 2;
        optional string assetName = 3;
        optional string assetType = 4;
        optional string assetPackage = 5;
        optional string blobUrl = 6;
        optional string assetSignature = 7;
        optional int64 assetSize = 8;
        optional int64 refundTimeoutMillis = 9;
        optional bool forwardLocked = 10;
        optional bool secured = 11;
        optional int32 versionCode = 12;
        optional string downloadAuthCookieName = 13;
        optional string downloadAuthCookieValue = 14;
        optional int64 postInstallRefundWindowMillis = 16;
    }
    repeated FileMetadataProto additionalFile = 15;
}
message GetCarrierInfoRequestProto {
}
message GetCarrierInfoResponseProto {
    optional bool carrierChannelEnabled = 1;
    optional string carrierLogoIcon = 2;
    optional string carrierBanner = 3;
    optional string carrierSubtitle = 4;
    optional string carrierTitle = 5;
    optional int32 carrierImageDensity = 6;
}
message GetCategoriesRequestProto {
    optional bool prefetchPromoData = 1;
}
message GetCategoriesResponseProto {
    repeated CategoryProto categories = 1;
}
message GetImageRequestProto {
    optional string assetId = 1;
    optional int32 imageUsage = 3;
    optional string imageId = 4;
    optional int32 screenPropertyWidth = 5;
    optional int32 screenPropertyHeight = 6;
    optional int32 screenPropertyDensity = 7;
    optional int32 productType = 8;
}
message GetImageResponseProto {
    optional string imageData = 1;
    optional int32 imageDensity = 2;
}
message GetMarketMetadataRequestProto {
    optional int64 lastRequestTime = 1;
    optional DeviceConfigurationProto deviceConfiguration = 2;
    optional bool deviceRoaming = 3;
    repeated string marketSignatureHash = 4;
    optional int32 contentRating = 5;
    optional string deviceModelName = 6;
    optional string deviceManufacturerName = 7;
}
message GetMarketMetadataResponseProto {
    optional int32 latestClientVersionCode = 1;
    optional string latestClientUrl = 2;
    optional bool paidAppsEnabled = 3;
    repeated BillingParameterProto billingParameter = 4;
    optional bool commentPostEnabled = 5;
    optional bool billingEventsEnabled = 6;
    optional string warningMessage = 7;
    optional bool inAppBillingEnabled = 8;
    optional int32 inAppBillingMaxApiVersion = 9;
}
message GetSubCategoriesRequestProto {
    optional int32 assetType = 1;
}
message GetSubCategoriesResponseProto {
    repeated group SubCategory = 1 {
        optional string subCategoryDisplay = 2;
        optional string subCategoryId = 3;
    }
}
message InAppPurchaseInformationRequestProto {
    optional SignatureHashProto signatureHash = 1;
    optional int64 nonce = 2;
    repeated string notificationId = 3;
    optional string signatureAlgorithm = 4;
    optional int32 billingApiVersion = 5;
}
message InAppPurchaseInformationResponseProto {
    optional SignedDataProto signedResponse = 1;
    repeated StatusBarNotificationProto statusBarNotification = 2;
    optional PurchaseResultProto purchaseResult = 3;
}
message InAppRestoreTransactionsRequestProto {
    optional SignatureHashProto signatureHash = 1;
    optional int64 nonce = 2;
    optional string signatureAlgorithm = 3;
    optional int32 billingApiVersion = 4;
}
message InAppRestoreTransactionsResponseProto {
    optional SignedDataProto signedResponse = 1;
    optional PurchaseResultProto purchaseResult = 2;
}
message ModifyCommentRequestProto {
    optional string assetId = 1;
    optional ExternalCommentProto comment = 2;
    optional bool deleteComment = 3;
    optional bool flagAsset = 4;
    optional int32 flagType = 5;
    optional string flagMessage = 6;
    optional bool nonFlagFlow = 7;
}
message ModifyCommentResponseProto {
}
message PaypalCountryInfoProto {
    optional bool birthDateRequired = 1;
    optional string tosText = 2;
    optional string billingAgreementText = 3;
    optional string preTosText = 4;
}
message PaypalCreateAccountRequestProto {
    optional string firstName = 1;
    optional string lastName = 2;
    optional AddressProto address = 3;
    optional string birthDate = 4;
}
message PaypalCreateAccountResponseProto {
    optional string createAccountKey = 1;
}
message PaypalCredentialsProto {
    optional string preapprovalKey = 1;
    optional string paypalEmail = 2;
}
message PaypalMassageAddressRequestProto {
    optional AddressProto address = 1;
}
message PaypalMassageAddressResponseProto {
    optional AddressProto address = 1;
}
message PaypalPreapprovalCredentialsRequestProto {
    optional string gaiaAuthToken = 1;
    optional string billingInstrumentId = 2;
}
message PaypalPreapprovalCredentialsResponseProto {
    optional int32 resultCode = 1;
    optional string paypalAccountKey = 2;
    optional string paypalEmail = 3;
}
message PaypalPreapprovalDetailsRequestProto {
    optional bool getAddress = 1;
    optional string preapprovalKey = 2;
}
message PaypalPreapprovalDetailsResponseProto {
    optional string paypalEmail = 1;
    optional AddressProto address = 2;
}
message PaypalPreapprovalRequestProto {
}
message PaypalPreapprovalResponseProto {
    optional string preapprovalKey = 1;
}
message PendingNotificationsProto {
    repeated DataMessageProto notification = 1;
    optional int64 nextCheckMillis = 2;
}
message PrefetchedBundleProto {
    optional SingleRequestProto request = 1;
    optional SingleResponseProto response = 2;
}
message PurchaseCartInfoProto {
    optional string itemPrice = 1;
    optional string taxInclusive = 2;
    optional string taxExclusive = 3;
    optional string total = 4;
    optional string taxMessage = 5;
    optional string footerMessage = 6;
    optional string priceCurrency = 7;
    optional int64 priceMicros = 8;
}
message PurchaseInfoProto {
    optional string transactionId = 1;
    optional PurchaseCartInfoProto cartInfo = 2;
    optional group BillingInstruments = 3 {
        repeated group BillingInstrument = 4 {
            optional string id = 5;
            optional string name = 6;
            optional bool isInvalid = 7;
            optional int32 instrumentType = 11;
            optional int32 instrumentStatus = 14;
        }
        optional string defaultBillingInstrumentId = 8;
    }
    repeated int32 errorInputFields = 9;
    optional string refundPolicy = 10;
    optional bool userCanAddGdd = 12;
    repeated int32 eligibleInstrumentTypes = 13;
    optional string orderId = 15;
}
message PurchaseMetadataRequestProto {
    optional bool deprecatedRetrieveBillingCountries = 1;
    optional int32 billingInstrumentType = 2;
}
message PurchaseMetadataResponseProto {
    optional group Countries = 1 {
        repeated group Country = 2 {
            optional string countryCode = 3;
            optional string countryName = 4;
            optional PaypalCountryInfoProto paypalCountryInfo = 5;
            optional bool allowsReducedBillingAddress = 6;
            repeated group InstrumentAddressSpec = 7 {
                optional int32 instrumentFamily = 8;
                optional BillingAddressSpec billingAddressSpec = 9;
            }
        }
    }
}
message PurchaseOrderRequestProto {
    optional string gaiaAuthToken = 1;
    optional string assetId = 2;
    optional string transactionId = 3;
    optional string billingInstrumentId = 4;
    optional bool tosAccepted = 5;
    optional CarrierBillingCredentialsProto carrierBillingCredentials = 6;
    optional string existingOrderId = 7;
    optional int32 billingInstrumentType = 8;
    optional string billingParametersId = 9;
    optional PaypalCredentialsProto paypalCredentials = 10;
    optional RiskHeaderInfoProto riskHeaderInfo = 11;
    optional int32 productType = 12;
    optional SignatureHashProto signatureHash = 13;
    optional string developerPayload = 14;
}
message PurchaseOrderResponseProto {
    optional int32 deprecatedResultCode = 1;
    optional PurchaseInfoProto purchaseInfo = 2;
    optional ExternalAssetProto asset = 3;
    optional PurchaseResultProto purchaseResult = 4;
}
message PurchasePostRequestProto {
    optional string gaiaAuthToken = 1;
    optional string assetId = 2;
    optional string transactionId = 3;
    optional group BillingInstrumentInfo = 4 {
        optional string billingInstrumentId = 5;
        optional ExternalCreditCard creditCard = 6;
        optional ExternalCarrierBillingInstrumentProto carrierInstrument = 9;
        optional ExternalPaypalInstrumentProto paypalInstrument = 10;
    }
    optional bool tosAccepted = 7;
    optional string cbInstrumentKey = 8;
    optional bool paypalAuthConfirmed = 11;
    optional int32 productType = 12;
    optional SignatureHashProto signatureHash = 13;
}
message PurchasePostResponseProto {
    optional int32 deprecatedResultCode = 1;
    optional PurchaseInfoProto purchaseInfo = 2;
    optional string termsOfServiceUrl = 3;
    optional string termsOfServiceText = 4;
    optional string termsOfServiceName = 5;
    optional string termsOfServiceCheckboxText = 6;
    optional string termsOfServiceHeaderText = 7;
    optional PurchaseResultProto purchaseResult = 8;
}
message PurchaseProductRequestProto {
    optional int32 productType = 1;
    optional string productId = 2;
    optional SignatureHashProto signatureHash = 3;
}
message PurchaseProductResponseProto {
    optional string title = 1;
    optional string itemTitle = 2;
    optional string itemDescription = 3;
    optional string merchantField = 4;
}
message PurchaseResultProto {
    optional int32 resultCode = 1;
    optional string resultCodeMessage = 2;
}
message QuerySuggestionProto {
    optional string query = 1;
    optional int32 estimatedNumResults = 2;
    optional int32 queryWeight = 3;
}
message QuerySuggestionRequestProto {
    optional string query = 1;
    optional int32 requestType = 2;
}
message QuerySuggestionResponseProto {
    repeated group Suggestion = 1 {
        optional AppSuggestionProto appSuggestion = 2;
        optional QuerySuggestionProto querySuggestion = 3;
    }
    optional int32 estimatedNumAppSuggestions = 4;
    optional int32 estimatedNumQuerySuggestions = 5;
}
message RateCommentRequestProto {
    optional string assetId = 1;
    optional string creatorId = 2;
    optional int32 commentRating = 3;
}
message RateCommentResponseProto {
}
message ReconstructDatabaseRequestProto {
    optional bool retrieveFullHistory = 1;
}
message ReconstructDatabaseResponseProto {
    repeated AssetIdentifierProto asset = 1;
}
message RefundRequestProto {
    optional string assetId = 1;
}
message RefundResponseProto {
    optional int32 result = 1;
    optional ExternalAssetProto asset = 2;
    optional string resultDetail = 3;
}
message RemoveAssetRequestProto {
    optional string assetId = 1;
}
message RequestPropertiesProto {
    optional string userAuthToken = 1;
    optional bool userAuthTokenSecure = 2;
    optional int32 softwareVersion = 3;
    optional string aid = 4;
    optional string productNameAndVersion = 5;
    optional string userLanguage = 6;
    optional string userCountry = 7;
    optional string operatorName = 8;
    optional string simOperatorName = 9;
    optional string operatorNumericName = 10;
    optional string simOperatorNumericName = 11;
    optional string clientId = 12;
    optional string loggingId = 13;
}
message RequestProto {
    optional RequestPropertiesProto requestProperties = 1;
    repeated group Request = 2 {
        optional RequestSpecificPropertiesProto requestSpecificProperties = 3;
        optional AssetsRequestProto assetRequest = 4;
        optional CommentsRequestProto commentsRequest = 5;
        optional ModifyCommentRequestProto modifyCommentRequest = 6;
        optional PurchasePostRequestProto purchasePostRequest = 7;
        optional PurchaseOrderRequestProto purchaseOrderRequest = 8;
        optional ContentSyncRequestProto contentSyncRequest = 9;
        optional GetAssetRequestProto getAssetRequest = 10;
        optional GetImageRequestProto getImageRequest = 11;
        optional RefundRequestProto refundRequest = 12;
        optional PurchaseMetadataRequestProto purchaseMetadataRequest = 13;
        optional GetSubCategoriesRequestProto subCategoriesRequest = 14;
        optional UninstallReasonRequestProto uninstallReasonRequest = 16;
        optional RateCommentRequestProto rateCommentRequest = 17;
        optional CheckLicenseRequestProto checkLicenseRequest = 18;
        optional GetMarketMetadataRequestProto getMarketMetadataRequest = 19;
        optional GetCategoriesRequestProto getCategoriesRequest = 21;
        optional GetCarrierInfoRequestProto getCarrierInfoRequest = 22;
        optional RemoveAssetRequestProto removeAssetRequest = 23;
        optional RestoreApplicationsRequestProto restoreApplicationsRequest = 24;
        optional QuerySuggestionRequestProto querySuggestionRequest = 25;
        optional BillingEventRequestProto billingEventRequest = 26;
        optional PaypalPreapprovalRequestProto paypalPreapprovalRequest = 27;
        optional PaypalPreapprovalDetailsRequestProto paypalPreapprovalDetailsRequest = 28;
        optional PaypalCreateAccountRequestProto paypalCreateAccountRequest = 29;
        optional PaypalPreapprovalCredentialsRequestProto paypalPreapprovalCredentialsRequest = 30;
        optional InAppRestoreTransactionsRequestProto inAppRestoreTransactionsRequest = 31;
        optional InAppPurchaseInformationRequestProto inAppPurchaseInformationRequest = 32;
        optional CheckForNotificationsRequestProto checkForNotificationsRequest = 33;
        optional AckNotificationsRequestProto ackNotificationsRequest = 34;
        optional PurchaseProductRequestProto purchaseProductRequest = 35;
        optional ReconstructDatabaseRequestProto reconstructDatabaseRequest = 36;
        optional PaypalMassageAddressRequestProto paypalMassageAddressRequest = 37;
        optional GetAddressSnippetRequestProto getAddressSnippetRequest = 38;
    }
}
message RequestSpecificPropertiesProto {
    optional string ifNoneMatch = 1;
}
message ResponsePropertiesProto {
    optional int32 result = 1;
    optional int32 maxAge = 2;
    optional string etag = 3;
    optional int32 serverVersion = 4;
    optional int32 maxAgeConsumable = 6;
    optional string errorMessage = 7;
    repeated InputValidationError errorInputField = 8;
}
message ResponseProto {
    repeated group Response = 1 {
        optional ResponsePropertiesProto responseProperties = 2;
        optional AssetsResponseProto assetsResponse = 3;
        optional CommentsResponseProto commentsResponse = 4;
        optional ModifyCommentResponseProto modifyCommentResponse = 5;
        optional PurchasePostResponseProto purchasePostResponse = 6;
        optional PurchaseOrderResponseProto purchaseOrderResponse = 7;
        optional ContentSyncResponseProto contentSyncResponse = 8;
        optional GetAssetResponseProto getAssetResponse = 9;
        optional GetImageResponseProto getImageResponse = 10;
        optional RefundResponseProto refundResponse = 11;
        optional PurchaseMetadataResponseProto purchaseMetadataResponse = 12;
        optional GetSubCategoriesResponseProto subCategoriesResponse = 13;
        optional UninstallReasonResponseProto uninstallReasonResponse = 15;
        optional RateCommentResponseProto rateCommentResponse = 16;
        optional CheckLicenseResponseProto checkLicenseResponse = 17;
        optional GetMarketMetadataResponseProto getMarketMetadataResponse = 18;
        repeated PrefetchedBundleProto prefetchedBundle = 19;
        optional GetCategoriesResponseProto getCategoriesResponse = 20;
        optional GetCarrierInfoResponseProto getCarrierInfoResponse = 21;
        optional RestoreApplicationsResponseProto restoreApplicationResponse = 23;
        optional QuerySuggestionResponseProto querySuggestionResponse = 24;
        optional BillingEventResponseProto billingEventResponse = 25;
        optional PaypalPreapprovalResponseProto paypalPreapprovalResponse = 26;
        optional PaypalPreapprovalDetailsResponseProto paypalPreapprovalDetailsResponse = 27;
        optional PaypalCreateAccountResponseProto paypalCreateAccountResponse = 28;
        optional PaypalPreapprovalCredentialsResponseProto paypalPreapprovalCredentialsResponse = 29;
        optional InAppRestoreTransactionsResponseProto inAppRestoreTransactionsResponse = 30;
        optional InAppPurchaseInformationResponseProto inAppPurchaseInformationResponse = 31;
        optional CheckForNotificationsResponseProto checkForNotificationsResponse = 32;
        optional AckNotificationsResponseProto ackNotificationsResponse = 33;
        optional PurchaseProductResponseProto purchaseProductResponse = 34;
        optional ReconstructDatabaseResponseProto reconstructDatabaseResponse = 35;
        optional PaypalMassageAddressResponseProto paypalMassageAddressResponse = 36;
        optional GetAddressSnippetResponseProto getAddressSnippetResponse = 37;
    }
    optional PendingNotificationsProto pendingNotifications = 38;
}
message RestoreApplicationsRequestProto {
    optional string backupAndroidId = 1;
    optional string tosVersion = 2;
    optional DeviceConfigurationProto deviceConfiguration = 3;
}
message RestoreApplicationsResponseProto {
    repeated GetAssetResponseProto asset = 1;
}
message RiskHeaderInfoProto {
    optional string hashedDeviceInfo = 1;
}
message SignatureHashProto {
    optional string packageName = 1;
    optional int32 versionCode = 2;
    optional string hash = 3;
}
message SignedDataProto {
    optional string signedData = 1;
    optional string signature = 2;
}
message SingleRequestProto {
    optional RequestSpecificPropertiesProto requestSpecificProperties = 3;
    optional AssetsRequestProto assetRequest = 4;
    optional CommentsRequestProto commentsRequest = 5;
    optional ModifyCommentRequestProto modifyCommentRequest = 6;
    optional PurchasePostRequestProto purchasePostRequest = 7;
    optional PurchaseOrderRequestProto purchaseOrderRequest = 8;
    optional ContentSyncRequestProto contentSyncRequest = 9;
    optional GetAssetRequestProto getAssetRequest = 10;
    optional GetImageRequestProto getImageRequest = 11;
    optional RefundRequestProto refundRequest = 12;
    optional PurchaseMetadataRequestProto purchaseMetadataRequest = 13;
    optional GetSubCategoriesRequestProto subCategoriesRequest = 14;
    optional UninstallReasonRequestProto uninstallReasonRequest = 16;
    optional RateCommentRequestProto rateCommentRequest = 17;
    optional CheckLicenseRequestProto checkLicenseRequest = 18;
    optional GetMarketMetadataRequestProto getMarketMetadataRequest = 19;
    optional GetCategoriesRequestProto getCategoriesRequest = 21;
    optional GetCarrierInfoRequestProto getCarrierInfoRequest = 22;
    optional RemoveAssetRequestProto removeAssetRequest = 23;
    optional RestoreApplicationsRequestProto restoreApplicationsRequest = 24;
    optional QuerySuggestionRequestProto querySuggestionRequest = 25;
    optional BillingEventRequestProto billingEventRequest = 26;
    optional PaypalPreapprovalRequestProto paypalPreapprovalRequest = 27;
    optional PaypalPreapprovalDetailsRequestProto paypalPreapprovalDetailsRequest = 28;
    optional PaypalCreateAccountRequestProto paypalCreateAccountRequest = 29;
    optional PaypalPreapprovalCredentialsRequestProto paypalPreapprovalCredentialsRequest = 30;
    optional InAppRestoreTransactionsRequestProto inAppRestoreTransactionsRequest = 31;
    optional InAppPurchaseInformationRequestProto getInAppPurchaseInformationRequest = 32;
    optional CheckForNotificationsRequestProto checkForNotificationsRequest = 33;
    optional AckNotificationsRequestProto ackNotificationsRequest = 34;
    optional PurchaseProductRequestProto purchaseProductRequest = 35;
    optional ReconstructDatabaseRequestProto reconstructDatabaseRequest = 36;
    optional PaypalMassageAddressRequestProto paypalMassageAddressRequest = 37;
    optional GetAddressSnippetRequestProto getAddressSnippetRequest = 38;
}
message SingleResponseProto {
    optional ResponsePropertiesProto responseProperties = 2;
    optional AssetsResponseProto assetsResponse = 3;
    optional CommentsResponseProto commentsResponse = 4;
    optional ModifyCommentResponseProto modifyCommentResponse = 5;
    optional PurchasePostResponseProto purchasePostResponse = 6;
    optional PurchaseOrderResponseProto purchaseOrderResponse = 7;
    optional ContentSyncResponseProto contentSyncResponse = 8;
    optional GetAssetResponseProto getAssetResponse = 9;
    optional GetImageResponseProto getImageResponse = 10;
    optional RefundResponseProto refundResponse = 11;
    optional PurchaseMetadataResponseProto purchaseMetadataResponse = 12;
    optional GetSubCategoriesResponseProto subCategoriesResponse = 13;
    optional UninstallReasonResponseProto uninstallReasonResponse = 15;
    optional RateCommentResponseProto rateCommentResponse = 16;
    optional CheckLicenseResponseProto checkLicenseResponse = 17;
    optional GetMarketMetadataResponseProto getMarketMetadataResponse = 18;
    optional GetCategoriesResponseProto getCategoriesResponse = 20;
    optional GetCarrierInfoResponseProto getCarrierInfoResponse = 21;
    optional RestoreApplicationsResponseProto restoreApplicationResponse = 23;
    optional QuerySuggestionResponseProto querySuggestionResponse = 24;
    optional BillingEventResponseProto billingEventResponse = 25;
    optional PaypalPreapprovalResponseProto paypalPreapprovalResponse = 26;
    optional PaypalPreapprovalDetailsResponseProto paypalPreapprovalDetailsResponse = 27;
    optional PaypalCreateAccountResponseProto paypalCreateAccountResponse = 28;
    optional PaypalPreapprovalCredentialsResponseProto paypalPreapprovalCredentialsResponse = 29;
    optional InAppRestoreTransactionsResponseProto inAppRestoreTransactionsResponse = 30;
    optional InAppPurchaseInformationResponseProto getInAppPurchaseInformationResponse = 31;
    optional CheckForNotificationsResponseProto checkForNotificationsResponse = 32;
    optional AckNotificationsResponseProto ackNotificationsResponse = 33;
    optional PurchaseProductResponseProto purchaseProductResponse = 34;
    optional ReconstructDatabaseResponseProto reconstructDatabaseResponse = 35;
    optional PaypalMassageAddressResponseProto paypalMassageAddressResponse = 36;
    optional GetAddressSnippetResponseProto getAddressSnippetResponse = 37;
}
message StatusBarNotificationProto {
    optional string tickerText = 1;
    optional string contentTitle = 2;
    optional string contentText = 3;
}
message UninstallReasonRequestProto {
    optional string assetId = 1;
    optional int32 reason = 2;
}
message UninstallReasonResponseProto {
}
message CriticReviewsResponse {
    optional string title = 1;
    optional Image aggregateSentiment = 2;
    optional uint32 totalNumReviews = 3;
    optional uint32 percentFavorable = 4;
    optional string sourceText = 5;
    optional Link source = 6;
    repeated Review review = 7;
}

