syntax = "proto2"; 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; } 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 isReduced = 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; } } 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 Image icon = 5; optional UnknownCategoryContainer unknownCategoryContainer = 4; } message UnknownCategoryContainer { optional CategoryIdContainer categoryIdContainer = 5; } message CategoryIdContainer { optional string categoryId = 4; } message BrowseResponse { optional string contentsUrl = 1; optional string promoUrl = 2; repeated BrowseLink category = 3; repeated BrowseLink breadcrumb = 4; optional CategoryContainer categoryContainer = 9; } message CategoryContainer { repeated BrowseLink category = 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; } message AuthenticationChallenge { optional int32 authenticationType = 1; optional string responseAuthenticationTypeParam = 2; optional string responseRetryCountParam = 3; optional string pinHeaderText = 4; optional string pinDescriptionTextHtml = 5; optional string gaiaHeaderText = 6; optional string gaiaDescriptionTextHtml = 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; repeated int32 deprecatedInstrumentInapplicableReason = 30; 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 iabPermissionError = 38; optional PurchaseStatusResponse purchaseStatusResponse = 39; optional string purchaseCookie = 46; optional Challenge challenge = 49; optional string downloadToken = 55; } message Challenge { optional AddressChallenge addressChallenge = 1; optional AuthenticationChallenge authenticationChallenge = 2; } message FormCheckbox { optional string description = 1; optional bool checked = 2; optional bool required = 3; } 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 DeliveryResponse { optional AndroidAppDeliveryData appDeliveryData = 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; } 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; } message OwnershipInfo { optional int64 initiationTimestampMsec = 1; optional int64 validUntilTimestampMsec = 2; optional bool autoRenewing = 3; optional int64 refundTimeoutTimestampMsec = 4; optional int64 postDeliveryRefundWindowMsec = 5; } message RentalTerms { optional int32 grantPeriodSeconds = 1; optional int32 activatePeriodSeconds = 2; } 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 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; } 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 EfeParam { optional int32 key = 1; optional string value = 2; } message InputValidationError { optional int32 inputField = 1; optional string errorMessage = 2; } message Instrument { optional string instrumentId = 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; } message PasswordPrompt { optional string prompt = 1; optional string forgotPasswordUrl = 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; } message DebugInfo { repeated string message = 1; repeated group Timing = 2 { optional string name = 3; optional double timeInMs = 4; } } message BulkDetailsEntry { optional DocV2 doc = 1; } message BulkDetailsRequest { repeated string docid = 1; optional bool includeChildDocs = 2; } 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; repeated Badge badge = 7; } message Badge { optional string label = 1; optional string message = 11; } 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; } 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; } 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 string color = 15; } message TranslatedText { optional string text = 1; optional string sourceLocale = 2; optional string targetLocale = 3; } message PlusOneData { optional bool setByUser = 1; optional int64 total = 2; optional int64 circlesTotal = 3; repeated PlusPerson circlesPeople = 4; } message PlusPerson { optional string displayName = 2; optional string profileImageUrl = 4; } 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; optional bool unstable = 21; optional string containsAds = 30; optional Dependencies dependencies = 34; optional TestingProgramInfo testingProgramInfo = 35; optional EarlyAccessInfo earlyAccessInfo = 36; } message Dependencies { optional int32 unknown1 = 1; optional int64 unknown2 = 2; repeated Dependency dependency = 3; optional int32 unknown3 = 4; } message Dependency { optional string packageName = 1; optional int32 version = 2; optional int32 unknown4 = 4; } message TestingProgramInfo { optional bool subscribed = 2; optional bool subscribed1 = 3; optional string testingProgramEmail = 5; } message EarlyAccessInfo { optional string email = 3; } 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; } message FileMetadata { optional int32 fileType = 1; optional int32 versionCode = 2; optional int64 size = 3; } 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 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; } 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; } 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; } 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 SearchCluster cluster = 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 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 RelatedLinks relatedLinks = 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 Unknown25 unknown25 = 25; } message Unknown25 { repeated Unknown25Item item = 2; } message Unknown25Item { optional string label = 1; optional Unknown25Container container = 3; } message Unknown25Container { optional string value = 2; } message RelatedLinks { optional RelatedLinksUnknown1 unknown1 = 10; optional string privacyPolicyUrl = 18; optional RelatedLink youMightAlsoLike = 24; optional Rated rated = 29; repeated RelatedLink relatedLinks = 34; optional CategoryInfo categoryInfo = 53; } message RelatedLinksUnknown1 { optional RelatedLinksUnknown2 unknown2 = 2; } message RelatedLinksUnknown2 { optional string nextPageUrl = 3; } message Rated { optional string label = 1; optional Image image = 2; optional string learnMoreHtmlLink = 4; } message RelatedLink { optional string label = 1; optional string url1 = 2; optional string url2 = 3; } message CategoryInfo { optional string appType = 1; optional string appCategory = 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; } 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; } message RuleEvaluation { optional Rule rule = 1; repeated string actualStringValue = 2; repeated int64 actualLongValue = 3; repeated bool actualBoolValue = 4; repeated double actualDoubleValue = 5; } 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; } message LibrarySubscriptionDetails { optional int64 initiationTimestampMsec = 1; optional int64 validUntilTimestampMsec = 2; optional bool autoRenewing = 3; optional int64 trialUntilTimestampMsec = 4; } message LibraryUpdate { optional int32 status = 1; optional int32 corpus = 2; optional bytes serverToken = 3; repeated LibraryMutation mutation = 4; optional bool hasMore = 5; optional string libraryId = 6; } 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; } 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 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 Payload { optional ListResponse listResponse = 1; optional DetailsResponse detailsResponse = 2; optional ReviewResponse reviewResponse = 3; optional BuyResponse buyResponse = 4; optional SearchResponse searchResponse = 5; optional BrowseResponse browseResponse = 7; optional PurchaseStatusResponse purchaseStatusResponse = 8; optional string logResponse = 10; optional BulkDetailsResponse bulkDetailsResponse = 19; optional DeliveryResponse deliveryResponse = 21; optional UploadDeviceConfigResponse uploadDeviceConfigResponse = 25; optional AndroidCheckinResponse androidCheckinResponse = 26; optional SearchSuggestResponse searchSuggestResponse = 40; optional TestingProgramResponse testingProgramResponse = 80; } message PreFetch { optional string url = 1; optional ResponseWrapper 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; } message ServerCommands { optional bool clearCache = 1; optional string displayErrorMessage = 2; optional string logErrorStacktrace = 3; } 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 Author author = 31; optional Author2 author2 = 33; } message Author { optional string name = 2; optional Avatar urls = 5; } message Author2 { optional string personIdString = 1; optional string personId = 2; optional int32 unknown1 = 3; optional int32 unknown2 = 4; optional string name = 5; optional Avatar urls = 10; optional string googlePlusUrl = 19; optional string googlePlusTagline = 22; } message Avatar { optional int32 unknown1 = 1; optional string url = 5; optional string secureUrl = 7; optional bool unknown2 = 9; optional bool unknown3 = 22; } message ReviewResponse { optional GetReviewsResponse getResponse = 1; optional string nextPageUrl = 2; optional Review userReview = 3; } 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 nextPageUrl = 10; } message UserProfileResponseWrapper { optional UserProfilePayload payload = 1; optional ServerCommands commands = 2; repeated PreFetch preFetch = 3; repeated Notification notification = 4; } message UserProfilePayload { optional UserProfileResponse response = 5; } message UserProfileResponse { repeated DocV2 doc = 1; } message SearchSuggestResponse { repeated SearchSuggestEntry entry = 1; } message SearchSuggestEntry { optional int32 type = 1; optional string suggestedQuery = 2; optional ImageContainer imageContainer = 5; message ImageContainer { optional string imageUrl = 5; } optional string title = 6; optional PackageNameContainer packageNameContainer = 8; message PackageNameContainer { optional string packageName = 1; } } message TestingProgramResponse { optional TestingProgramResult result = 2; } message TestingProgramResult { optional TestingProgramDetails details = 4; } message TestingProgramDetails { optional bool flag1 = 2; optional int64 id = 3; optional bool unsubscribed = 4; } message LogRequest { optional int64 timestamp = 1; optional string downloadConfirmationQuery = 2; } message TestingProgramRequest { optional string packageName = 1; optional bool subscribe = 2; } message UploadDeviceConfigRequest { optional DeviceConfigurationProto deviceConfiguration = 1; optional string manufacturer = 2; optional string gcmRegistrationId = 3; } message UploadDeviceConfigResponse { optional string uploadDeviceConfigToken = 1; } message AndroidCheckinRequest { optional string imei = 1; optional int64 id = 2; optional string digest = 3; optional AndroidCheckinProto checkin = 4; optional string desiredBuild = 5; optional string locale = 6; optional int64 loggingId = 7; optional string marketCheckin = 8; repeated string macAddr = 9; optional string meid = 10; repeated string accountCookie = 11; optional string timeZone = 12; optional fixed64 securityToken = 13; optional int32 version = 14; repeated string otaCert = 15; optional string serialNumber = 16; optional string esn = 17; optional DeviceConfigurationProto deviceConfiguration = 18; repeated string macAddrType = 19; optional int32 fragment = 20; optional string userName = 21; optional int32 userSerialNumber = 22; } message AndroidCheckinResponse { optional bool statsOk = 1; repeated AndroidIntentProto intent = 2; optional int64 timeMsec = 3; optional string digest = 4; repeated GservicesSetting setting = 5; optional bool marketOk = 6; optional fixed64 androidId = 7; optional fixed64 securityToken = 8; optional bool settingsDiff = 9; repeated string deleteSetting = 10; } message GservicesSetting { optional bytes name = 1; optional bytes value = 2; } message AndroidBuildProto { optional string id = 1; optional string product = 2; optional string carrier = 3; optional string radio = 4; optional string bootloader = 5; optional string client = 6; optional int64 timestamp = 7; optional int32 googleServices = 8; optional string device = 9; optional int32 sdkVersion = 10; optional string model = 11; optional string manufacturer = 12; optional string buildProduct = 13; optional bool otaInstalled = 14; } message AndroidCheckinProto { optional AndroidBuildProto build = 1; optional int64 lastCheckinMsec = 2; repeated AndroidEventProto event = 3; repeated AndroidStatisticProto stat = 4; repeated string requestedGroup = 5; optional string cellOperator = 6; optional string simOperator = 7; optional string roaming = 8; optional int32 userNumber = 9; } message AndroidEventProto { optional string tag = 1; optional string value = 2; optional int64 timeMsec = 3; } message AndroidIntentProto { optional string action = 1; optional string dataUri = 2; optional string mimeType = 3; optional string javaClass = 4; repeated group Extra = 5 { optional string name = 6; optional string value = 7; } } message AndroidStatisticProto { optional string tag = 1; optional int32 count = 2; optional float sum = 3; } message ClientLibraryState { optional int32 corpus = 1; optional bytes serverToken = 2; optional int64 hashCodeSum = 3; optional int32 librarySize = 4; optional string libraryId = 5; } message AndroidDataUsageProto { optional int32 version = 1; optional int64 currentReportMsec = 2; repeated KeyToPackageNameMapping keyToPackageNameMapping = 3; repeated PayloadLevelAppStat payloadLevelAppStat = 4; repeated IpLayerNetworkStat ipLayerNetworkStat = 5; } message AndroidUsageStatsReport { optional int64 androidId = 1; optional int64 loggingId = 2; optional UsageStatsExtensionProto usageStats = 3; } message AppBucket { optional int64 bucketStartMsec = 1; optional int64 bucketDurationMsec = 2; repeated StatCounters statCounters = 3; optional int64 operationCount = 4; } message CounterData { optional int64 bytes = 1; optional int64 packets = 2; } message IpLayerAppStat { optional int32 packageKey = 1; optional int32 applicationTag = 2; repeated AppBucket ipLayerAppBucket = 3; } message IpLayerNetworkBucket { optional int64 bucketStartMsec = 1; optional int64 bucketDurationMsec = 2; repeated StatCounters statCounters = 3; optional int64 networkActiveDuration = 4; } message IpLayerNetworkStat { optional string networkDetails = 1; optional int32 type = 2; repeated IpLayerNetworkBucket ipLayerNetworkBucket = 3; repeated IpLayerAppStat ipLayerAppStat = 4; } message KeyToPackageNameMapping { optional int32 packageKey = 1; optional string uidName = 2; repeated PackageInfo sharedPackageList = 3; } message PackageInfo { optional string pkgName = 1; optional int32 versionCode = 2; } message PayloadLevelAppStat { optional int32 packageKey = 1; optional int32 applicationTag = 2; repeated AppBucket payloadLevelAppBucket = 3; } message StatCounters { optional int32 networkProto = 1; optional int32 direction = 2; optional CounterData counterData = 3; optional int32 fgBg = 4; } message UsageStatsExtensionProto { optional AndroidDataUsageProto dataUsage = 1; } message SearchCluster { optional string id = 1; optional string type = 2; optional int64 int1 = 3; optional int64 int2 = 4; optional string category = 5; repeated DocV2 doc = 11; }