New Upstream Release - golang-github-m3db-prometheus-client-model

Ready changes

Summary

Merged new upstream version: 0.2.1 (was: 0.1.0).

Resulting package

Built on 2022-12-14T13:44 (took 3m33s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases golang-github-m3db-prometheus-client-model-dev

Lintian Result

Diff

diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml
new file mode 100644
index 0000000..136d7d4
--- /dev/null
+++ b/.github/workflows/golangci-lint.yml
@@ -0,0 +1,30 @@
+name: golangci-lint
+on:
+  push:
+    paths:
+      - "go.sum"
+      - "go.mod"
+      - "**.go"
+      - "scripts/errcheck_excludes.txt"
+      - ".github/workflows/golangci-lint.yml"
+      - ".golangci.yml"
+  pull_request:
+
+jobs:
+  golangci:
+    name: lint
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v3
+      - name: install Go
+        uses: actions/setup-go@v2
+        with:
+          go-version: 1.18.x
+      - name: Install snmp_exporter/generator dependencies
+        run: sudo apt-get update && sudo apt-get -y install libsnmp-dev
+        if: github.repository == 'prometheus/snmp_exporter'
+      - name: Lint
+        uses: golangci/golangci-lint-action@v3.1.0
+        with:
+          version: v1.45.2
diff --git a/.gitignore b/.gitignore
index 2f7896d..9fbc864 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 target/
+tmp/
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..d325872
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,3 @@
+# Prometheus Community Code of Conduct
+
+Prometheus follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 40503ed..c074633 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,18 +1,10 @@
 # Contributing
 
-Prometheus uses GitHub to manage reviews of pull requests.
-
-* If you have a trivial fix or improvement, go ahead and create a pull request,
-  addressing (with `@...`) the maintainer of this repository (see
-  [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request.
-
-* If you plan to do something more involved, first discuss your ideas
-  on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers).
-  This will avoid unnecessary work and surely give you and us a good deal
-  of inspiration.
-
-* Relevant coding style guidelines are the [Go Code Review
-  Comments](https://code.google.com/p/go-wiki/wiki/CodeReviewComments)
-  and the _Formatting and style_ section of Peter Bourgon's [Go: Best
-  Practices for Production
-  Environments](http://peter.bourgon.org/go-in-production/#formatting-and-style).
+This repository is deprecated. It is only used for specific purposes by the
+[Go instrumentation library](https://github.com/prometheus/client_golang).
+
+Therefore, contributions to this repository are only expected to happen as
+required by changes in the instrumentation library.
+Please see 
+[CONTRIBUTING.md](https://github.com/prometheus/client_golang/blob/master/CONTRIBUTING.md) 
+of the latter for details.
diff --git a/MAINTAINERS.md b/MAINTAINERS.md
index 3ede55f..3fb44f5 100644
--- a/MAINTAINERS.md
+++ b/MAINTAINERS.md
@@ -1 +1 @@
-* Björn Rabenstein <beorn@soundcloud.com>
+* Björn Rabenstein <beorn@grafana.com> @beorn7
diff --git a/Makefile b/Makefile
index e147c69..cb9e041 100644
--- a/Makefile
+++ b/Makefile
@@ -11,52 +11,71 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-KEY_ID ?= _DEFINE_ME_
-
-all: cpp go java python ruby
-
-SUFFIXES:
-
-cpp: cpp/metrics.pb.cc cpp/metrics.pb.h
-
-cpp/metrics.pb.cc: metrics.proto
-	protoc $< --cpp_out=cpp/
-
-cpp/metrics.pb.h: metrics.proto
-	protoc $< --cpp_out=cpp/
-
-go: go/metrics.pb.go
-
-go/metrics.pb.go: metrics.proto
-	protoc $< --go_out=go/
-
-java: src/main/java/io/prometheus/client/Metrics.java pom.xml
-	mvn clean compile package
-
-src/main/java/io/prometheus/client/Metrics.java: metrics.proto
-	protoc $< --java_out=src/main/java
-
-python: python/prometheus/client/model/metrics_pb2.py
-
-python/prometheus/client/model/metrics_pb2.py: metrics.proto
-	mkdir -p python/prometheus/client/model
-	protoc $< --python_out=python/prometheus/client/model
-
-ruby:
-	$(MAKE) -C ruby build
+all:
+	$(MAKE) go
+	$(MAKE) build
+
+GO_FILE := go/metrics.pb.go
+PROTO_FILE := io/prometheus/client/metrics.proto
+
+# Need to be on a previous version that doesn't cause the updated WKT go_package values to be added.
+PROTOC_VERSION := 3.13.0
+# This has been around for a while.
+PROTOC_GEN_GO_VERSION := v1.3.5
+
+# There are no protobuf releases for Darwin ARM so for
+# now we always use the x86_64 release through Rosetta.
+UNAME_OS := $(shell uname -s)
+UNAME_ARCH := $(shell uname -m)
+ifeq ($(UNAME_OS),Darwin)
+PROTOC_OS := osx
+PROTOC_ARCH := x86_64
+endif
+ifeq ($(UNAME_OS),Linux)
+PROTOC_OS = linux
+PROTOC_ARCH := $(UNAME_ARCH)
+endif
+PROTOC := tmp/versions/protoc/$(PROTOC_VERSION)
+PROTOC_BIN := tmp/bin/protoc
+PROTOC_INCLUDE := tmp/include/google
+$(PROTOC):
+	@if ! command -v curl >/dev/null 2>/dev/null; then echo "error: curl must be installed"  >&2; exit 1; fi
+	@if ! command -v unzip >/dev/null 2>/dev/null; then echo "error: unzip must be installed"  >&2; exit 1; fi
+	@rm -f $(PROTOC_BIN)
+	@rm -rf $(PROTOC_INCLUDE)
+	@mkdir -p $(dir $(PROTOC_BIN)) $(dir $(PROTOC_INCLUDE))
+	$(eval PROTOC_TMP := $(shell mktemp -d))
+	cd $(PROTOC_TMP); curl -sSL https://github.com/protocolbuffers/protobuf/releases/download/v$(PROTOC_VERSION)/protoc-$(PROTOC_VERSION)-$(PROTOC_OS)-$(PROTOC_ARCH).zip -o protoc.zip
+	cd $(PROTOC_TMP); unzip protoc.zip && mv bin/protoc $(PWD)/$(PROTOC_BIN) && mv include/google $(PWD)/$(PROTOC_INCLUDE)
+	@rm -rf $(PROTOC_TMP)
+	@rm -rf $(dir $(PROTOC))
+	@mkdir -p $(dir $(PROTOC))
+	@touch $(PROTOC)
+
+PROTOC_GEN_GO := tmp/versions/protoc-gen-go/$(PROTOC_GEN_GO_VERSION)
+PROTOC_GEN_GO_BIN := tmp/bin/protoc-gen-go
+$(PROTOC_GEN_GO):
+	@rm -f $(PROTOC_GEN_GO_BIN)
+	@mkdir -p $(dir $(PROTOC_GEN_GO_BIN))
+	$(eval PROTOC_GEN_GO_TMP := $(shell mktemp -d))
+	cd $(PROTOC_GEN_GO_TMP); GOBIN=$(PWD)/$(dir $(PROTOC_GEN_GO_BIN)) go get github.com/golang/protobuf/protoc-gen-go@$(PROTOC_GEN_GO_VERSION)
+	@rm -rf $(PROTOC_GEN_GO_TMP)
+	@rm -rf $(dir $(PROTOC_GEN_GO))
+	@mkdir -p $(dir $(PROTOC_GEN_GO))
+	@touch $(PROTOC_GEN_GO)
+
+go: $(GO_FILE)
+
+$(GO_FILE): $(PROTO_FILE) $(PROTOC_GEN_GO) $(PROTOC)
+	@rm -rf $(dir $(GO_FILE)) tmp/go
+	@mkdir -p $(dir $(GO_FILE)) tmp/go
+	PATH=$(PWD)/tmp/bin:$$PATH protoc -I tmp/include -I . --go_out=paths=source_relative:tmp/go $(PROTO_FILE)
+	@mv tmp/go/$(patsubst %.proto,%.pb.go,$(PROTO_FILE)) $(GO_FILE)
+
+build: $(GO_FILE)
+	go build ./go
 
 clean:
-	-rm -rf cpp/*
-	-rm -rf go/*
-	-rm -rf java/*
-	-rm -rf python/*
-	-$(MAKE) -C ruby clean
-	-mvn clean
-
-maven-deploy-snapshot: java
-	mvn clean deploy -Dgpg.keyname=$(KEY_ID) -DperformRelease=true
-
-maven-deploy-release: java
-	mvn clean release:clean release:prepare release:perform -Dgpg.keyname=$(KEY_ID) -DperformRelease=true
+	-rm -rf go tmp
 
-.PHONY: all clean cpp go java maven-deploy-snapshot maven-deploy-release python ruby
+.PHONY: all clean go build
diff --git a/README.md b/README.md
index a710042..e100975 100644
--- a/README.md
+++ b/README.md
@@ -1,26 +1,34 @@
-# Background
-Under most circumstances, manually downloading this repository should never
-be required.
+# Deprecation note
 
-# Prerequisites
-# Base
-* [Google Protocol Buffers](https://developers.google.com/protocol-buffers)
+This repository used to contain the [protocol
+buffer](https://developers.google.com/protocol-buffers) code that defined both
+the data model and the exposition format of Prometheus metrics.
 
-## Java
-* [Apache Maven](http://maven.apache.org)
-* [Prometheus Maven Repository](https://github.com/prometheus/io.prometheus-maven-repository) checked out into ../io.prometheus-maven-repository
+Starting with v2.0.0, the [Prometheus
+server](https://github.com/prometheus/prometheus) does not ingest the
+protobuf-based exposition format anymore. Currently, all but one of the
+[official instrumentation
+libraries](https://prometheus.io/docs/instrumenting/clientlibs/) do not expose
+the protobuf-based exposition format. The [Go instrumentation
+library](https://github.com/prometheus/client_golang), however, has been built
+around the protobuf-based data model. As a byproduct thereof, it is still able
+to expose the protobuf-based exposition format. The Go instrumentation library
+is the only remaining repository within the [Prometheus GitHub
+org](https://github.com/prometheus) directly using the prometheus/client_model
+repository.
 
-## Go
-*  [Go](http://golang.org)
-*  [goprotobuf](https://code.google.com/p/goprotobuf)
+Therefore, formerly existing support for languages other than Go (namely C++,
+Java, Python, Ruby) has been removed from this repository. If you are a 3rd
+party user of those languages, you can go back to [commit
+14fe0d1](https://github.com/prometheus/client_model/commit/14fe0d1b01d4d5fc031dd4bec1823bd3ebbe8016)
+to keep using the old code, or you can consume
+[`metrics.proto`](https://github.com/prometheus/client_model/blob/master/metrics.proto)
+directly with your own protobuf tooling. Note, however, that changes of
+`metrics.proto` after [commit
+14fe0d1](https://github.com/prometheus/client_model/commit/14fe0d1b01d4d5fc031dd4bec1823bd3ebbe8016)
+are solely informed by requirements of the Go instrumentation library and will
+not take into account any requirements of other languages or stability concerns
+for the protobuf-based exposition format.
 
-## Ruby
-*  [Ruby](https://www.ruby-lang.org)
-*  [bundler](https://rubygems.org/gems/bundler)
-
-# Building
-    $ make
-
-# Getting Started
-  * The Go source code is periodically indexed: [Go Protocol Buffer Model](http://godoc.org/github.com/prometheus/client_model/go).
-  * All of the core developers are accessible via the [Prometheus Developers Mailinglist](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers).
+Check out the [OpenMetrics project](https://openmetrics.io/) for the future of
+the data model and exposition format used by Prometheus and others.
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..fed02d8
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,6 @@
+# Reporting a security issue
+
+The Prometheus security policy, including how to report vulnerabilities, can be
+found here:
+
+<https://prometheus.io/docs/operating/security/>
diff --git a/cpp/metrics.pb.cc b/cpp/metrics.pb.cc
deleted file mode 100644
index 1ff893b..0000000
--- a/cpp/metrics.pb.cc
+++ /dev/null
@@ -1,3380 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: metrics.proto
-
-#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
-#include "metrics.pb.h"
-
-#include <algorithm>
-
-#include <google/protobuf/stubs/common.h>
-#include <google/protobuf/stubs/once.h>
-#include <google/protobuf/io/coded_stream.h>
-#include <google/protobuf/wire_format_lite_inl.h>
-#include <google/protobuf/descriptor.h>
-#include <google/protobuf/generated_message_reflection.h>
-#include <google/protobuf/reflection_ops.h>
-#include <google/protobuf/wire_format.h>
-// @@protoc_insertion_point(includes)
-
-namespace io {
-namespace prometheus {
-namespace client {
-
-namespace {
-
-const ::google::protobuf::Descriptor* LabelPair_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  LabelPair_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Gauge_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Gauge_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Counter_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Counter_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Quantile_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Quantile_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Summary_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Summary_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Untyped_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Untyped_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Histogram_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Histogram_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Bucket_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Bucket_reflection_ = NULL;
-const ::google::protobuf::Descriptor* Metric_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  Metric_reflection_ = NULL;
-const ::google::protobuf::Descriptor* MetricFamily_descriptor_ = NULL;
-const ::google::protobuf::internal::GeneratedMessageReflection*
-  MetricFamily_reflection_ = NULL;
-const ::google::protobuf::EnumDescriptor* MetricType_descriptor_ = NULL;
-
-}  // namespace
-
-
-void protobuf_AssignDesc_metrics_2eproto() {
-  protobuf_AddDesc_metrics_2eproto();
-  const ::google::protobuf::FileDescriptor* file =
-    ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName(
-      "metrics.proto");
-  GOOGLE_CHECK(file != NULL);
-  LabelPair_descriptor_ = file->message_type(0);
-  static const int LabelPair_offsets_[2] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LabelPair, name_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LabelPair, value_),
-  };
-  LabelPair_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      LabelPair_descriptor_,
-      LabelPair::default_instance_,
-      LabelPair_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LabelPair, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LabelPair, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(LabelPair));
-  Gauge_descriptor_ = file->message_type(1);
-  static const int Gauge_offsets_[1] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Gauge, value_),
-  };
-  Gauge_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Gauge_descriptor_,
-      Gauge::default_instance_,
-      Gauge_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Gauge, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Gauge, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Gauge));
-  Counter_descriptor_ = file->message_type(2);
-  static const int Counter_offsets_[1] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Counter, value_),
-  };
-  Counter_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Counter_descriptor_,
-      Counter::default_instance_,
-      Counter_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Counter, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Counter, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Counter));
-  Quantile_descriptor_ = file->message_type(3);
-  static const int Quantile_offsets_[2] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Quantile, quantile_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Quantile, value_),
-  };
-  Quantile_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Quantile_descriptor_,
-      Quantile::default_instance_,
-      Quantile_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Quantile, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Quantile, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Quantile));
-  Summary_descriptor_ = file->message_type(4);
-  static const int Summary_offsets_[3] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, sample_count_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, sample_sum_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, quantile_),
-  };
-  Summary_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Summary_descriptor_,
-      Summary::default_instance_,
-      Summary_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Summary));
-  Untyped_descriptor_ = file->message_type(5);
-  static const int Untyped_offsets_[1] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Untyped, value_),
-  };
-  Untyped_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Untyped_descriptor_,
-      Untyped::default_instance_,
-      Untyped_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Untyped, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Untyped, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Untyped));
-  Histogram_descriptor_ = file->message_type(6);
-  static const int Histogram_offsets_[3] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, sample_count_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, sample_sum_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, bucket_),
-  };
-  Histogram_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Histogram_descriptor_,
-      Histogram::default_instance_,
-      Histogram_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Histogram));
-  Bucket_descriptor_ = file->message_type(7);
-  static const int Bucket_offsets_[2] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Bucket, cumulative_count_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Bucket, upper_bound_),
-  };
-  Bucket_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Bucket_descriptor_,
-      Bucket::default_instance_,
-      Bucket_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Bucket, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Bucket, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Bucket));
-  Metric_descriptor_ = file->message_type(8);
-  static const int Metric_offsets_[7] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, label_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, gauge_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, counter_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, summary_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, untyped_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, histogram_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, timestamp_ms_),
-  };
-  Metric_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      Metric_descriptor_,
-      Metric::default_instance_,
-      Metric_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(Metric));
-  MetricFamily_descriptor_ = file->message_type(9);
-  static const int MetricFamily_offsets_[4] = {
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, name_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, help_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, type_),
-    GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, metric_),
-  };
-  MetricFamily_reflection_ =
-    new ::google::protobuf::internal::GeneratedMessageReflection(
-      MetricFamily_descriptor_,
-      MetricFamily::default_instance_,
-      MetricFamily_offsets_,
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, _has_bits_[0]),
-      GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, _unknown_fields_),
-      -1,
-      ::google::protobuf::DescriptorPool::generated_pool(),
-      ::google::protobuf::MessageFactory::generated_factory(),
-      sizeof(MetricFamily));
-  MetricType_descriptor_ = file->enum_type(0);
-}
-
-namespace {
-
-GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_);
-inline void protobuf_AssignDescriptorsOnce() {
-  ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_,
-                 &protobuf_AssignDesc_metrics_2eproto);
-}
-
-void protobuf_RegisterTypes(const ::std::string&) {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    LabelPair_descriptor_, &LabelPair::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Gauge_descriptor_, &Gauge::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Counter_descriptor_, &Counter::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Quantile_descriptor_, &Quantile::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Summary_descriptor_, &Summary::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Untyped_descriptor_, &Untyped::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Histogram_descriptor_, &Histogram::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Bucket_descriptor_, &Bucket::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    Metric_descriptor_, &Metric::default_instance());
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage(
-    MetricFamily_descriptor_, &MetricFamily::default_instance());
-}
-
-}  // namespace
-
-void protobuf_ShutdownFile_metrics_2eproto() {
-  delete LabelPair::default_instance_;
-  delete LabelPair_reflection_;
-  delete Gauge::default_instance_;
-  delete Gauge_reflection_;
-  delete Counter::default_instance_;
-  delete Counter_reflection_;
-  delete Quantile::default_instance_;
-  delete Quantile_reflection_;
-  delete Summary::default_instance_;
-  delete Summary_reflection_;
-  delete Untyped::default_instance_;
-  delete Untyped_reflection_;
-  delete Histogram::default_instance_;
-  delete Histogram_reflection_;
-  delete Bucket::default_instance_;
-  delete Bucket_reflection_;
-  delete Metric::default_instance_;
-  delete Metric_reflection_;
-  delete MetricFamily::default_instance_;
-  delete MetricFamily_reflection_;
-}
-
-void protobuf_AddDesc_metrics_2eproto() {
-  static bool already_here = false;
-  if (already_here) return;
-  already_here = true;
-  GOOGLE_PROTOBUF_VERIFY_VERSION;
-
-  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
-    "\n\rmetrics.proto\022\024io.prometheus.client\"(\n"
-    "\tLabelPair\022\014\n\004name\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\""
-    "\026\n\005Gauge\022\r\n\005value\030\001 \001(\001\"\030\n\007Counter\022\r\n\005va"
-    "lue\030\001 \001(\001\"+\n\010Quantile\022\020\n\010quantile\030\001 \001(\001\022"
-    "\r\n\005value\030\002 \001(\001\"e\n\007Summary\022\024\n\014sample_coun"
-    "t\030\001 \001(\004\022\022\n\nsample_sum\030\002 \001(\001\0220\n\010quantile\030"
-    "\003 \003(\0132\036.io.prometheus.client.Quantile\"\030\n"
-    "\007Untyped\022\r\n\005value\030\001 \001(\001\"c\n\tHistogram\022\024\n\014"
-    "sample_count\030\001 \001(\004\022\022\n\nsample_sum\030\002 \001(\001\022,"
-    "\n\006bucket\030\003 \003(\0132\034.io.prometheus.client.Bu"
-    "cket\"7\n\006Bucket\022\030\n\020cumulative_count\030\001 \001(\004"
-    "\022\023\n\013upper_bound\030\002 \001(\001\"\276\002\n\006Metric\022.\n\005labe"
-    "l\030\001 \003(\0132\037.io.prometheus.client.LabelPair"
-    "\022*\n\005gauge\030\002 \001(\0132\033.io.prometheus.client.G"
-    "auge\022.\n\007counter\030\003 \001(\0132\035.io.prometheus.cl"
-    "ient.Counter\022.\n\007summary\030\004 \001(\0132\035.io.prome"
-    "theus.client.Summary\022.\n\007untyped\030\005 \001(\0132\035."
-    "io.prometheus.client.Untyped\0222\n\thistogra"
-    "m\030\007 \001(\0132\037.io.prometheus.client.Histogram"
-    "\022\024\n\014timestamp_ms\030\006 \001(\003\"\210\001\n\014MetricFamily\022"
-    "\014\n\004name\030\001 \001(\t\022\014\n\004help\030\002 \001(\t\022.\n\004type\030\003 \001("
-    "\0162 .io.prometheus.client.MetricType\022,\n\006m"
-    "etric\030\004 \003(\0132\034.io.prometheus.client.Metri"
-    "c*M\n\nMetricType\022\013\n\007COUNTER\020\000\022\t\n\005GAUGE\020\001\022"
-    "\013\n\007SUMMARY\020\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004"
-    "B\026\n\024io.prometheus.client", 1024);
-  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
-    "metrics.proto", &protobuf_RegisterTypes);
-  LabelPair::default_instance_ = new LabelPair();
-  Gauge::default_instance_ = new Gauge();
-  Counter::default_instance_ = new Counter();
-  Quantile::default_instance_ = new Quantile();
-  Summary::default_instance_ = new Summary();
-  Untyped::default_instance_ = new Untyped();
-  Histogram::default_instance_ = new Histogram();
-  Bucket::default_instance_ = new Bucket();
-  Metric::default_instance_ = new Metric();
-  MetricFamily::default_instance_ = new MetricFamily();
-  LabelPair::default_instance_->InitAsDefaultInstance();
-  Gauge::default_instance_->InitAsDefaultInstance();
-  Counter::default_instance_->InitAsDefaultInstance();
-  Quantile::default_instance_->InitAsDefaultInstance();
-  Summary::default_instance_->InitAsDefaultInstance();
-  Untyped::default_instance_->InitAsDefaultInstance();
-  Histogram::default_instance_->InitAsDefaultInstance();
-  Bucket::default_instance_->InitAsDefaultInstance();
-  Metric::default_instance_->InitAsDefaultInstance();
-  MetricFamily::default_instance_->InitAsDefaultInstance();
-  ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_metrics_2eproto);
-}
-
-// Force AddDescriptors() to be called at static initialization time.
-struct StaticDescriptorInitializer_metrics_2eproto {
-  StaticDescriptorInitializer_metrics_2eproto() {
-    protobuf_AddDesc_metrics_2eproto();
-  }
-} static_descriptor_initializer_metrics_2eproto_;
-const ::google::protobuf::EnumDescriptor* MetricType_descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return MetricType_descriptor_;
-}
-bool MetricType_IsValid(int value) {
-  switch(value) {
-    case 0:
-    case 1:
-    case 2:
-    case 3:
-    case 4:
-      return true;
-    default:
-      return false;
-  }
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int LabelPair::kNameFieldNumber;
-const int LabelPair::kValueFieldNumber;
-#endif  // !_MSC_VER
-
-LabelPair::LabelPair()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.LabelPair)
-}
-
-void LabelPair::InitAsDefaultInstance() {
-}
-
-LabelPair::LabelPair(const LabelPair& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.LabelPair)
-}
-
-void LabelPair::SharedCtor() {
-  ::google::protobuf::internal::GetEmptyString();
-  _cached_size_ = 0;
-  name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-LabelPair::~LabelPair() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.LabelPair)
-  SharedDtor();
-}
-
-void LabelPair::SharedDtor() {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete name_;
-  }
-  if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete value_;
-  }
-  if (this != default_instance_) {
-  }
-}
-
-void LabelPair::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* LabelPair::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return LabelPair_descriptor_;
-}
-
-const LabelPair& LabelPair::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-LabelPair* LabelPair::default_instance_ = NULL;
-
-LabelPair* LabelPair::New() const {
-  return new LabelPair;
-}
-
-void LabelPair::Clear() {
-  if (_has_bits_[0 / 32] & 3) {
-    if (has_name()) {
-      if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-        name_->clear();
-      }
-    }
-    if (has_value()) {
-      if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-        value_->clear();
-      }
-    }
-  }
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool LabelPair::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.LabelPair)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional string name = 1;
-      case 1: {
-        if (tag == 10) {
-          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
-                input, this->mutable_name()));
-          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-            this->name().data(), this->name().length(),
-            ::google::protobuf::internal::WireFormat::PARSE,
-            "name");
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(18)) goto parse_value;
-        break;
-      }
-
-      // optional string value = 2;
-      case 2: {
-        if (tag == 18) {
-         parse_value:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
-                input, this->mutable_value()));
-          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-            this->value().data(), this->value().length(),
-            ::google::protobuf::internal::WireFormat::PARSE,
-            "value");
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.LabelPair)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.LabelPair)
-  return false;
-#undef DO_
-}
-
-void LabelPair::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.LabelPair)
-  // optional string name = 1;
-  if (has_name()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->name().data(), this->name().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "name");
-    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
-      1, this->name(), output);
-  }
-
-  // optional string value = 2;
-  if (has_value()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->value().data(), this->value().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "value");
-    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
-      2, this->value(), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.LabelPair)
-}
-
-::google::protobuf::uint8* LabelPair::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.LabelPair)
-  // optional string name = 1;
-  if (has_name()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->name().data(), this->name().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "name");
-    target =
-      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
-        1, this->name(), target);
-  }
-
-  // optional string value = 2;
-  if (has_value()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->value().data(), this->value().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "value");
-    target =
-      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
-        2, this->value(), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.LabelPair)
-  return target;
-}
-
-int LabelPair::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // optional string name = 1;
-    if (has_name()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::StringSize(
-          this->name());
-    }
-
-    // optional string value = 2;
-    if (has_value()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::StringSize(
-          this->value());
-    }
-
-  }
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void LabelPair::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const LabelPair* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const LabelPair*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void LabelPair::MergeFrom(const LabelPair& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_name()) {
-      set_name(from.name());
-    }
-    if (from.has_value()) {
-      set_value(from.value());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void LabelPair::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void LabelPair::CopyFrom(const LabelPair& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool LabelPair::IsInitialized() const {
-
-  return true;
-}
-
-void LabelPair::Swap(LabelPair* other) {
-  if (other != this) {
-    std::swap(name_, other->name_);
-    std::swap(value_, other->value_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata LabelPair::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = LabelPair_descriptor_;
-  metadata.reflection = LabelPair_reflection_;
-  return metadata;
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int Gauge::kValueFieldNumber;
-#endif  // !_MSC_VER
-
-Gauge::Gauge()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.Gauge)
-}
-
-void Gauge::InitAsDefaultInstance() {
-}
-
-Gauge::Gauge(const Gauge& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Gauge)
-}
-
-void Gauge::SharedCtor() {
-  _cached_size_ = 0;
-  value_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-Gauge::~Gauge() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.Gauge)
-  SharedDtor();
-}
-
-void Gauge::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void Gauge::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Gauge::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Gauge_descriptor_;
-}
-
-const Gauge& Gauge::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-Gauge* Gauge::default_instance_ = NULL;
-
-Gauge* Gauge::New() const {
-  return new Gauge;
-}
-
-void Gauge::Clear() {
-  value_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool Gauge::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.Gauge)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional double value = 1;
-      case 1: {
-        if (tag == 9) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &value_)));
-          set_has_value();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.Gauge)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.Gauge)
-  return false;
-#undef DO_
-}
-
-void Gauge::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.Gauge)
-  // optional double value = 1;
-  if (has_value()) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->value(), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.Gauge)
-}
-
-::google::protobuf::uint8* Gauge::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Gauge)
-  // optional double value = 1;
-  if (has_value()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->value(), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Gauge)
-  return target;
-}
-
-int Gauge::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // optional double value = 1;
-    if (has_value()) {
-      total_size += 1 + 8;
-    }
-
-  }
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Gauge::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const Gauge* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const Gauge*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void Gauge::MergeFrom(const Gauge& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_value()) {
-      set_value(from.value());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void Gauge::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Gauge::CopyFrom(const Gauge& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Gauge::IsInitialized() const {
-
-  return true;
-}
-
-void Gauge::Swap(Gauge* other) {
-  if (other != this) {
-    std::swap(value_, other->value_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata Gauge::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Gauge_descriptor_;
-  metadata.reflection = Gauge_reflection_;
-  return metadata;
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int Counter::kValueFieldNumber;
-#endif  // !_MSC_VER
-
-Counter::Counter()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.Counter)
-}
-
-void Counter::InitAsDefaultInstance() {
-}
-
-Counter::Counter(const Counter& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Counter)
-}
-
-void Counter::SharedCtor() {
-  _cached_size_ = 0;
-  value_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-Counter::~Counter() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.Counter)
-  SharedDtor();
-}
-
-void Counter::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void Counter::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Counter::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Counter_descriptor_;
-}
-
-const Counter& Counter::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-Counter* Counter::default_instance_ = NULL;
-
-Counter* Counter::New() const {
-  return new Counter;
-}
-
-void Counter::Clear() {
-  value_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool Counter::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.Counter)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional double value = 1;
-      case 1: {
-        if (tag == 9) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &value_)));
-          set_has_value();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.Counter)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.Counter)
-  return false;
-#undef DO_
-}
-
-void Counter::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.Counter)
-  // optional double value = 1;
-  if (has_value()) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->value(), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.Counter)
-}
-
-::google::protobuf::uint8* Counter::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Counter)
-  // optional double value = 1;
-  if (has_value()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->value(), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Counter)
-  return target;
-}
-
-int Counter::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // optional double value = 1;
-    if (has_value()) {
-      total_size += 1 + 8;
-    }
-
-  }
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Counter::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const Counter* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const Counter*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void Counter::MergeFrom(const Counter& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_value()) {
-      set_value(from.value());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void Counter::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Counter::CopyFrom(const Counter& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Counter::IsInitialized() const {
-
-  return true;
-}
-
-void Counter::Swap(Counter* other) {
-  if (other != this) {
-    std::swap(value_, other->value_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata Counter::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Counter_descriptor_;
-  metadata.reflection = Counter_reflection_;
-  return metadata;
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int Quantile::kQuantileFieldNumber;
-const int Quantile::kValueFieldNumber;
-#endif  // !_MSC_VER
-
-Quantile::Quantile()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.Quantile)
-}
-
-void Quantile::InitAsDefaultInstance() {
-}
-
-Quantile::Quantile(const Quantile& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Quantile)
-}
-
-void Quantile::SharedCtor() {
-  _cached_size_ = 0;
-  quantile_ = 0;
-  value_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-Quantile::~Quantile() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.Quantile)
-  SharedDtor();
-}
-
-void Quantile::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void Quantile::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Quantile::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Quantile_descriptor_;
-}
-
-const Quantile& Quantile::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-Quantile* Quantile::default_instance_ = NULL;
-
-Quantile* Quantile::New() const {
-  return new Quantile;
-}
-
-void Quantile::Clear() {
-#define OFFSET_OF_FIELD_(f) (reinterpret_cast<char*>(      \
-  &reinterpret_cast<Quantile*>(16)->f) - \
-   reinterpret_cast<char*>(16))
-
-#define ZR_(first, last) do {                              \
-    size_t f = OFFSET_OF_FIELD_(first);                    \
-    size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last);  \
-    ::memset(&first, 0, n);                                \
-  } while (0)
-
-  ZR_(quantile_, value_);
-
-#undef OFFSET_OF_FIELD_
-#undef ZR_
-
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool Quantile::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.Quantile)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional double quantile = 1;
-      case 1: {
-        if (tag == 9) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &quantile_)));
-          set_has_quantile();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(17)) goto parse_value;
-        break;
-      }
-
-      // optional double value = 2;
-      case 2: {
-        if (tag == 17) {
-         parse_value:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &value_)));
-          set_has_value();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.Quantile)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.Quantile)
-  return false;
-#undef DO_
-}
-
-void Quantile::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.Quantile)
-  // optional double quantile = 1;
-  if (has_quantile()) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->quantile(), output);
-  }
-
-  // optional double value = 2;
-  if (has_value()) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->value(), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.Quantile)
-}
-
-::google::protobuf::uint8* Quantile::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Quantile)
-  // optional double quantile = 1;
-  if (has_quantile()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->quantile(), target);
-  }
-
-  // optional double value = 2;
-  if (has_value()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->value(), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Quantile)
-  return target;
-}
-
-int Quantile::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // optional double quantile = 1;
-    if (has_quantile()) {
-      total_size += 1 + 8;
-    }
-
-    // optional double value = 2;
-    if (has_value()) {
-      total_size += 1 + 8;
-    }
-
-  }
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Quantile::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const Quantile* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const Quantile*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void Quantile::MergeFrom(const Quantile& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_quantile()) {
-      set_quantile(from.quantile());
-    }
-    if (from.has_value()) {
-      set_value(from.value());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void Quantile::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Quantile::CopyFrom(const Quantile& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Quantile::IsInitialized() const {
-
-  return true;
-}
-
-void Quantile::Swap(Quantile* other) {
-  if (other != this) {
-    std::swap(quantile_, other->quantile_);
-    std::swap(value_, other->value_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata Quantile::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Quantile_descriptor_;
-  metadata.reflection = Quantile_reflection_;
-  return metadata;
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int Summary::kSampleCountFieldNumber;
-const int Summary::kSampleSumFieldNumber;
-const int Summary::kQuantileFieldNumber;
-#endif  // !_MSC_VER
-
-Summary::Summary()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.Summary)
-}
-
-void Summary::InitAsDefaultInstance() {
-}
-
-Summary::Summary(const Summary& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Summary)
-}
-
-void Summary::SharedCtor() {
-  _cached_size_ = 0;
-  sample_count_ = GOOGLE_ULONGLONG(0);
-  sample_sum_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-Summary::~Summary() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.Summary)
-  SharedDtor();
-}
-
-void Summary::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void Summary::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Summary::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Summary_descriptor_;
-}
-
-const Summary& Summary::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-Summary* Summary::default_instance_ = NULL;
-
-Summary* Summary::New() const {
-  return new Summary;
-}
-
-void Summary::Clear() {
-#define OFFSET_OF_FIELD_(f) (reinterpret_cast<char*>(      \
-  &reinterpret_cast<Summary*>(16)->f) - \
-   reinterpret_cast<char*>(16))
-
-#define ZR_(first, last) do {                              \
-    size_t f = OFFSET_OF_FIELD_(first);                    \
-    size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last);  \
-    ::memset(&first, 0, n);                                \
-  } while (0)
-
-  ZR_(sample_count_, sample_sum_);
-
-#undef OFFSET_OF_FIELD_
-#undef ZR_
-
-  quantile_.Clear();
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool Summary::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.Summary)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional uint64 sample_count = 1;
-      case 1: {
-        if (tag == 8) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
-                 input, &sample_count_)));
-          set_has_sample_count();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(17)) goto parse_sample_sum;
-        break;
-      }
-
-      // optional double sample_sum = 2;
-      case 2: {
-        if (tag == 17) {
-         parse_sample_sum:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &sample_sum_)));
-          set_has_sample_sum();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(26)) goto parse_quantile;
-        break;
-      }
-
-      // repeated .io.prometheus.client.Quantile quantile = 3;
-      case 3: {
-        if (tag == 26) {
-         parse_quantile:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-                input, add_quantile()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(26)) goto parse_quantile;
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.Summary)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.Summary)
-  return false;
-#undef DO_
-}
-
-void Summary::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.Summary)
-  // optional uint64 sample_count = 1;
-  if (has_sample_count()) {
-    ::google::protobuf::internal::WireFormatLite::WriteUInt64(1, this->sample_count(), output);
-  }
-
-  // optional double sample_sum = 2;
-  if (has_sample_sum()) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->sample_sum(), output);
-  }
-
-  // repeated .io.prometheus.client.Quantile quantile = 3;
-  for (int i = 0; i < this->quantile_size(); i++) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      3, this->quantile(i), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.Summary)
-}
-
-::google::protobuf::uint8* Summary::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Summary)
-  // optional uint64 sample_count = 1;
-  if (has_sample_count()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(1, this->sample_count(), target);
-  }
-
-  // optional double sample_sum = 2;
-  if (has_sample_sum()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->sample_sum(), target);
-  }
-
-  // repeated .io.prometheus.client.Quantile quantile = 3;
-  for (int i = 0; i < this->quantile_size(); i++) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteMessageNoVirtualToArray(
-        3, this->quantile(i), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Summary)
-  return target;
-}
-
-int Summary::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // optional uint64 sample_count = 1;
-    if (has_sample_count()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::UInt64Size(
-          this->sample_count());
-    }
-
-    // optional double sample_sum = 2;
-    if (has_sample_sum()) {
-      total_size += 1 + 8;
-    }
-
-  }
-  // repeated .io.prometheus.client.Quantile quantile = 3;
-  total_size += 1 * this->quantile_size();
-  for (int i = 0; i < this->quantile_size(); i++) {
-    total_size +=
-      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-        this->quantile(i));
-  }
-
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Summary::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const Summary* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const Summary*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void Summary::MergeFrom(const Summary& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  quantile_.MergeFrom(from.quantile_);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_sample_count()) {
-      set_sample_count(from.sample_count());
-    }
-    if (from.has_sample_sum()) {
-      set_sample_sum(from.sample_sum());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void Summary::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Summary::CopyFrom(const Summary& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Summary::IsInitialized() const {
-
-  return true;
-}
-
-void Summary::Swap(Summary* other) {
-  if (other != this) {
-    std::swap(sample_count_, other->sample_count_);
-    std::swap(sample_sum_, other->sample_sum_);
-    quantile_.Swap(&other->quantile_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata Summary::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Summary_descriptor_;
-  metadata.reflection = Summary_reflection_;
-  return metadata;
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int Untyped::kValueFieldNumber;
-#endif  // !_MSC_VER
-
-Untyped::Untyped()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.Untyped)
-}
-
-void Untyped::InitAsDefaultInstance() {
-}
-
-Untyped::Untyped(const Untyped& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Untyped)
-}
-
-void Untyped::SharedCtor() {
-  _cached_size_ = 0;
-  value_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-Untyped::~Untyped() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.Untyped)
-  SharedDtor();
-}
-
-void Untyped::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void Untyped::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Untyped::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Untyped_descriptor_;
-}
-
-const Untyped& Untyped::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-Untyped* Untyped::default_instance_ = NULL;
-
-Untyped* Untyped::New() const {
-  return new Untyped;
-}
-
-void Untyped::Clear() {
-  value_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool Untyped::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.Untyped)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional double value = 1;
-      case 1: {
-        if (tag == 9) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &value_)));
-          set_has_value();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.Untyped)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.Untyped)
-  return false;
-#undef DO_
-}
-
-void Untyped::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.Untyped)
-  // optional double value = 1;
-  if (has_value()) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->value(), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.Untyped)
-}
-
-::google::protobuf::uint8* Untyped::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Untyped)
-  // optional double value = 1;
-  if (has_value()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->value(), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Untyped)
-  return target;
-}
-
-int Untyped::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // optional double value = 1;
-    if (has_value()) {
-      total_size += 1 + 8;
-    }
-
-  }
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Untyped::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const Untyped* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const Untyped*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void Untyped::MergeFrom(const Untyped& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_value()) {
-      set_value(from.value());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void Untyped::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Untyped::CopyFrom(const Untyped& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Untyped::IsInitialized() const {
-
-  return true;
-}
-
-void Untyped::Swap(Untyped* other) {
-  if (other != this) {
-    std::swap(value_, other->value_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata Untyped::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Untyped_descriptor_;
-  metadata.reflection = Untyped_reflection_;
-  return metadata;
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int Histogram::kSampleCountFieldNumber;
-const int Histogram::kSampleSumFieldNumber;
-const int Histogram::kBucketFieldNumber;
-#endif  // !_MSC_VER
-
-Histogram::Histogram()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.Histogram)
-}
-
-void Histogram::InitAsDefaultInstance() {
-}
-
-Histogram::Histogram(const Histogram& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Histogram)
-}
-
-void Histogram::SharedCtor() {
-  _cached_size_ = 0;
-  sample_count_ = GOOGLE_ULONGLONG(0);
-  sample_sum_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-Histogram::~Histogram() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.Histogram)
-  SharedDtor();
-}
-
-void Histogram::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void Histogram::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Histogram::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Histogram_descriptor_;
-}
-
-const Histogram& Histogram::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-Histogram* Histogram::default_instance_ = NULL;
-
-Histogram* Histogram::New() const {
-  return new Histogram;
-}
-
-void Histogram::Clear() {
-#define OFFSET_OF_FIELD_(f) (reinterpret_cast<char*>(      \
-  &reinterpret_cast<Histogram*>(16)->f) - \
-   reinterpret_cast<char*>(16))
-
-#define ZR_(first, last) do {                              \
-    size_t f = OFFSET_OF_FIELD_(first);                    \
-    size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last);  \
-    ::memset(&first, 0, n);                                \
-  } while (0)
-
-  ZR_(sample_count_, sample_sum_);
-
-#undef OFFSET_OF_FIELD_
-#undef ZR_
-
-  bucket_.Clear();
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool Histogram::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.Histogram)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional uint64 sample_count = 1;
-      case 1: {
-        if (tag == 8) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
-                 input, &sample_count_)));
-          set_has_sample_count();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(17)) goto parse_sample_sum;
-        break;
-      }
-
-      // optional double sample_sum = 2;
-      case 2: {
-        if (tag == 17) {
-         parse_sample_sum:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &sample_sum_)));
-          set_has_sample_sum();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(26)) goto parse_bucket;
-        break;
-      }
-
-      // repeated .io.prometheus.client.Bucket bucket = 3;
-      case 3: {
-        if (tag == 26) {
-         parse_bucket:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-                input, add_bucket()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(26)) goto parse_bucket;
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.Histogram)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.Histogram)
-  return false;
-#undef DO_
-}
-
-void Histogram::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.Histogram)
-  // optional uint64 sample_count = 1;
-  if (has_sample_count()) {
-    ::google::protobuf::internal::WireFormatLite::WriteUInt64(1, this->sample_count(), output);
-  }
-
-  // optional double sample_sum = 2;
-  if (has_sample_sum()) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->sample_sum(), output);
-  }
-
-  // repeated .io.prometheus.client.Bucket bucket = 3;
-  for (int i = 0; i < this->bucket_size(); i++) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      3, this->bucket(i), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.Histogram)
-}
-
-::google::protobuf::uint8* Histogram::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Histogram)
-  // optional uint64 sample_count = 1;
-  if (has_sample_count()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(1, this->sample_count(), target);
-  }
-
-  // optional double sample_sum = 2;
-  if (has_sample_sum()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->sample_sum(), target);
-  }
-
-  // repeated .io.prometheus.client.Bucket bucket = 3;
-  for (int i = 0; i < this->bucket_size(); i++) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteMessageNoVirtualToArray(
-        3, this->bucket(i), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Histogram)
-  return target;
-}
-
-int Histogram::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // optional uint64 sample_count = 1;
-    if (has_sample_count()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::UInt64Size(
-          this->sample_count());
-    }
-
-    // optional double sample_sum = 2;
-    if (has_sample_sum()) {
-      total_size += 1 + 8;
-    }
-
-  }
-  // repeated .io.prometheus.client.Bucket bucket = 3;
-  total_size += 1 * this->bucket_size();
-  for (int i = 0; i < this->bucket_size(); i++) {
-    total_size +=
-      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-        this->bucket(i));
-  }
-
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Histogram::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const Histogram* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const Histogram*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void Histogram::MergeFrom(const Histogram& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  bucket_.MergeFrom(from.bucket_);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_sample_count()) {
-      set_sample_count(from.sample_count());
-    }
-    if (from.has_sample_sum()) {
-      set_sample_sum(from.sample_sum());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void Histogram::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Histogram::CopyFrom(const Histogram& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Histogram::IsInitialized() const {
-
-  return true;
-}
-
-void Histogram::Swap(Histogram* other) {
-  if (other != this) {
-    std::swap(sample_count_, other->sample_count_);
-    std::swap(sample_sum_, other->sample_sum_);
-    bucket_.Swap(&other->bucket_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata Histogram::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Histogram_descriptor_;
-  metadata.reflection = Histogram_reflection_;
-  return metadata;
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int Bucket::kCumulativeCountFieldNumber;
-const int Bucket::kUpperBoundFieldNumber;
-#endif  // !_MSC_VER
-
-Bucket::Bucket()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.Bucket)
-}
-
-void Bucket::InitAsDefaultInstance() {
-}
-
-Bucket::Bucket(const Bucket& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Bucket)
-}
-
-void Bucket::SharedCtor() {
-  _cached_size_ = 0;
-  cumulative_count_ = GOOGLE_ULONGLONG(0);
-  upper_bound_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-Bucket::~Bucket() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.Bucket)
-  SharedDtor();
-}
-
-void Bucket::SharedDtor() {
-  if (this != default_instance_) {
-  }
-}
-
-void Bucket::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Bucket::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Bucket_descriptor_;
-}
-
-const Bucket& Bucket::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-Bucket* Bucket::default_instance_ = NULL;
-
-Bucket* Bucket::New() const {
-  return new Bucket;
-}
-
-void Bucket::Clear() {
-#define OFFSET_OF_FIELD_(f) (reinterpret_cast<char*>(      \
-  &reinterpret_cast<Bucket*>(16)->f) - \
-   reinterpret_cast<char*>(16))
-
-#define ZR_(first, last) do {                              \
-    size_t f = OFFSET_OF_FIELD_(first);                    \
-    size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last);  \
-    ::memset(&first, 0, n);                                \
-  } while (0)
-
-  ZR_(cumulative_count_, upper_bound_);
-
-#undef OFFSET_OF_FIELD_
-#undef ZR_
-
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool Bucket::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.Bucket)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional uint64 cumulative_count = 1;
-      case 1: {
-        if (tag == 8) {
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
-                 input, &cumulative_count_)));
-          set_has_cumulative_count();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(17)) goto parse_upper_bound;
-        break;
-      }
-
-      // optional double upper_bound = 2;
-      case 2: {
-        if (tag == 17) {
-         parse_upper_bound:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
-                 input, &upper_bound_)));
-          set_has_upper_bound();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.Bucket)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.Bucket)
-  return false;
-#undef DO_
-}
-
-void Bucket::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.Bucket)
-  // optional uint64 cumulative_count = 1;
-  if (has_cumulative_count()) {
-    ::google::protobuf::internal::WireFormatLite::WriteUInt64(1, this->cumulative_count(), output);
-  }
-
-  // optional double upper_bound = 2;
-  if (has_upper_bound()) {
-    ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->upper_bound(), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.Bucket)
-}
-
-::google::protobuf::uint8* Bucket::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Bucket)
-  // optional uint64 cumulative_count = 1;
-  if (has_cumulative_count()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(1, this->cumulative_count(), target);
-  }
-
-  // optional double upper_bound = 2;
-  if (has_upper_bound()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->upper_bound(), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Bucket)
-  return target;
-}
-
-int Bucket::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // optional uint64 cumulative_count = 1;
-    if (has_cumulative_count()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::UInt64Size(
-          this->cumulative_count());
-    }
-
-    // optional double upper_bound = 2;
-    if (has_upper_bound()) {
-      total_size += 1 + 8;
-    }
-
-  }
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Bucket::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const Bucket* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const Bucket*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void Bucket::MergeFrom(const Bucket& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_cumulative_count()) {
-      set_cumulative_count(from.cumulative_count());
-    }
-    if (from.has_upper_bound()) {
-      set_upper_bound(from.upper_bound());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void Bucket::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Bucket::CopyFrom(const Bucket& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Bucket::IsInitialized() const {
-
-  return true;
-}
-
-void Bucket::Swap(Bucket* other) {
-  if (other != this) {
-    std::swap(cumulative_count_, other->cumulative_count_);
-    std::swap(upper_bound_, other->upper_bound_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata Bucket::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Bucket_descriptor_;
-  metadata.reflection = Bucket_reflection_;
-  return metadata;
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int Metric::kLabelFieldNumber;
-const int Metric::kGaugeFieldNumber;
-const int Metric::kCounterFieldNumber;
-const int Metric::kSummaryFieldNumber;
-const int Metric::kUntypedFieldNumber;
-const int Metric::kHistogramFieldNumber;
-const int Metric::kTimestampMsFieldNumber;
-#endif  // !_MSC_VER
-
-Metric::Metric()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.Metric)
-}
-
-void Metric::InitAsDefaultInstance() {
-  gauge_ = const_cast< ::io::prometheus::client::Gauge*>(&::io::prometheus::client::Gauge::default_instance());
-  counter_ = const_cast< ::io::prometheus::client::Counter*>(&::io::prometheus::client::Counter::default_instance());
-  summary_ = const_cast< ::io::prometheus::client::Summary*>(&::io::prometheus::client::Summary::default_instance());
-  untyped_ = const_cast< ::io::prometheus::client::Untyped*>(&::io::prometheus::client::Untyped::default_instance());
-  histogram_ = const_cast< ::io::prometheus::client::Histogram*>(&::io::prometheus::client::Histogram::default_instance());
-}
-
-Metric::Metric(const Metric& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Metric)
-}
-
-void Metric::SharedCtor() {
-  _cached_size_ = 0;
-  gauge_ = NULL;
-  counter_ = NULL;
-  summary_ = NULL;
-  untyped_ = NULL;
-  histogram_ = NULL;
-  timestamp_ms_ = GOOGLE_LONGLONG(0);
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-Metric::~Metric() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.Metric)
-  SharedDtor();
-}
-
-void Metric::SharedDtor() {
-  if (this != default_instance_) {
-    delete gauge_;
-    delete counter_;
-    delete summary_;
-    delete untyped_;
-    delete histogram_;
-  }
-}
-
-void Metric::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* Metric::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return Metric_descriptor_;
-}
-
-const Metric& Metric::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-Metric* Metric::default_instance_ = NULL;
-
-Metric* Metric::New() const {
-  return new Metric;
-}
-
-void Metric::Clear() {
-  if (_has_bits_[0 / 32] & 126) {
-    if (has_gauge()) {
-      if (gauge_ != NULL) gauge_->::io::prometheus::client::Gauge::Clear();
-    }
-    if (has_counter()) {
-      if (counter_ != NULL) counter_->::io::prometheus::client::Counter::Clear();
-    }
-    if (has_summary()) {
-      if (summary_ != NULL) summary_->::io::prometheus::client::Summary::Clear();
-    }
-    if (has_untyped()) {
-      if (untyped_ != NULL) untyped_->::io::prometheus::client::Untyped::Clear();
-    }
-    if (has_histogram()) {
-      if (histogram_ != NULL) histogram_->::io::prometheus::client::Histogram::Clear();
-    }
-    timestamp_ms_ = GOOGLE_LONGLONG(0);
-  }
-  label_.Clear();
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool Metric::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.Metric)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // repeated .io.prometheus.client.LabelPair label = 1;
-      case 1: {
-        if (tag == 10) {
-         parse_label:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-                input, add_label()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(10)) goto parse_label;
-        if (input->ExpectTag(18)) goto parse_gauge;
-        break;
-      }
-
-      // optional .io.prometheus.client.Gauge gauge = 2;
-      case 2: {
-        if (tag == 18) {
-         parse_gauge:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-               input, mutable_gauge()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(26)) goto parse_counter;
-        break;
-      }
-
-      // optional .io.prometheus.client.Counter counter = 3;
-      case 3: {
-        if (tag == 26) {
-         parse_counter:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-               input, mutable_counter()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(34)) goto parse_summary;
-        break;
-      }
-
-      // optional .io.prometheus.client.Summary summary = 4;
-      case 4: {
-        if (tag == 34) {
-         parse_summary:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-               input, mutable_summary()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(42)) goto parse_untyped;
-        break;
-      }
-
-      // optional .io.prometheus.client.Untyped untyped = 5;
-      case 5: {
-        if (tag == 42) {
-         parse_untyped:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-               input, mutable_untyped()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(48)) goto parse_timestamp_ms;
-        break;
-      }
-
-      // optional int64 timestamp_ms = 6;
-      case 6: {
-        if (tag == 48) {
-         parse_timestamp_ms:
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
-                 input, &timestamp_ms_)));
-          set_has_timestamp_ms();
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(58)) goto parse_histogram;
-        break;
-      }
-
-      // optional .io.prometheus.client.Histogram histogram = 7;
-      case 7: {
-        if (tag == 58) {
-         parse_histogram:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-               input, mutable_histogram()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.Metric)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.Metric)
-  return false;
-#undef DO_
-}
-
-void Metric::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.Metric)
-  // repeated .io.prometheus.client.LabelPair label = 1;
-  for (int i = 0; i < this->label_size(); i++) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      1, this->label(i), output);
-  }
-
-  // optional .io.prometheus.client.Gauge gauge = 2;
-  if (has_gauge()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      2, this->gauge(), output);
-  }
-
-  // optional .io.prometheus.client.Counter counter = 3;
-  if (has_counter()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      3, this->counter(), output);
-  }
-
-  // optional .io.prometheus.client.Summary summary = 4;
-  if (has_summary()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      4, this->summary(), output);
-  }
-
-  // optional .io.prometheus.client.Untyped untyped = 5;
-  if (has_untyped()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      5, this->untyped(), output);
-  }
-
-  // optional int64 timestamp_ms = 6;
-  if (has_timestamp_ms()) {
-    ::google::protobuf::internal::WireFormatLite::WriteInt64(6, this->timestamp_ms(), output);
-  }
-
-  // optional .io.prometheus.client.Histogram histogram = 7;
-  if (has_histogram()) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      7, this->histogram(), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.Metric)
-}
-
-::google::protobuf::uint8* Metric::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Metric)
-  // repeated .io.prometheus.client.LabelPair label = 1;
-  for (int i = 0; i < this->label_size(); i++) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteMessageNoVirtualToArray(
-        1, this->label(i), target);
-  }
-
-  // optional .io.prometheus.client.Gauge gauge = 2;
-  if (has_gauge()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteMessageNoVirtualToArray(
-        2, this->gauge(), target);
-  }
-
-  // optional .io.prometheus.client.Counter counter = 3;
-  if (has_counter()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteMessageNoVirtualToArray(
-        3, this->counter(), target);
-  }
-
-  // optional .io.prometheus.client.Summary summary = 4;
-  if (has_summary()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteMessageNoVirtualToArray(
-        4, this->summary(), target);
-  }
-
-  // optional .io.prometheus.client.Untyped untyped = 5;
-  if (has_untyped()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteMessageNoVirtualToArray(
-        5, this->untyped(), target);
-  }
-
-  // optional int64 timestamp_ms = 6;
-  if (has_timestamp_ms()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(6, this->timestamp_ms(), target);
-  }
-
-  // optional .io.prometheus.client.Histogram histogram = 7;
-  if (has_histogram()) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteMessageNoVirtualToArray(
-        7, this->histogram(), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Metric)
-  return target;
-}
-
-int Metric::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[1 / 32] & (0xffu << (1 % 32))) {
-    // optional .io.prometheus.client.Gauge gauge = 2;
-    if (has_gauge()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-          this->gauge());
-    }
-
-    // optional .io.prometheus.client.Counter counter = 3;
-    if (has_counter()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-          this->counter());
-    }
-
-    // optional .io.prometheus.client.Summary summary = 4;
-    if (has_summary()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-          this->summary());
-    }
-
-    // optional .io.prometheus.client.Untyped untyped = 5;
-    if (has_untyped()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-          this->untyped());
-    }
-
-    // optional .io.prometheus.client.Histogram histogram = 7;
-    if (has_histogram()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-          this->histogram());
-    }
-
-    // optional int64 timestamp_ms = 6;
-    if (has_timestamp_ms()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::Int64Size(
-          this->timestamp_ms());
-    }
-
-  }
-  // repeated .io.prometheus.client.LabelPair label = 1;
-  total_size += 1 * this->label_size();
-  for (int i = 0; i < this->label_size(); i++) {
-    total_size +=
-      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-        this->label(i));
-  }
-
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void Metric::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const Metric* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const Metric*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void Metric::MergeFrom(const Metric& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  label_.MergeFrom(from.label_);
-  if (from._has_bits_[1 / 32] & (0xffu << (1 % 32))) {
-    if (from.has_gauge()) {
-      mutable_gauge()->::io::prometheus::client::Gauge::MergeFrom(from.gauge());
-    }
-    if (from.has_counter()) {
-      mutable_counter()->::io::prometheus::client::Counter::MergeFrom(from.counter());
-    }
-    if (from.has_summary()) {
-      mutable_summary()->::io::prometheus::client::Summary::MergeFrom(from.summary());
-    }
-    if (from.has_untyped()) {
-      mutable_untyped()->::io::prometheus::client::Untyped::MergeFrom(from.untyped());
-    }
-    if (from.has_histogram()) {
-      mutable_histogram()->::io::prometheus::client::Histogram::MergeFrom(from.histogram());
-    }
-    if (from.has_timestamp_ms()) {
-      set_timestamp_ms(from.timestamp_ms());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void Metric::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void Metric::CopyFrom(const Metric& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool Metric::IsInitialized() const {
-
-  return true;
-}
-
-void Metric::Swap(Metric* other) {
-  if (other != this) {
-    label_.Swap(&other->label_);
-    std::swap(gauge_, other->gauge_);
-    std::swap(counter_, other->counter_);
-    std::swap(summary_, other->summary_);
-    std::swap(untyped_, other->untyped_);
-    std::swap(histogram_, other->histogram_);
-    std::swap(timestamp_ms_, other->timestamp_ms_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata Metric::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = Metric_descriptor_;
-  metadata.reflection = Metric_reflection_;
-  return metadata;
-}
-
-
-// ===================================================================
-
-#ifndef _MSC_VER
-const int MetricFamily::kNameFieldNumber;
-const int MetricFamily::kHelpFieldNumber;
-const int MetricFamily::kTypeFieldNumber;
-const int MetricFamily::kMetricFieldNumber;
-#endif  // !_MSC_VER
-
-MetricFamily::MetricFamily()
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  // @@protoc_insertion_point(constructor:io.prometheus.client.MetricFamily)
-}
-
-void MetricFamily::InitAsDefaultInstance() {
-}
-
-MetricFamily::MetricFamily(const MetricFamily& from)
-  : ::google::protobuf::Message() {
-  SharedCtor();
-  MergeFrom(from);
-  // @@protoc_insertion_point(copy_constructor:io.prometheus.client.MetricFamily)
-}
-
-void MetricFamily::SharedCtor() {
-  ::google::protobuf::internal::GetEmptyString();
-  _cached_size_ = 0;
-  name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  help_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  type_ = 0;
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-}
-
-MetricFamily::~MetricFamily() {
-  // @@protoc_insertion_point(destructor:io.prometheus.client.MetricFamily)
-  SharedDtor();
-}
-
-void MetricFamily::SharedDtor() {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete name_;
-  }
-  if (help_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete help_;
-  }
-  if (this != default_instance_) {
-  }
-}
-
-void MetricFamily::SetCachedSize(int size) const {
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-}
-const ::google::protobuf::Descriptor* MetricFamily::descriptor() {
-  protobuf_AssignDescriptorsOnce();
-  return MetricFamily_descriptor_;
-}
-
-const MetricFamily& MetricFamily::default_instance() {
-  if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto();
-  return *default_instance_;
-}
-
-MetricFamily* MetricFamily::default_instance_ = NULL;
-
-MetricFamily* MetricFamily::New() const {
-  return new MetricFamily;
-}
-
-void MetricFamily::Clear() {
-  if (_has_bits_[0 / 32] & 7) {
-    if (has_name()) {
-      if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-        name_->clear();
-      }
-    }
-    if (has_help()) {
-      if (help_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-        help_->clear();
-      }
-    }
-    type_ = 0;
-  }
-  metric_.Clear();
-  ::memset(_has_bits_, 0, sizeof(_has_bits_));
-  mutable_unknown_fields()->Clear();
-}
-
-bool MetricFamily::MergePartialFromCodedStream(
-    ::google::protobuf::io::CodedInputStream* input) {
-#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure
-  ::google::protobuf::uint32 tag;
-  // @@protoc_insertion_point(parse_start:io.prometheus.client.MetricFamily)
-  for (;;) {
-    ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127);
-    tag = p.first;
-    if (!p.second) goto handle_unusual;
-    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
-      // optional string name = 1;
-      case 1: {
-        if (tag == 10) {
-          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
-                input, this->mutable_name()));
-          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-            this->name().data(), this->name().length(),
-            ::google::protobuf::internal::WireFormat::PARSE,
-            "name");
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(18)) goto parse_help;
-        break;
-      }
-
-      // optional string help = 2;
-      case 2: {
-        if (tag == 18) {
-         parse_help:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
-                input, this->mutable_help()));
-          ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-            this->help().data(), this->help().length(),
-            ::google::protobuf::internal::WireFormat::PARSE,
-            "help");
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(24)) goto parse_type;
-        break;
-      }
-
-      // optional .io.prometheus.client.MetricType type = 3;
-      case 3: {
-        if (tag == 24) {
-         parse_type:
-          int value;
-          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
-                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
-                 input, &value)));
-          if (::io::prometheus::client::MetricType_IsValid(value)) {
-            set_type(static_cast< ::io::prometheus::client::MetricType >(value));
-          } else {
-            mutable_unknown_fields()->AddVarint(3, value);
-          }
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(34)) goto parse_metric;
-        break;
-      }
-
-      // repeated .io.prometheus.client.Metric metric = 4;
-      case 4: {
-        if (tag == 34) {
-         parse_metric:
-          DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
-                input, add_metric()));
-        } else {
-          goto handle_unusual;
-        }
-        if (input->ExpectTag(34)) goto parse_metric;
-        if (input->ExpectAtEnd()) goto success;
-        break;
-      }
-
-      default: {
-      handle_unusual:
-        if (tag == 0 ||
-            ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
-            ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
-          goto success;
-        }
-        DO_(::google::protobuf::internal::WireFormat::SkipField(
-              input, tag, mutable_unknown_fields()));
-        break;
-      }
-    }
-  }
-success:
-  // @@protoc_insertion_point(parse_success:io.prometheus.client.MetricFamily)
-  return true;
-failure:
-  // @@protoc_insertion_point(parse_failure:io.prometheus.client.MetricFamily)
-  return false;
-#undef DO_
-}
-
-void MetricFamily::SerializeWithCachedSizes(
-    ::google::protobuf::io::CodedOutputStream* output) const {
-  // @@protoc_insertion_point(serialize_start:io.prometheus.client.MetricFamily)
-  // optional string name = 1;
-  if (has_name()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->name().data(), this->name().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "name");
-    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
-      1, this->name(), output);
-  }
-
-  // optional string help = 2;
-  if (has_help()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->help().data(), this->help().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "help");
-    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
-      2, this->help(), output);
-  }
-
-  // optional .io.prometheus.client.MetricType type = 3;
-  if (has_type()) {
-    ::google::protobuf::internal::WireFormatLite::WriteEnum(
-      3, this->type(), output);
-  }
-
-  // repeated .io.prometheus.client.Metric metric = 4;
-  for (int i = 0; i < this->metric_size(); i++) {
-    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
-      4, this->metric(i), output);
-  }
-
-  if (!unknown_fields().empty()) {
-    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
-        unknown_fields(), output);
-  }
-  // @@protoc_insertion_point(serialize_end:io.prometheus.client.MetricFamily)
-}
-
-::google::protobuf::uint8* MetricFamily::SerializeWithCachedSizesToArray(
-    ::google::protobuf::uint8* target) const {
-  // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.MetricFamily)
-  // optional string name = 1;
-  if (has_name()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->name().data(), this->name().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "name");
-    target =
-      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
-        1, this->name(), target);
-  }
-
-  // optional string help = 2;
-  if (has_help()) {
-    ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(
-      this->help().data(), this->help().length(),
-      ::google::protobuf::internal::WireFormat::SERIALIZE,
-      "help");
-    target =
-      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
-        2, this->help(), target);
-  }
-
-  // optional .io.prometheus.client.MetricType type = 3;
-  if (has_type()) {
-    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
-      3, this->type(), target);
-  }
-
-  // repeated .io.prometheus.client.Metric metric = 4;
-  for (int i = 0; i < this->metric_size(); i++) {
-    target = ::google::protobuf::internal::WireFormatLite::
-      WriteMessageNoVirtualToArray(
-        4, this->metric(i), target);
-  }
-
-  if (!unknown_fields().empty()) {
-    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
-        unknown_fields(), target);
-  }
-  // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.MetricFamily)
-  return target;
-}
-
-int MetricFamily::ByteSize() const {
-  int total_size = 0;
-
-  if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    // optional string name = 1;
-    if (has_name()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::StringSize(
-          this->name());
-    }
-
-    // optional string help = 2;
-    if (has_help()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::StringSize(
-          this->help());
-    }
-
-    // optional .io.prometheus.client.MetricType type = 3;
-    if (has_type()) {
-      total_size += 1 +
-        ::google::protobuf::internal::WireFormatLite::EnumSize(this->type());
-    }
-
-  }
-  // repeated .io.prometheus.client.Metric metric = 4;
-  total_size += 1 * this->metric_size();
-  for (int i = 0; i < this->metric_size(); i++) {
-    total_size +=
-      ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
-        this->metric(i));
-  }
-
-  if (!unknown_fields().empty()) {
-    total_size +=
-      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
-        unknown_fields());
-  }
-  GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
-  _cached_size_ = total_size;
-  GOOGLE_SAFE_CONCURRENT_WRITES_END();
-  return total_size;
-}
-
-void MetricFamily::MergeFrom(const ::google::protobuf::Message& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  const MetricFamily* source =
-    ::google::protobuf::internal::dynamic_cast_if_available<const MetricFamily*>(
-      &from);
-  if (source == NULL) {
-    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
-  } else {
-    MergeFrom(*source);
-  }
-}
-
-void MetricFamily::MergeFrom(const MetricFamily& from) {
-  GOOGLE_CHECK_NE(&from, this);
-  metric_.MergeFrom(from.metric_);
-  if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
-    if (from.has_name()) {
-      set_name(from.name());
-    }
-    if (from.has_help()) {
-      set_help(from.help());
-    }
-    if (from.has_type()) {
-      set_type(from.type());
-    }
-  }
-  mutable_unknown_fields()->MergeFrom(from.unknown_fields());
-}
-
-void MetricFamily::CopyFrom(const ::google::protobuf::Message& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-void MetricFamily::CopyFrom(const MetricFamily& from) {
-  if (&from == this) return;
-  Clear();
-  MergeFrom(from);
-}
-
-bool MetricFamily::IsInitialized() const {
-
-  return true;
-}
-
-void MetricFamily::Swap(MetricFamily* other) {
-  if (other != this) {
-    std::swap(name_, other->name_);
-    std::swap(help_, other->help_);
-    std::swap(type_, other->type_);
-    metric_.Swap(&other->metric_);
-    std::swap(_has_bits_[0], other->_has_bits_[0]);
-    _unknown_fields_.Swap(&other->_unknown_fields_);
-    std::swap(_cached_size_, other->_cached_size_);
-  }
-}
-
-::google::protobuf::Metadata MetricFamily::GetMetadata() const {
-  protobuf_AssignDescriptorsOnce();
-  ::google::protobuf::Metadata metadata;
-  metadata.descriptor = MetricFamily_descriptor_;
-  metadata.reflection = MetricFamily_reflection_;
-  return metadata;
-}
-
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace client
-}  // namespace prometheus
-}  // namespace io
-
-// @@protoc_insertion_point(global_scope)
diff --git a/cpp/metrics.pb.h b/cpp/metrics.pb.h
deleted file mode 100644
index 206ba37..0000000
--- a/cpp/metrics.pb.h
+++ /dev/null
@@ -1,2072 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: metrics.proto
-
-#ifndef PROTOBUF_metrics_2eproto__INCLUDED
-#define PROTOBUF_metrics_2eproto__INCLUDED
-
-#include <string>
-
-#include <google/protobuf/stubs/common.h>
-
-#if GOOGLE_PROTOBUF_VERSION < 2006000
-#error This file was generated by a newer version of protoc which is
-#error incompatible with your Protocol Buffer headers.  Please update
-#error your headers.
-#endif
-#if 2006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION
-#error This file was generated by an older version of protoc which is
-#error incompatible with your Protocol Buffer headers.  Please
-#error regenerate this file with a newer version of protoc.
-#endif
-
-#include <google/protobuf/generated_message_util.h>
-#include <google/protobuf/message.h>
-#include <google/protobuf/repeated_field.h>
-#include <google/protobuf/extension_set.h>
-#include <google/protobuf/generated_enum_reflection.h>
-#include <google/protobuf/unknown_field_set.h>
-// @@protoc_insertion_point(includes)
-
-namespace io {
-namespace prometheus {
-namespace client {
-
-// Internal implementation detail -- do not call these.
-void  protobuf_AddDesc_metrics_2eproto();
-void protobuf_AssignDesc_metrics_2eproto();
-void protobuf_ShutdownFile_metrics_2eproto();
-
-class LabelPair;
-class Gauge;
-class Counter;
-class Quantile;
-class Summary;
-class Untyped;
-class Histogram;
-class Bucket;
-class Metric;
-class MetricFamily;
-
-enum MetricType {
-  COUNTER = 0,
-  GAUGE = 1,
-  SUMMARY = 2,
-  UNTYPED = 3,
-  HISTOGRAM = 4
-};
-bool MetricType_IsValid(int value);
-const MetricType MetricType_MIN = COUNTER;
-const MetricType MetricType_MAX = HISTOGRAM;
-const int MetricType_ARRAYSIZE = MetricType_MAX + 1;
-
-const ::google::protobuf::EnumDescriptor* MetricType_descriptor();
-inline const ::std::string& MetricType_Name(MetricType value) {
-  return ::google::protobuf::internal::NameOfEnum(
-    MetricType_descriptor(), value);
-}
-inline bool MetricType_Parse(
-    const ::std::string& name, MetricType* value) {
-  return ::google::protobuf::internal::ParseNamedEnum<MetricType>(
-    MetricType_descriptor(), name, value);
-}
-// ===================================================================
-
-class LabelPair : public ::google::protobuf::Message {
- public:
-  LabelPair();
-  virtual ~LabelPair();
-
-  LabelPair(const LabelPair& from);
-
-  inline LabelPair& operator=(const LabelPair& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const LabelPair& default_instance();
-
-  void Swap(LabelPair* other);
-
-  // implements Message ----------------------------------------------
-
-  LabelPair* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const LabelPair& from);
-  void MergeFrom(const LabelPair& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional string name = 1;
-  inline bool has_name() const;
-  inline void clear_name();
-  static const int kNameFieldNumber = 1;
-  inline const ::std::string& name() const;
-  inline void set_name(const ::std::string& value);
-  inline void set_name(const char* value);
-  inline void set_name(const char* value, size_t size);
-  inline ::std::string* mutable_name();
-  inline ::std::string* release_name();
-  inline void set_allocated_name(::std::string* name);
-
-  // optional string value = 2;
-  inline bool has_value() const;
-  inline void clear_value();
-  static const int kValueFieldNumber = 2;
-  inline const ::std::string& value() const;
-  inline void set_value(const ::std::string& value);
-  inline void set_value(const char* value);
-  inline void set_value(const char* value, size_t size);
-  inline ::std::string* mutable_value();
-  inline ::std::string* release_value();
-  inline void set_allocated_value(::std::string* value);
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair)
- private:
-  inline void set_has_name();
-  inline void clear_has_name();
-  inline void set_has_value();
-  inline void clear_has_value();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  ::std::string* name_;
-  ::std::string* value_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static LabelPair* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class Gauge : public ::google::protobuf::Message {
- public:
-  Gauge();
-  virtual ~Gauge();
-
-  Gauge(const Gauge& from);
-
-  inline Gauge& operator=(const Gauge& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Gauge& default_instance();
-
-  void Swap(Gauge* other);
-
-  // implements Message ----------------------------------------------
-
-  Gauge* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Gauge& from);
-  void MergeFrom(const Gauge& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional double value = 1;
-  inline bool has_value() const;
-  inline void clear_value();
-  static const int kValueFieldNumber = 1;
-  inline double value() const;
-  inline void set_value(double value);
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge)
- private:
-  inline void set_has_value();
-  inline void clear_has_value();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  double value_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static Gauge* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class Counter : public ::google::protobuf::Message {
- public:
-  Counter();
-  virtual ~Counter();
-
-  Counter(const Counter& from);
-
-  inline Counter& operator=(const Counter& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Counter& default_instance();
-
-  void Swap(Counter* other);
-
-  // implements Message ----------------------------------------------
-
-  Counter* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Counter& from);
-  void MergeFrom(const Counter& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional double value = 1;
-  inline bool has_value() const;
-  inline void clear_value();
-  static const int kValueFieldNumber = 1;
-  inline double value() const;
-  inline void set_value(double value);
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter)
- private:
-  inline void set_has_value();
-  inline void clear_has_value();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  double value_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static Counter* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class Quantile : public ::google::protobuf::Message {
- public:
-  Quantile();
-  virtual ~Quantile();
-
-  Quantile(const Quantile& from);
-
-  inline Quantile& operator=(const Quantile& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Quantile& default_instance();
-
-  void Swap(Quantile* other);
-
-  // implements Message ----------------------------------------------
-
-  Quantile* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Quantile& from);
-  void MergeFrom(const Quantile& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional double quantile = 1;
-  inline bool has_quantile() const;
-  inline void clear_quantile();
-  static const int kQuantileFieldNumber = 1;
-  inline double quantile() const;
-  inline void set_quantile(double value);
-
-  // optional double value = 2;
-  inline bool has_value() const;
-  inline void clear_value();
-  static const int kValueFieldNumber = 2;
-  inline double value() const;
-  inline void set_value(double value);
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile)
- private:
-  inline void set_has_quantile();
-  inline void clear_has_quantile();
-  inline void set_has_value();
-  inline void clear_has_value();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  double quantile_;
-  double value_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static Quantile* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class Summary : public ::google::protobuf::Message {
- public:
-  Summary();
-  virtual ~Summary();
-
-  Summary(const Summary& from);
-
-  inline Summary& operator=(const Summary& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Summary& default_instance();
-
-  void Swap(Summary* other);
-
-  // implements Message ----------------------------------------------
-
-  Summary* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Summary& from);
-  void MergeFrom(const Summary& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional uint64 sample_count = 1;
-  inline bool has_sample_count() const;
-  inline void clear_sample_count();
-  static const int kSampleCountFieldNumber = 1;
-  inline ::google::protobuf::uint64 sample_count() const;
-  inline void set_sample_count(::google::protobuf::uint64 value);
-
-  // optional double sample_sum = 2;
-  inline bool has_sample_sum() const;
-  inline void clear_sample_sum();
-  static const int kSampleSumFieldNumber = 2;
-  inline double sample_sum() const;
-  inline void set_sample_sum(double value);
-
-  // repeated .io.prometheus.client.Quantile quantile = 3;
-  inline int quantile_size() const;
-  inline void clear_quantile();
-  static const int kQuantileFieldNumber = 3;
-  inline const ::io::prometheus::client::Quantile& quantile(int index) const;
-  inline ::io::prometheus::client::Quantile* mutable_quantile(int index);
-  inline ::io::prometheus::client::Quantile* add_quantile();
-  inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile >&
-      quantile() const;
-  inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile >*
-      mutable_quantile();
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary)
- private:
-  inline void set_has_sample_count();
-  inline void clear_has_sample_count();
-  inline void set_has_sample_sum();
-  inline void clear_has_sample_sum();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  ::google::protobuf::uint64 sample_count_;
-  double sample_sum_;
-  ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile > quantile_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static Summary* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class Untyped : public ::google::protobuf::Message {
- public:
-  Untyped();
-  virtual ~Untyped();
-
-  Untyped(const Untyped& from);
-
-  inline Untyped& operator=(const Untyped& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Untyped& default_instance();
-
-  void Swap(Untyped* other);
-
-  // implements Message ----------------------------------------------
-
-  Untyped* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Untyped& from);
-  void MergeFrom(const Untyped& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional double value = 1;
-  inline bool has_value() const;
-  inline void clear_value();
-  static const int kValueFieldNumber = 1;
-  inline double value() const;
-  inline void set_value(double value);
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped)
- private:
-  inline void set_has_value();
-  inline void clear_has_value();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  double value_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static Untyped* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class Histogram : public ::google::protobuf::Message {
- public:
-  Histogram();
-  virtual ~Histogram();
-
-  Histogram(const Histogram& from);
-
-  inline Histogram& operator=(const Histogram& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Histogram& default_instance();
-
-  void Swap(Histogram* other);
-
-  // implements Message ----------------------------------------------
-
-  Histogram* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Histogram& from);
-  void MergeFrom(const Histogram& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional uint64 sample_count = 1;
-  inline bool has_sample_count() const;
-  inline void clear_sample_count();
-  static const int kSampleCountFieldNumber = 1;
-  inline ::google::protobuf::uint64 sample_count() const;
-  inline void set_sample_count(::google::protobuf::uint64 value);
-
-  // optional double sample_sum = 2;
-  inline bool has_sample_sum() const;
-  inline void clear_sample_sum();
-  static const int kSampleSumFieldNumber = 2;
-  inline double sample_sum() const;
-  inline void set_sample_sum(double value);
-
-  // repeated .io.prometheus.client.Bucket bucket = 3;
-  inline int bucket_size() const;
-  inline void clear_bucket();
-  static const int kBucketFieldNumber = 3;
-  inline const ::io::prometheus::client::Bucket& bucket(int index) const;
-  inline ::io::prometheus::client::Bucket* mutable_bucket(int index);
-  inline ::io::prometheus::client::Bucket* add_bucket();
-  inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket >&
-      bucket() const;
-  inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket >*
-      mutable_bucket();
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
- private:
-  inline void set_has_sample_count();
-  inline void clear_has_sample_count();
-  inline void set_has_sample_sum();
-  inline void clear_has_sample_sum();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  ::google::protobuf::uint64 sample_count_;
-  double sample_sum_;
-  ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket > bucket_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static Histogram* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class Bucket : public ::google::protobuf::Message {
- public:
-  Bucket();
-  virtual ~Bucket();
-
-  Bucket(const Bucket& from);
-
-  inline Bucket& operator=(const Bucket& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Bucket& default_instance();
-
-  void Swap(Bucket* other);
-
-  // implements Message ----------------------------------------------
-
-  Bucket* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Bucket& from);
-  void MergeFrom(const Bucket& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional uint64 cumulative_count = 1;
-  inline bool has_cumulative_count() const;
-  inline void clear_cumulative_count();
-  static const int kCumulativeCountFieldNumber = 1;
-  inline ::google::protobuf::uint64 cumulative_count() const;
-  inline void set_cumulative_count(::google::protobuf::uint64 value);
-
-  // optional double upper_bound = 2;
-  inline bool has_upper_bound() const;
-  inline void clear_upper_bound();
-  static const int kUpperBoundFieldNumber = 2;
-  inline double upper_bound() const;
-  inline void set_upper_bound(double value);
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
- private:
-  inline void set_has_cumulative_count();
-  inline void clear_has_cumulative_count();
-  inline void set_has_upper_bound();
-  inline void clear_has_upper_bound();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  ::google::protobuf::uint64 cumulative_count_;
-  double upper_bound_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static Bucket* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class Metric : public ::google::protobuf::Message {
- public:
-  Metric();
-  virtual ~Metric();
-
-  Metric(const Metric& from);
-
-  inline Metric& operator=(const Metric& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const Metric& default_instance();
-
-  void Swap(Metric* other);
-
-  // implements Message ----------------------------------------------
-
-  Metric* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const Metric& from);
-  void MergeFrom(const Metric& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // repeated .io.prometheus.client.LabelPair label = 1;
-  inline int label_size() const;
-  inline void clear_label();
-  static const int kLabelFieldNumber = 1;
-  inline const ::io::prometheus::client::LabelPair& label(int index) const;
-  inline ::io::prometheus::client::LabelPair* mutable_label(int index);
-  inline ::io::prometheus::client::LabelPair* add_label();
-  inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair >&
-      label() const;
-  inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair >*
-      mutable_label();
-
-  // optional .io.prometheus.client.Gauge gauge = 2;
-  inline bool has_gauge() const;
-  inline void clear_gauge();
-  static const int kGaugeFieldNumber = 2;
-  inline const ::io::prometheus::client::Gauge& gauge() const;
-  inline ::io::prometheus::client::Gauge* mutable_gauge();
-  inline ::io::prometheus::client::Gauge* release_gauge();
-  inline void set_allocated_gauge(::io::prometheus::client::Gauge* gauge);
-
-  // optional .io.prometheus.client.Counter counter = 3;
-  inline bool has_counter() const;
-  inline void clear_counter();
-  static const int kCounterFieldNumber = 3;
-  inline const ::io::prometheus::client::Counter& counter() const;
-  inline ::io::prometheus::client::Counter* mutable_counter();
-  inline ::io::prometheus::client::Counter* release_counter();
-  inline void set_allocated_counter(::io::prometheus::client::Counter* counter);
-
-  // optional .io.prometheus.client.Summary summary = 4;
-  inline bool has_summary() const;
-  inline void clear_summary();
-  static const int kSummaryFieldNumber = 4;
-  inline const ::io::prometheus::client::Summary& summary() const;
-  inline ::io::prometheus::client::Summary* mutable_summary();
-  inline ::io::prometheus::client::Summary* release_summary();
-  inline void set_allocated_summary(::io::prometheus::client::Summary* summary);
-
-  // optional .io.prometheus.client.Untyped untyped = 5;
-  inline bool has_untyped() const;
-  inline void clear_untyped();
-  static const int kUntypedFieldNumber = 5;
-  inline const ::io::prometheus::client::Untyped& untyped() const;
-  inline ::io::prometheus::client::Untyped* mutable_untyped();
-  inline ::io::prometheus::client::Untyped* release_untyped();
-  inline void set_allocated_untyped(::io::prometheus::client::Untyped* untyped);
-
-  // optional .io.prometheus.client.Histogram histogram = 7;
-  inline bool has_histogram() const;
-  inline void clear_histogram();
-  static const int kHistogramFieldNumber = 7;
-  inline const ::io::prometheus::client::Histogram& histogram() const;
-  inline ::io::prometheus::client::Histogram* mutable_histogram();
-  inline ::io::prometheus::client::Histogram* release_histogram();
-  inline void set_allocated_histogram(::io::prometheus::client::Histogram* histogram);
-
-  // optional int64 timestamp_ms = 6;
-  inline bool has_timestamp_ms() const;
-  inline void clear_timestamp_ms();
-  static const int kTimestampMsFieldNumber = 6;
-  inline ::google::protobuf::int64 timestamp_ms() const;
-  inline void set_timestamp_ms(::google::protobuf::int64 value);
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
- private:
-  inline void set_has_gauge();
-  inline void clear_has_gauge();
-  inline void set_has_counter();
-  inline void clear_has_counter();
-  inline void set_has_summary();
-  inline void clear_has_summary();
-  inline void set_has_untyped();
-  inline void clear_has_untyped();
-  inline void set_has_histogram();
-  inline void clear_has_histogram();
-  inline void set_has_timestamp_ms();
-  inline void clear_has_timestamp_ms();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair > label_;
-  ::io::prometheus::client::Gauge* gauge_;
-  ::io::prometheus::client::Counter* counter_;
-  ::io::prometheus::client::Summary* summary_;
-  ::io::prometheus::client::Untyped* untyped_;
-  ::io::prometheus::client::Histogram* histogram_;
-  ::google::protobuf::int64 timestamp_ms_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static Metric* default_instance_;
-};
-// -------------------------------------------------------------------
-
-class MetricFamily : public ::google::protobuf::Message {
- public:
-  MetricFamily();
-  virtual ~MetricFamily();
-
-  MetricFamily(const MetricFamily& from);
-
-  inline MetricFamily& operator=(const MetricFamily& from) {
-    CopyFrom(from);
-    return *this;
-  }
-
-  inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const {
-    return _unknown_fields_;
-  }
-
-  inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() {
-    return &_unknown_fields_;
-  }
-
-  static const ::google::protobuf::Descriptor* descriptor();
-  static const MetricFamily& default_instance();
-
-  void Swap(MetricFamily* other);
-
-  // implements Message ----------------------------------------------
-
-  MetricFamily* New() const;
-  void CopyFrom(const ::google::protobuf::Message& from);
-  void MergeFrom(const ::google::protobuf::Message& from);
-  void CopyFrom(const MetricFamily& from);
-  void MergeFrom(const MetricFamily& from);
-  void Clear();
-  bool IsInitialized() const;
-
-  int ByteSize() const;
-  bool MergePartialFromCodedStream(
-      ::google::protobuf::io::CodedInputStream* input);
-  void SerializeWithCachedSizes(
-      ::google::protobuf::io::CodedOutputStream* output) const;
-  ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const;
-  int GetCachedSize() const { return _cached_size_; }
-  private:
-  void SharedCtor();
-  void SharedDtor();
-  void SetCachedSize(int size) const;
-  public:
-  ::google::protobuf::Metadata GetMetadata() const;
-
-  // nested types ----------------------------------------------------
-
-  // accessors -------------------------------------------------------
-
-  // optional string name = 1;
-  inline bool has_name() const;
-  inline void clear_name();
-  static const int kNameFieldNumber = 1;
-  inline const ::std::string& name() const;
-  inline void set_name(const ::std::string& value);
-  inline void set_name(const char* value);
-  inline void set_name(const char* value, size_t size);
-  inline ::std::string* mutable_name();
-  inline ::std::string* release_name();
-  inline void set_allocated_name(::std::string* name);
-
-  // optional string help = 2;
-  inline bool has_help() const;
-  inline void clear_help();
-  static const int kHelpFieldNumber = 2;
-  inline const ::std::string& help() const;
-  inline void set_help(const ::std::string& value);
-  inline void set_help(const char* value);
-  inline void set_help(const char* value, size_t size);
-  inline ::std::string* mutable_help();
-  inline ::std::string* release_help();
-  inline void set_allocated_help(::std::string* help);
-
-  // optional .io.prometheus.client.MetricType type = 3;
-  inline bool has_type() const;
-  inline void clear_type();
-  static const int kTypeFieldNumber = 3;
-  inline ::io::prometheus::client::MetricType type() const;
-  inline void set_type(::io::prometheus::client::MetricType value);
-
-  // repeated .io.prometheus.client.Metric metric = 4;
-  inline int metric_size() const;
-  inline void clear_metric();
-  static const int kMetricFieldNumber = 4;
-  inline const ::io::prometheus::client::Metric& metric(int index) const;
-  inline ::io::prometheus::client::Metric* mutable_metric(int index);
-  inline ::io::prometheus::client::Metric* add_metric();
-  inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric >&
-      metric() const;
-  inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric >*
-      mutable_metric();
-
-  // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
- private:
-  inline void set_has_name();
-  inline void clear_has_name();
-  inline void set_has_help();
-  inline void clear_has_help();
-  inline void set_has_type();
-  inline void clear_has_type();
-
-  ::google::protobuf::UnknownFieldSet _unknown_fields_;
-
-  ::google::protobuf::uint32 _has_bits_[1];
-  mutable int _cached_size_;
-  ::std::string* name_;
-  ::std::string* help_;
-  ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric > metric_;
-  int type_;
-  friend void  protobuf_AddDesc_metrics_2eproto();
-  friend void protobuf_AssignDesc_metrics_2eproto();
-  friend void protobuf_ShutdownFile_metrics_2eproto();
-
-  void InitAsDefaultInstance();
-  static MetricFamily* default_instance_;
-};
-// ===================================================================
-
-
-// ===================================================================
-
-// LabelPair
-
-// optional string name = 1;
-inline bool LabelPair::has_name() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void LabelPair::set_has_name() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void LabelPair::clear_has_name() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void LabelPair::clear_name() {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_->clear();
-  }
-  clear_has_name();
-}
-inline const ::std::string& LabelPair::name() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.LabelPair.name)
-  return *name_;
-}
-inline void LabelPair::set_name(const ::std::string& value) {
-  set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_ = new ::std::string;
-  }
-  name_->assign(value);
-  // @@protoc_insertion_point(field_set:io.prometheus.client.LabelPair.name)
-}
-inline void LabelPair::set_name(const char* value) {
-  set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_ = new ::std::string;
-  }
-  name_->assign(value);
-  // @@protoc_insertion_point(field_set_char:io.prometheus.client.LabelPair.name)
-}
-inline void LabelPair::set_name(const char* value, size_t size) {
-  set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_ = new ::std::string;
-  }
-  name_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:io.prometheus.client.LabelPair.name)
-}
-inline ::std::string* LabelPair::mutable_name() {
-  set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_ = new ::std::string;
-  }
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.LabelPair.name)
-  return name_;
-}
-inline ::std::string* LabelPair::release_name() {
-  clear_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    return NULL;
-  } else {
-    ::std::string* temp = name_;
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    return temp;
-  }
-}
-inline void LabelPair::set_allocated_name(::std::string* name) {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete name_;
-  }
-  if (name) {
-    set_has_name();
-    name_ = name;
-  } else {
-    clear_has_name();
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.LabelPair.name)
-}
-
-// optional string value = 2;
-inline bool LabelPair::has_value() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void LabelPair::set_has_value() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void LabelPair::clear_has_value() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void LabelPair::clear_value() {
-  if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    value_->clear();
-  }
-  clear_has_value();
-}
-inline const ::std::string& LabelPair::value() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.LabelPair.value)
-  return *value_;
-}
-inline void LabelPair::set_value(const ::std::string& value) {
-  set_has_value();
-  if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    value_ = new ::std::string;
-  }
-  value_->assign(value);
-  // @@protoc_insertion_point(field_set:io.prometheus.client.LabelPair.value)
-}
-inline void LabelPair::set_value(const char* value) {
-  set_has_value();
-  if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    value_ = new ::std::string;
-  }
-  value_->assign(value);
-  // @@protoc_insertion_point(field_set_char:io.prometheus.client.LabelPair.value)
-}
-inline void LabelPair::set_value(const char* value, size_t size) {
-  set_has_value();
-  if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    value_ = new ::std::string;
-  }
-  value_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:io.prometheus.client.LabelPair.value)
-}
-inline ::std::string* LabelPair::mutable_value() {
-  set_has_value();
-  if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    value_ = new ::std::string;
-  }
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.LabelPair.value)
-  return value_;
-}
-inline ::std::string* LabelPair::release_value() {
-  clear_has_value();
-  if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    return NULL;
-  } else {
-    ::std::string* temp = value_;
-    value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    return temp;
-  }
-}
-inline void LabelPair::set_allocated_value(::std::string* value) {
-  if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete value_;
-  }
-  if (value) {
-    set_has_value();
-    value_ = value;
-  } else {
-    clear_has_value();
-    value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.LabelPair.value)
-}
-
-// -------------------------------------------------------------------
-
-// Gauge
-
-// optional double value = 1;
-inline bool Gauge::has_value() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void Gauge::set_has_value() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void Gauge::clear_has_value() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void Gauge::clear_value() {
-  value_ = 0;
-  clear_has_value();
-}
-inline double Gauge::value() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Gauge.value)
-  return value_;
-}
-inline void Gauge::set_value(double value) {
-  set_has_value();
-  value_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Gauge.value)
-}
-
-// -------------------------------------------------------------------
-
-// Counter
-
-// optional double value = 1;
-inline bool Counter::has_value() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void Counter::set_has_value() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void Counter::clear_has_value() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void Counter::clear_value() {
-  value_ = 0;
-  clear_has_value();
-}
-inline double Counter::value() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Counter.value)
-  return value_;
-}
-inline void Counter::set_value(double value) {
-  set_has_value();
-  value_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Counter.value)
-}
-
-// -------------------------------------------------------------------
-
-// Quantile
-
-// optional double quantile = 1;
-inline bool Quantile::has_quantile() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void Quantile::set_has_quantile() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void Quantile::clear_has_quantile() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void Quantile::clear_quantile() {
-  quantile_ = 0;
-  clear_has_quantile();
-}
-inline double Quantile::quantile() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Quantile.quantile)
-  return quantile_;
-}
-inline void Quantile::set_quantile(double value) {
-  set_has_quantile();
-  quantile_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Quantile.quantile)
-}
-
-// optional double value = 2;
-inline bool Quantile::has_value() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void Quantile::set_has_value() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void Quantile::clear_has_value() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void Quantile::clear_value() {
-  value_ = 0;
-  clear_has_value();
-}
-inline double Quantile::value() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Quantile.value)
-  return value_;
-}
-inline void Quantile::set_value(double value) {
-  set_has_value();
-  value_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Quantile.value)
-}
-
-// -------------------------------------------------------------------
-
-// Summary
-
-// optional uint64 sample_count = 1;
-inline bool Summary::has_sample_count() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void Summary::set_has_sample_count() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void Summary::clear_has_sample_count() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void Summary::clear_sample_count() {
-  sample_count_ = GOOGLE_ULONGLONG(0);
-  clear_has_sample_count();
-}
-inline ::google::protobuf::uint64 Summary::sample_count() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Summary.sample_count)
-  return sample_count_;
-}
-inline void Summary::set_sample_count(::google::protobuf::uint64 value) {
-  set_has_sample_count();
-  sample_count_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Summary.sample_count)
-}
-
-// optional double sample_sum = 2;
-inline bool Summary::has_sample_sum() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void Summary::set_has_sample_sum() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void Summary::clear_has_sample_sum() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void Summary::clear_sample_sum() {
-  sample_sum_ = 0;
-  clear_has_sample_sum();
-}
-inline double Summary::sample_sum() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Summary.sample_sum)
-  return sample_sum_;
-}
-inline void Summary::set_sample_sum(double value) {
-  set_has_sample_sum();
-  sample_sum_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Summary.sample_sum)
-}
-
-// repeated .io.prometheus.client.Quantile quantile = 3;
-inline int Summary::quantile_size() const {
-  return quantile_.size();
-}
-inline void Summary::clear_quantile() {
-  quantile_.Clear();
-}
-inline const ::io::prometheus::client::Quantile& Summary::quantile(int index) const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Summary.quantile)
-  return quantile_.Get(index);
-}
-inline ::io::prometheus::client::Quantile* Summary::mutable_quantile(int index) {
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.Summary.quantile)
-  return quantile_.Mutable(index);
-}
-inline ::io::prometheus::client::Quantile* Summary::add_quantile() {
-  // @@protoc_insertion_point(field_add:io.prometheus.client.Summary.quantile)
-  return quantile_.Add();
-}
-inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile >&
-Summary::quantile() const {
-  // @@protoc_insertion_point(field_list:io.prometheus.client.Summary.quantile)
-  return quantile_;
-}
-inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile >*
-Summary::mutable_quantile() {
-  // @@protoc_insertion_point(field_mutable_list:io.prometheus.client.Summary.quantile)
-  return &quantile_;
-}
-
-// -------------------------------------------------------------------
-
-// Untyped
-
-// optional double value = 1;
-inline bool Untyped::has_value() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void Untyped::set_has_value() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void Untyped::clear_has_value() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void Untyped::clear_value() {
-  value_ = 0;
-  clear_has_value();
-}
-inline double Untyped::value() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Untyped.value)
-  return value_;
-}
-inline void Untyped::set_value(double value) {
-  set_has_value();
-  value_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Untyped.value)
-}
-
-// -------------------------------------------------------------------
-
-// Histogram
-
-// optional uint64 sample_count = 1;
-inline bool Histogram::has_sample_count() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void Histogram::set_has_sample_count() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void Histogram::clear_has_sample_count() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void Histogram::clear_sample_count() {
-  sample_count_ = GOOGLE_ULONGLONG(0);
-  clear_has_sample_count();
-}
-inline ::google::protobuf::uint64 Histogram::sample_count() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Histogram.sample_count)
-  return sample_count_;
-}
-inline void Histogram::set_sample_count(::google::protobuf::uint64 value) {
-  set_has_sample_count();
-  sample_count_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Histogram.sample_count)
-}
-
-// optional double sample_sum = 2;
-inline bool Histogram::has_sample_sum() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void Histogram::set_has_sample_sum() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void Histogram::clear_has_sample_sum() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void Histogram::clear_sample_sum() {
-  sample_sum_ = 0;
-  clear_has_sample_sum();
-}
-inline double Histogram::sample_sum() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Histogram.sample_sum)
-  return sample_sum_;
-}
-inline void Histogram::set_sample_sum(double value) {
-  set_has_sample_sum();
-  sample_sum_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Histogram.sample_sum)
-}
-
-// repeated .io.prometheus.client.Bucket bucket = 3;
-inline int Histogram::bucket_size() const {
-  return bucket_.size();
-}
-inline void Histogram::clear_bucket() {
-  bucket_.Clear();
-}
-inline const ::io::prometheus::client::Bucket& Histogram::bucket(int index) const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Histogram.bucket)
-  return bucket_.Get(index);
-}
-inline ::io::prometheus::client::Bucket* Histogram::mutable_bucket(int index) {
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.Histogram.bucket)
-  return bucket_.Mutable(index);
-}
-inline ::io::prometheus::client::Bucket* Histogram::add_bucket() {
-  // @@protoc_insertion_point(field_add:io.prometheus.client.Histogram.bucket)
-  return bucket_.Add();
-}
-inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket >&
-Histogram::bucket() const {
-  // @@protoc_insertion_point(field_list:io.prometheus.client.Histogram.bucket)
-  return bucket_;
-}
-inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket >*
-Histogram::mutable_bucket() {
-  // @@protoc_insertion_point(field_mutable_list:io.prometheus.client.Histogram.bucket)
-  return &bucket_;
-}
-
-// -------------------------------------------------------------------
-
-// Bucket
-
-// optional uint64 cumulative_count = 1;
-inline bool Bucket::has_cumulative_count() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void Bucket::set_has_cumulative_count() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void Bucket::clear_has_cumulative_count() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void Bucket::clear_cumulative_count() {
-  cumulative_count_ = GOOGLE_ULONGLONG(0);
-  clear_has_cumulative_count();
-}
-inline ::google::protobuf::uint64 Bucket::cumulative_count() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Bucket.cumulative_count)
-  return cumulative_count_;
-}
-inline void Bucket::set_cumulative_count(::google::protobuf::uint64 value) {
-  set_has_cumulative_count();
-  cumulative_count_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Bucket.cumulative_count)
-}
-
-// optional double upper_bound = 2;
-inline bool Bucket::has_upper_bound() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void Bucket::set_has_upper_bound() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void Bucket::clear_has_upper_bound() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void Bucket::clear_upper_bound() {
-  upper_bound_ = 0;
-  clear_has_upper_bound();
-}
-inline double Bucket::upper_bound() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Bucket.upper_bound)
-  return upper_bound_;
-}
-inline void Bucket::set_upper_bound(double value) {
-  set_has_upper_bound();
-  upper_bound_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Bucket.upper_bound)
-}
-
-// -------------------------------------------------------------------
-
-// Metric
-
-// repeated .io.prometheus.client.LabelPair label = 1;
-inline int Metric::label_size() const {
-  return label_.size();
-}
-inline void Metric::clear_label() {
-  label_.Clear();
-}
-inline const ::io::prometheus::client::LabelPair& Metric::label(int index) const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.label)
-  return label_.Get(index);
-}
-inline ::io::prometheus::client::LabelPair* Metric::mutable_label(int index) {
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.label)
-  return label_.Mutable(index);
-}
-inline ::io::prometheus::client::LabelPair* Metric::add_label() {
-  // @@protoc_insertion_point(field_add:io.prometheus.client.Metric.label)
-  return label_.Add();
-}
-inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair >&
-Metric::label() const {
-  // @@protoc_insertion_point(field_list:io.prometheus.client.Metric.label)
-  return label_;
-}
-inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair >*
-Metric::mutable_label() {
-  // @@protoc_insertion_point(field_mutable_list:io.prometheus.client.Metric.label)
-  return &label_;
-}
-
-// optional .io.prometheus.client.Gauge gauge = 2;
-inline bool Metric::has_gauge() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void Metric::set_has_gauge() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void Metric::clear_has_gauge() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void Metric::clear_gauge() {
-  if (gauge_ != NULL) gauge_->::io::prometheus::client::Gauge::Clear();
-  clear_has_gauge();
-}
-inline const ::io::prometheus::client::Gauge& Metric::gauge() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.gauge)
-  return gauge_ != NULL ? *gauge_ : *default_instance_->gauge_;
-}
-inline ::io::prometheus::client::Gauge* Metric::mutable_gauge() {
-  set_has_gauge();
-  if (gauge_ == NULL) gauge_ = new ::io::prometheus::client::Gauge;
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.gauge)
-  return gauge_;
-}
-inline ::io::prometheus::client::Gauge* Metric::release_gauge() {
-  clear_has_gauge();
-  ::io::prometheus::client::Gauge* temp = gauge_;
-  gauge_ = NULL;
-  return temp;
-}
-inline void Metric::set_allocated_gauge(::io::prometheus::client::Gauge* gauge) {
-  delete gauge_;
-  gauge_ = gauge;
-  if (gauge) {
-    set_has_gauge();
-  } else {
-    clear_has_gauge();
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.gauge)
-}
-
-// optional .io.prometheus.client.Counter counter = 3;
-inline bool Metric::has_counter() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void Metric::set_has_counter() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void Metric::clear_has_counter() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void Metric::clear_counter() {
-  if (counter_ != NULL) counter_->::io::prometheus::client::Counter::Clear();
-  clear_has_counter();
-}
-inline const ::io::prometheus::client::Counter& Metric::counter() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.counter)
-  return counter_ != NULL ? *counter_ : *default_instance_->counter_;
-}
-inline ::io::prometheus::client::Counter* Metric::mutable_counter() {
-  set_has_counter();
-  if (counter_ == NULL) counter_ = new ::io::prometheus::client::Counter;
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.counter)
-  return counter_;
-}
-inline ::io::prometheus::client::Counter* Metric::release_counter() {
-  clear_has_counter();
-  ::io::prometheus::client::Counter* temp = counter_;
-  counter_ = NULL;
-  return temp;
-}
-inline void Metric::set_allocated_counter(::io::prometheus::client::Counter* counter) {
-  delete counter_;
-  counter_ = counter;
-  if (counter) {
-    set_has_counter();
-  } else {
-    clear_has_counter();
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.counter)
-}
-
-// optional .io.prometheus.client.Summary summary = 4;
-inline bool Metric::has_summary() const {
-  return (_has_bits_[0] & 0x00000008u) != 0;
-}
-inline void Metric::set_has_summary() {
-  _has_bits_[0] |= 0x00000008u;
-}
-inline void Metric::clear_has_summary() {
-  _has_bits_[0] &= ~0x00000008u;
-}
-inline void Metric::clear_summary() {
-  if (summary_ != NULL) summary_->::io::prometheus::client::Summary::Clear();
-  clear_has_summary();
-}
-inline const ::io::prometheus::client::Summary& Metric::summary() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.summary)
-  return summary_ != NULL ? *summary_ : *default_instance_->summary_;
-}
-inline ::io::prometheus::client::Summary* Metric::mutable_summary() {
-  set_has_summary();
-  if (summary_ == NULL) summary_ = new ::io::prometheus::client::Summary;
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.summary)
-  return summary_;
-}
-inline ::io::prometheus::client::Summary* Metric::release_summary() {
-  clear_has_summary();
-  ::io::prometheus::client::Summary* temp = summary_;
-  summary_ = NULL;
-  return temp;
-}
-inline void Metric::set_allocated_summary(::io::prometheus::client::Summary* summary) {
-  delete summary_;
-  summary_ = summary;
-  if (summary) {
-    set_has_summary();
-  } else {
-    clear_has_summary();
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.summary)
-}
-
-// optional .io.prometheus.client.Untyped untyped = 5;
-inline bool Metric::has_untyped() const {
-  return (_has_bits_[0] & 0x00000010u) != 0;
-}
-inline void Metric::set_has_untyped() {
-  _has_bits_[0] |= 0x00000010u;
-}
-inline void Metric::clear_has_untyped() {
-  _has_bits_[0] &= ~0x00000010u;
-}
-inline void Metric::clear_untyped() {
-  if (untyped_ != NULL) untyped_->::io::prometheus::client::Untyped::Clear();
-  clear_has_untyped();
-}
-inline const ::io::prometheus::client::Untyped& Metric::untyped() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.untyped)
-  return untyped_ != NULL ? *untyped_ : *default_instance_->untyped_;
-}
-inline ::io::prometheus::client::Untyped* Metric::mutable_untyped() {
-  set_has_untyped();
-  if (untyped_ == NULL) untyped_ = new ::io::prometheus::client::Untyped;
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.untyped)
-  return untyped_;
-}
-inline ::io::prometheus::client::Untyped* Metric::release_untyped() {
-  clear_has_untyped();
-  ::io::prometheus::client::Untyped* temp = untyped_;
-  untyped_ = NULL;
-  return temp;
-}
-inline void Metric::set_allocated_untyped(::io::prometheus::client::Untyped* untyped) {
-  delete untyped_;
-  untyped_ = untyped;
-  if (untyped) {
-    set_has_untyped();
-  } else {
-    clear_has_untyped();
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.untyped)
-}
-
-// optional .io.prometheus.client.Histogram histogram = 7;
-inline bool Metric::has_histogram() const {
-  return (_has_bits_[0] & 0x00000020u) != 0;
-}
-inline void Metric::set_has_histogram() {
-  _has_bits_[0] |= 0x00000020u;
-}
-inline void Metric::clear_has_histogram() {
-  _has_bits_[0] &= ~0x00000020u;
-}
-inline void Metric::clear_histogram() {
-  if (histogram_ != NULL) histogram_->::io::prometheus::client::Histogram::Clear();
-  clear_has_histogram();
-}
-inline const ::io::prometheus::client::Histogram& Metric::histogram() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.histogram)
-  return histogram_ != NULL ? *histogram_ : *default_instance_->histogram_;
-}
-inline ::io::prometheus::client::Histogram* Metric::mutable_histogram() {
-  set_has_histogram();
-  if (histogram_ == NULL) histogram_ = new ::io::prometheus::client::Histogram;
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.histogram)
-  return histogram_;
-}
-inline ::io::prometheus::client::Histogram* Metric::release_histogram() {
-  clear_has_histogram();
-  ::io::prometheus::client::Histogram* temp = histogram_;
-  histogram_ = NULL;
-  return temp;
-}
-inline void Metric::set_allocated_histogram(::io::prometheus::client::Histogram* histogram) {
-  delete histogram_;
-  histogram_ = histogram;
-  if (histogram) {
-    set_has_histogram();
-  } else {
-    clear_has_histogram();
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.histogram)
-}
-
-// optional int64 timestamp_ms = 6;
-inline bool Metric::has_timestamp_ms() const {
-  return (_has_bits_[0] & 0x00000040u) != 0;
-}
-inline void Metric::set_has_timestamp_ms() {
-  _has_bits_[0] |= 0x00000040u;
-}
-inline void Metric::clear_has_timestamp_ms() {
-  _has_bits_[0] &= ~0x00000040u;
-}
-inline void Metric::clear_timestamp_ms() {
-  timestamp_ms_ = GOOGLE_LONGLONG(0);
-  clear_has_timestamp_ms();
-}
-inline ::google::protobuf::int64 Metric::timestamp_ms() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.timestamp_ms)
-  return timestamp_ms_;
-}
-inline void Metric::set_timestamp_ms(::google::protobuf::int64 value) {
-  set_has_timestamp_ms();
-  timestamp_ms_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.Metric.timestamp_ms)
-}
-
-// -------------------------------------------------------------------
-
-// MetricFamily
-
-// optional string name = 1;
-inline bool MetricFamily::has_name() const {
-  return (_has_bits_[0] & 0x00000001u) != 0;
-}
-inline void MetricFamily::set_has_name() {
-  _has_bits_[0] |= 0x00000001u;
-}
-inline void MetricFamily::clear_has_name() {
-  _has_bits_[0] &= ~0x00000001u;
-}
-inline void MetricFamily::clear_name() {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_->clear();
-  }
-  clear_has_name();
-}
-inline const ::std::string& MetricFamily::name() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.MetricFamily.name)
-  return *name_;
-}
-inline void MetricFamily::set_name(const ::std::string& value) {
-  set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_ = new ::std::string;
-  }
-  name_->assign(value);
-  // @@protoc_insertion_point(field_set:io.prometheus.client.MetricFamily.name)
-}
-inline void MetricFamily::set_name(const char* value) {
-  set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_ = new ::std::string;
-  }
-  name_->assign(value);
-  // @@protoc_insertion_point(field_set_char:io.prometheus.client.MetricFamily.name)
-}
-inline void MetricFamily::set_name(const char* value, size_t size) {
-  set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_ = new ::std::string;
-  }
-  name_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:io.prometheus.client.MetricFamily.name)
-}
-inline ::std::string* MetricFamily::mutable_name() {
-  set_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    name_ = new ::std::string;
-  }
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.MetricFamily.name)
-  return name_;
-}
-inline ::std::string* MetricFamily::release_name() {
-  clear_has_name();
-  if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    return NULL;
-  } else {
-    ::std::string* temp = name_;
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    return temp;
-  }
-}
-inline void MetricFamily::set_allocated_name(::std::string* name) {
-  if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete name_;
-  }
-  if (name) {
-    set_has_name();
-    name_ = name;
-  } else {
-    clear_has_name();
-    name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.MetricFamily.name)
-}
-
-// optional string help = 2;
-inline bool MetricFamily::has_help() const {
-  return (_has_bits_[0] & 0x00000002u) != 0;
-}
-inline void MetricFamily::set_has_help() {
-  _has_bits_[0] |= 0x00000002u;
-}
-inline void MetricFamily::clear_has_help() {
-  _has_bits_[0] &= ~0x00000002u;
-}
-inline void MetricFamily::clear_help() {
-  if (help_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    help_->clear();
-  }
-  clear_has_help();
-}
-inline const ::std::string& MetricFamily::help() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.MetricFamily.help)
-  return *help_;
-}
-inline void MetricFamily::set_help(const ::std::string& value) {
-  set_has_help();
-  if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    help_ = new ::std::string;
-  }
-  help_->assign(value);
-  // @@protoc_insertion_point(field_set:io.prometheus.client.MetricFamily.help)
-}
-inline void MetricFamily::set_help(const char* value) {
-  set_has_help();
-  if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    help_ = new ::std::string;
-  }
-  help_->assign(value);
-  // @@protoc_insertion_point(field_set_char:io.prometheus.client.MetricFamily.help)
-}
-inline void MetricFamily::set_help(const char* value, size_t size) {
-  set_has_help();
-  if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    help_ = new ::std::string;
-  }
-  help_->assign(reinterpret_cast<const char*>(value), size);
-  // @@protoc_insertion_point(field_set_pointer:io.prometheus.client.MetricFamily.help)
-}
-inline ::std::string* MetricFamily::mutable_help() {
-  set_has_help();
-  if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    help_ = new ::std::string;
-  }
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.MetricFamily.help)
-  return help_;
-}
-inline ::std::string* MetricFamily::release_help() {
-  clear_has_help();
-  if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    return NULL;
-  } else {
-    ::std::string* temp = help_;
-    help_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-    return temp;
-  }
-}
-inline void MetricFamily::set_allocated_help(::std::string* help) {
-  if (help_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
-    delete help_;
-  }
-  if (help) {
-    set_has_help();
-    help_ = help;
-  } else {
-    clear_has_help();
-    help_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
-  }
-  // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.MetricFamily.help)
-}
-
-// optional .io.prometheus.client.MetricType type = 3;
-inline bool MetricFamily::has_type() const {
-  return (_has_bits_[0] & 0x00000004u) != 0;
-}
-inline void MetricFamily::set_has_type() {
-  _has_bits_[0] |= 0x00000004u;
-}
-inline void MetricFamily::clear_has_type() {
-  _has_bits_[0] &= ~0x00000004u;
-}
-inline void MetricFamily::clear_type() {
-  type_ = 0;
-  clear_has_type();
-}
-inline ::io::prometheus::client::MetricType MetricFamily::type() const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.MetricFamily.type)
-  return static_cast< ::io::prometheus::client::MetricType >(type_);
-}
-inline void MetricFamily::set_type(::io::prometheus::client::MetricType value) {
-  assert(::io::prometheus::client::MetricType_IsValid(value));
-  set_has_type();
-  type_ = value;
-  // @@protoc_insertion_point(field_set:io.prometheus.client.MetricFamily.type)
-}
-
-// repeated .io.prometheus.client.Metric metric = 4;
-inline int MetricFamily::metric_size() const {
-  return metric_.size();
-}
-inline void MetricFamily::clear_metric() {
-  metric_.Clear();
-}
-inline const ::io::prometheus::client::Metric& MetricFamily::metric(int index) const {
-  // @@protoc_insertion_point(field_get:io.prometheus.client.MetricFamily.metric)
-  return metric_.Get(index);
-}
-inline ::io::prometheus::client::Metric* MetricFamily::mutable_metric(int index) {
-  // @@protoc_insertion_point(field_mutable:io.prometheus.client.MetricFamily.metric)
-  return metric_.Mutable(index);
-}
-inline ::io::prometheus::client::Metric* MetricFamily::add_metric() {
-  // @@protoc_insertion_point(field_add:io.prometheus.client.MetricFamily.metric)
-  return metric_.Add();
-}
-inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric >&
-MetricFamily::metric() const {
-  // @@protoc_insertion_point(field_list:io.prometheus.client.MetricFamily.metric)
-  return metric_;
-}
-inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric >*
-MetricFamily::mutable_metric() {
-  // @@protoc_insertion_point(field_mutable_list:io.prometheus.client.MetricFamily.metric)
-  return &metric_;
-}
-
-
-// @@protoc_insertion_point(namespace_scope)
-
-}  // namespace client
-}  // namespace prometheus
-}  // namespace io
-
-#ifndef SWIG
-namespace google {
-namespace protobuf {
-
-template <> struct is_proto_enum< ::io::prometheus::client::MetricType> : ::google::protobuf::internal::true_type {};
-template <>
-inline const EnumDescriptor* GetEnumDescriptor< ::io::prometheus::client::MetricType>() {
-  return ::io::prometheus::client::MetricType_descriptor();
-}
-
-}  // namespace google
-}  // namespace protobuf
-#endif  // SWIG
-
-// @@protoc_insertion_point(global_scope)
-
-#endif  // PROTOBUF_metrics_2eproto__INCLUDED
diff --git a/debian/changelog b/debian/changelog
index d1c5b6b..a4277c6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+golang-github-m3db-prometheus-client-model (0.2.1-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Wed, 14 Dec 2022 13:41:50 -0000
+
 golang-github-m3db-prometheus-client-model (0.1.0-1) unstable; urgency=medium
 
   [ Debian Janitor ]
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..79b90bb
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,5 @@
+module github.com/m3db/prometheus_client_model
+
+go 1.9
+
+require github.com/golang/protobuf v1.3.5
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..6124ed3
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,2 @@
+github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
diff --git a/go/metrics.pb.go b/go/metrics.pb.go
index e509277..99dc48a 100644
--- a/go/metrics.pb.go
+++ b/go/metrics.pb.go
@@ -1,34 +1,26 @@
-// Code generated by protoc-gen-go.
-// source: metrics.proto
-// DO NOT EDIT!
-
-/*
-Package io_prometheus_client is a generated protocol buffer package.
-
-It is generated from these files:
-	metrics.proto
-
-It has these top-level messages:
-	LabelPair
-	Gauge
-	Counter
-	Quantile
-	Summary
-	Untyped
-	Histogram
-	Bucket
-	Metric
-	MetricFamily
-*/
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: io/prometheus/client/metrics.proto
+
 package io_prometheus_client
 
-import proto "github.com/golang/protobuf/proto"
-import math "math"
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	timestamp "github.com/golang/protobuf/ptypes/timestamp"
+	math "math"
+)
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ = proto.Marshal
+var _ = fmt.Errorf
 var _ = math.Inf
 
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
 type MetricType int32
 
 const (
@@ -46,6 +38,7 @@ var MetricType_name = map[int32]string{
 	3: "UNTYPED",
 	4: "HISTOGRAM",
 }
+
 var MetricType_value = map[string]int32{
 	"COUNTER":   0,
 	"GAUGE":     1,
@@ -59,9 +52,11 @@ func (x MetricType) Enum() *MetricType {
 	*p = x
 	return p
 }
+
 func (x MetricType) String() string {
 	return proto.EnumName(MetricType_name, int32(x))
 }
+
 func (x *MetricType) UnmarshalJSON(data []byte) error {
 	value, err := proto.UnmarshalJSONEnum(MetricType_value, data, "MetricType")
 	if err != nil {
@@ -71,15 +66,42 @@ func (x *MetricType) UnmarshalJSON(data []byte) error {
 	return nil
 }
 
+func (MetricType) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{0}
+}
+
 type LabelPair struct {
-	Name             *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	Value            *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
-	XXX_unrecognized []byte  `json:"-"`
+	Name                 *string  `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Value                *string  `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *LabelPair) Reset()         { *m = LabelPair{} }
 func (m *LabelPair) String() string { return proto.CompactTextString(m) }
 func (*LabelPair) ProtoMessage()    {}
+func (*LabelPair) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{0}
+}
+
+func (m *LabelPair) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_LabelPair.Unmarshal(m, b)
+}
+func (m *LabelPair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_LabelPair.Marshal(b, m, deterministic)
+}
+func (m *LabelPair) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_LabelPair.Merge(m, src)
+}
+func (m *LabelPair) XXX_Size() int {
+	return xxx_messageInfo_LabelPair.Size(m)
+}
+func (m *LabelPair) XXX_DiscardUnknown() {
+	xxx_messageInfo_LabelPair.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_LabelPair proto.InternalMessageInfo
 
 func (m *LabelPair) GetName() string {
 	if m != nil && m.Name != nil {
@@ -96,13 +118,36 @@ func (m *LabelPair) GetValue() string {
 }
 
 type Gauge struct {
-	Value            *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
-	XXX_unrecognized []byte   `json:"-"`
+	Value                *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *Gauge) Reset()         { *m = Gauge{} }
 func (m *Gauge) String() string { return proto.CompactTextString(m) }
 func (*Gauge) ProtoMessage()    {}
+func (*Gauge) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{1}
+}
+
+func (m *Gauge) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Gauge.Unmarshal(m, b)
+}
+func (m *Gauge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Gauge.Marshal(b, m, deterministic)
+}
+func (m *Gauge) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Gauge.Merge(m, src)
+}
+func (m *Gauge) XXX_Size() int {
+	return xxx_messageInfo_Gauge.Size(m)
+}
+func (m *Gauge) XXX_DiscardUnknown() {
+	xxx_messageInfo_Gauge.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Gauge proto.InternalMessageInfo
 
 func (m *Gauge) GetValue() float64 {
 	if m != nil && m.Value != nil {
@@ -112,13 +157,37 @@ func (m *Gauge) GetValue() float64 {
 }
 
 type Counter struct {
-	Value            *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
-	XXX_unrecognized []byte   `json:"-"`
+	Value                *float64  `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
+	Exemplar             *Exemplar `protobuf:"bytes,2,opt,name=exemplar" json:"exemplar,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
 func (m *Counter) Reset()         { *m = Counter{} }
 func (m *Counter) String() string { return proto.CompactTextString(m) }
 func (*Counter) ProtoMessage()    {}
+func (*Counter) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{2}
+}
+
+func (m *Counter) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Counter.Unmarshal(m, b)
+}
+func (m *Counter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Counter.Marshal(b, m, deterministic)
+}
+func (m *Counter) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Counter.Merge(m, src)
+}
+func (m *Counter) XXX_Size() int {
+	return xxx_messageInfo_Counter.Size(m)
+}
+func (m *Counter) XXX_DiscardUnknown() {
+	xxx_messageInfo_Counter.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Counter proto.InternalMessageInfo
 
 func (m *Counter) GetValue() float64 {
 	if m != nil && m.Value != nil {
@@ -127,15 +196,45 @@ func (m *Counter) GetValue() float64 {
 	return 0
 }
 
+func (m *Counter) GetExemplar() *Exemplar {
+	if m != nil {
+		return m.Exemplar
+	}
+	return nil
+}
+
 type Quantile struct {
-	Quantile         *float64 `protobuf:"fixed64,1,opt,name=quantile" json:"quantile,omitempty"`
-	Value            *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"`
-	XXX_unrecognized []byte   `json:"-"`
+	Quantile             *float64 `protobuf:"fixed64,1,opt,name=quantile" json:"quantile,omitempty"`
+	Value                *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *Quantile) Reset()         { *m = Quantile{} }
 func (m *Quantile) String() string { return proto.CompactTextString(m) }
 func (*Quantile) ProtoMessage()    {}
+func (*Quantile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{3}
+}
+
+func (m *Quantile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Quantile.Unmarshal(m, b)
+}
+func (m *Quantile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Quantile.Marshal(b, m, deterministic)
+}
+func (m *Quantile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Quantile.Merge(m, src)
+}
+func (m *Quantile) XXX_Size() int {
+	return xxx_messageInfo_Quantile.Size(m)
+}
+func (m *Quantile) XXX_DiscardUnknown() {
+	xxx_messageInfo_Quantile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Quantile proto.InternalMessageInfo
 
 func (m *Quantile) GetQuantile() float64 {
 	if m != nil && m.Quantile != nil {
@@ -152,15 +251,38 @@ func (m *Quantile) GetValue() float64 {
 }
 
 type Summary struct {
-	SampleCount      *uint64     `protobuf:"varint,1,opt,name=sample_count" json:"sample_count,omitempty"`
-	SampleSum        *float64    `protobuf:"fixed64,2,opt,name=sample_sum" json:"sample_sum,omitempty"`
-	Quantile         []*Quantile `protobuf:"bytes,3,rep,name=quantile" json:"quantile,omitempty"`
-	XXX_unrecognized []byte      `json:"-"`
+	SampleCount          *uint64     `protobuf:"varint,1,opt,name=sample_count,json=sampleCount" json:"sample_count,omitempty"`
+	SampleSum            *float64    `protobuf:"fixed64,2,opt,name=sample_sum,json=sampleSum" json:"sample_sum,omitempty"`
+	Quantile             []*Quantile `protobuf:"bytes,3,rep,name=quantile" json:"quantile,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
 func (m *Summary) Reset()         { *m = Summary{} }
 func (m *Summary) String() string { return proto.CompactTextString(m) }
 func (*Summary) ProtoMessage()    {}
+func (*Summary) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{4}
+}
+
+func (m *Summary) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Summary.Unmarshal(m, b)
+}
+func (m *Summary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Summary.Marshal(b, m, deterministic)
+}
+func (m *Summary) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Summary.Merge(m, src)
+}
+func (m *Summary) XXX_Size() int {
+	return xxx_messageInfo_Summary.Size(m)
+}
+func (m *Summary) XXX_DiscardUnknown() {
+	xxx_messageInfo_Summary.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Summary proto.InternalMessageInfo
 
 func (m *Summary) GetSampleCount() uint64 {
 	if m != nil && m.SampleCount != nil {
@@ -184,13 +306,36 @@ func (m *Summary) GetQuantile() []*Quantile {
 }
 
 type Untyped struct {
-	Value            *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
-	XXX_unrecognized []byte   `json:"-"`
+	Value                *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
 }
 
 func (m *Untyped) Reset()         { *m = Untyped{} }
 func (m *Untyped) String() string { return proto.CompactTextString(m) }
 func (*Untyped) ProtoMessage()    {}
+func (*Untyped) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{5}
+}
+
+func (m *Untyped) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Untyped.Unmarshal(m, b)
+}
+func (m *Untyped) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Untyped.Marshal(b, m, deterministic)
+}
+func (m *Untyped) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Untyped.Merge(m, src)
+}
+func (m *Untyped) XXX_Size() int {
+	return xxx_messageInfo_Untyped.Size(m)
+}
+func (m *Untyped) XXX_DiscardUnknown() {
+	xxx_messageInfo_Untyped.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Untyped proto.InternalMessageInfo
 
 func (m *Untyped) GetValue() float64 {
 	if m != nil && m.Value != nil {
@@ -200,15 +345,38 @@ func (m *Untyped) GetValue() float64 {
 }
 
 type Histogram struct {
-	SampleCount      *uint64   `protobuf:"varint,1,opt,name=sample_count" json:"sample_count,omitempty"`
-	SampleSum        *float64  `protobuf:"fixed64,2,opt,name=sample_sum" json:"sample_sum,omitempty"`
-	Bucket           []*Bucket `protobuf:"bytes,3,rep,name=bucket" json:"bucket,omitempty"`
-	XXX_unrecognized []byte    `json:"-"`
+	SampleCount          *uint64   `protobuf:"varint,1,opt,name=sample_count,json=sampleCount" json:"sample_count,omitempty"`
+	SampleSum            *float64  `protobuf:"fixed64,2,opt,name=sample_sum,json=sampleSum" json:"sample_sum,omitempty"`
+	Bucket               []*Bucket `protobuf:"bytes,3,rep,name=bucket" json:"bucket,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
 func (m *Histogram) Reset()         { *m = Histogram{} }
 func (m *Histogram) String() string { return proto.CompactTextString(m) }
 func (*Histogram) ProtoMessage()    {}
+func (*Histogram) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{6}
+}
+
+func (m *Histogram) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Histogram.Unmarshal(m, b)
+}
+func (m *Histogram) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Histogram.Marshal(b, m, deterministic)
+}
+func (m *Histogram) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Histogram.Merge(m, src)
+}
+func (m *Histogram) XXX_Size() int {
+	return xxx_messageInfo_Histogram.Size(m)
+}
+func (m *Histogram) XXX_DiscardUnknown() {
+	xxx_messageInfo_Histogram.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Histogram proto.InternalMessageInfo
 
 func (m *Histogram) GetSampleCount() uint64 {
 	if m != nil && m.SampleCount != nil {
@@ -232,14 +400,38 @@ func (m *Histogram) GetBucket() []*Bucket {
 }
 
 type Bucket struct {
-	CumulativeCount  *uint64  `protobuf:"varint,1,opt,name=cumulative_count" json:"cumulative_count,omitempty"`
-	UpperBound       *float64 `protobuf:"fixed64,2,opt,name=upper_bound" json:"upper_bound,omitempty"`
-	XXX_unrecognized []byte   `json:"-"`
+	CumulativeCount      *uint64   `protobuf:"varint,1,opt,name=cumulative_count,json=cumulativeCount" json:"cumulative_count,omitempty"`
+	UpperBound           *float64  `protobuf:"fixed64,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"`
+	Exemplar             *Exemplar `protobuf:"bytes,3,opt,name=exemplar" json:"exemplar,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
+	XXX_unrecognized     []byte    `json:"-"`
+	XXX_sizecache        int32     `json:"-"`
 }
 
 func (m *Bucket) Reset()         { *m = Bucket{} }
 func (m *Bucket) String() string { return proto.CompactTextString(m) }
 func (*Bucket) ProtoMessage()    {}
+func (*Bucket) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{7}
+}
+
+func (m *Bucket) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Bucket.Unmarshal(m, b)
+}
+func (m *Bucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Bucket.Marshal(b, m, deterministic)
+}
+func (m *Bucket) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Bucket.Merge(m, src)
+}
+func (m *Bucket) XXX_Size() int {
+	return xxx_messageInfo_Bucket.Size(m)
+}
+func (m *Bucket) XXX_DiscardUnknown() {
+	xxx_messageInfo_Bucket.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Bucket proto.InternalMessageInfo
 
 func (m *Bucket) GetCumulativeCount() uint64 {
 	if m != nil && m.CumulativeCount != nil {
@@ -255,20 +447,105 @@ func (m *Bucket) GetUpperBound() float64 {
 	return 0
 }
 
+func (m *Bucket) GetExemplar() *Exemplar {
+	if m != nil {
+		return m.Exemplar
+	}
+	return nil
+}
+
+type Exemplar struct {
+	Label                []*LabelPair         `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"`
+	Value                *float64             `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"`
+	Timestamp            *timestamp.Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *Exemplar) Reset()         { *m = Exemplar{} }
+func (m *Exemplar) String() string { return proto.CompactTextString(m) }
+func (*Exemplar) ProtoMessage()    {}
+func (*Exemplar) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{8}
+}
+
+func (m *Exemplar) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Exemplar.Unmarshal(m, b)
+}
+func (m *Exemplar) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Exemplar.Marshal(b, m, deterministic)
+}
+func (m *Exemplar) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Exemplar.Merge(m, src)
+}
+func (m *Exemplar) XXX_Size() int {
+	return xxx_messageInfo_Exemplar.Size(m)
+}
+func (m *Exemplar) XXX_DiscardUnknown() {
+	xxx_messageInfo_Exemplar.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Exemplar proto.InternalMessageInfo
+
+func (m *Exemplar) GetLabel() []*LabelPair {
+	if m != nil {
+		return m.Label
+	}
+	return nil
+}
+
+func (m *Exemplar) GetValue() float64 {
+	if m != nil && m.Value != nil {
+		return *m.Value
+	}
+	return 0
+}
+
+func (m *Exemplar) GetTimestamp() *timestamp.Timestamp {
+	if m != nil {
+		return m.Timestamp
+	}
+	return nil
+}
+
 type Metric struct {
-	Label            []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"`
-	Gauge            *Gauge       `protobuf:"bytes,2,opt,name=gauge" json:"gauge,omitempty"`
-	Counter          *Counter     `protobuf:"bytes,3,opt,name=counter" json:"counter,omitempty"`
-	Summary          *Summary     `protobuf:"bytes,4,opt,name=summary" json:"summary,omitempty"`
-	Untyped          *Untyped     `protobuf:"bytes,5,opt,name=untyped" json:"untyped,omitempty"`
-	Histogram        *Histogram   `protobuf:"bytes,7,opt,name=histogram" json:"histogram,omitempty"`
-	TimestampMs      *int64       `protobuf:"varint,6,opt,name=timestamp_ms" json:"timestamp_ms,omitempty"`
-	XXX_unrecognized []byte       `json:"-"`
+	Label                []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"`
+	Gauge                *Gauge       `protobuf:"bytes,2,opt,name=gauge" json:"gauge,omitempty"`
+	Counter              *Counter     `protobuf:"bytes,3,opt,name=counter" json:"counter,omitempty"`
+	Summary              *Summary     `protobuf:"bytes,4,opt,name=summary" json:"summary,omitempty"`
+	Untyped              *Untyped     `protobuf:"bytes,5,opt,name=untyped" json:"untyped,omitempty"`
+	Histogram            *Histogram   `protobuf:"bytes,7,opt,name=histogram" json:"histogram,omitempty"`
+	TimestampMs          *int64       `protobuf:"varint,6,opt,name=timestamp_ms,json=timestampMs" json:"timestamp_ms,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
+	XXX_unrecognized     []byte       `json:"-"`
+	XXX_sizecache        int32        `json:"-"`
 }
 
 func (m *Metric) Reset()         { *m = Metric{} }
 func (m *Metric) String() string { return proto.CompactTextString(m) }
 func (*Metric) ProtoMessage()    {}
+func (*Metric) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{9}
+}
+
+func (m *Metric) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Metric.Unmarshal(m, b)
+}
+func (m *Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Metric.Marshal(b, m, deterministic)
+}
+func (m *Metric) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Metric.Merge(m, src)
+}
+func (m *Metric) XXX_Size() int {
+	return xxx_messageInfo_Metric.Size(m)
+}
+func (m *Metric) XXX_DiscardUnknown() {
+	xxx_messageInfo_Metric.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Metric proto.InternalMessageInfo
 
 func (m *Metric) GetLabel() []*LabelPair {
 	if m != nil {
@@ -320,16 +597,39 @@ func (m *Metric) GetTimestampMs() int64 {
 }
 
 type MetricFamily struct {
-	Name             *string     `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	Help             *string     `protobuf:"bytes,2,opt,name=help" json:"help,omitempty"`
-	Type             *MetricType `protobuf:"varint,3,opt,name=type,enum=io.prometheus.client.MetricType" json:"type,omitempty"`
-	Metric           []*Metric   `protobuf:"bytes,4,rep,name=metric" json:"metric,omitempty"`
-	XXX_unrecognized []byte      `json:"-"`
+	Name                 *string     `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+	Help                 *string     `protobuf:"bytes,2,opt,name=help" json:"help,omitempty"`
+	Type                 *MetricType `protobuf:"varint,3,opt,name=type,enum=io.prometheus.client.MetricType" json:"type,omitempty"`
+	Metric               []*Metric   `protobuf:"bytes,4,rep,name=metric" json:"metric,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
 }
 
 func (m *MetricFamily) Reset()         { *m = MetricFamily{} }
 func (m *MetricFamily) String() string { return proto.CompactTextString(m) }
 func (*MetricFamily) ProtoMessage()    {}
+func (*MetricFamily) Descriptor() ([]byte, []int) {
+	return fileDescriptor_d1e5ddb18987a258, []int{10}
+}
+
+func (m *MetricFamily) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_MetricFamily.Unmarshal(m, b)
+}
+func (m *MetricFamily) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_MetricFamily.Marshal(b, m, deterministic)
+}
+func (m *MetricFamily) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_MetricFamily.Merge(m, src)
+}
+func (m *MetricFamily) XXX_Size() int {
+	return xxx_messageInfo_MetricFamily.Size(m)
+}
+func (m *MetricFamily) XXX_DiscardUnknown() {
+	xxx_messageInfo_MetricFamily.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MetricFamily proto.InternalMessageInfo
 
 func (m *MetricFamily) GetName() string {
 	if m != nil && m.Name != nil {
@@ -358,3 +658,49 @@ func (m *MetricFamily) GetMetric() []*Metric {
 	}
 	return nil
 }
+
+var fileDescriptor_d1e5ddb18987a258 = []byte{
+	// 672 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcd, 0x6e, 0xd3, 0x4c,
+	0x14, 0xfd, 0xdc, 0x38, 0x3f, 0xbe, 0xe9, 0x07, 0xd1, 0xa8, 0x0b, 0xab, 0x50, 0x12, 0xbc, 0x2a,
+	0x2c, 0x1c, 0x51, 0xb5, 0x02, 0x15, 0x58, 0xb4, 0x25, 0xa4, 0x48, 0xa4, 0x2d, 0x93, 0x64, 0x51,
+	0x58, 0x44, 0x8e, 0x3b, 0x38, 0x16, 0x9e, 0x8c, 0xb1, 0x3d, 0x15, 0x59, 0xb3, 0x60, 0x0b, 0xaf,
+	0xc0, 0x8b, 0x82, 0xe6, 0xc7, 0x36, 0x15, 0x6e, 0x25, 0x10, 0xbb, 0x99, 0x3b, 0xe7, 0x5c, 0x9f,
+	0x3b, 0x39, 0x67, 0x02, 0x4e, 0xc8, 0xfa, 0x71, 0xc2, 0x28, 0xc9, 0x16, 0x84, 0xa7, 0x7d, 0x3f,
+	0x0a, 0xc9, 0x32, 0xeb, 0x53, 0x92, 0x25, 0xa1, 0x9f, 0xba, 0x71, 0xc2, 0x32, 0x86, 0x36, 0x42,
+	0xe6, 0x96, 0x18, 0x57, 0x61, 0x36, 0xbb, 0x01, 0x63, 0x41, 0x44, 0xfa, 0x12, 0x33, 0xe7, 0xef,
+	0xfb, 0x59, 0x48, 0x49, 0x9a, 0x79, 0x34, 0x56, 0x34, 0x67, 0x0f, 0xac, 0xd7, 0xde, 0x9c, 0x44,
+	0x67, 0x5e, 0x98, 0x20, 0x04, 0xe6, 0xd2, 0xa3, 0xc4, 0x36, 0x7a, 0xc6, 0xb6, 0x85, 0xe5, 0x1a,
+	0x6d, 0x40, 0xfd, 0xd2, 0x8b, 0x38, 0xb1, 0xd7, 0x64, 0x51, 0x6d, 0x9c, 0x2d, 0xa8, 0x0f, 0x3d,
+	0x1e, 0xfc, 0x72, 0x2c, 0x38, 0x46, 0x7e, 0xfc, 0x0e, 0x9a, 0x47, 0x8c, 0x2f, 0x33, 0x92, 0x54,
+	0x03, 0xd0, 0x3e, 0xb4, 0xc8, 0x27, 0x42, 0xe3, 0xc8, 0x4b, 0x64, 0xe3, 0xf6, 0xce, 0x3d, 0xb7,
+	0x6a, 0x00, 0x77, 0xa0, 0x51, 0xb8, 0xc0, 0x3b, 0xcf, 0xa0, 0xf5, 0x86, 0x7b, 0xcb, 0x2c, 0x8c,
+	0x08, 0xda, 0x84, 0xd6, 0x47, 0xbd, 0xd6, 0x1f, 0x28, 0xf6, 0x57, 0x95, 0x17, 0xd2, 0xbe, 0x18,
+	0xd0, 0x1c, 0x73, 0x4a, 0xbd, 0x64, 0x85, 0xee, 0xc3, 0x7a, 0xea, 0xd1, 0x38, 0x22, 0x33, 0x5f,
+	0xa8, 0x95, 0x1d, 0x4c, 0xdc, 0x56, 0x35, 0x39, 0x00, 0xda, 0x02, 0xd0, 0x90, 0x94, 0x53, 0xdd,
+	0xc9, 0x52, 0x95, 0x31, 0xa7, 0x62, 0x8e, 0xe2, 0xfb, 0xb5, 0x5e, 0xed, 0xfa, 0x39, 0x72, 0xc5,
+	0xa5, 0x3e, 0xa7, 0x0b, 0xcd, 0xe9, 0x32, 0x5b, 0xc5, 0xe4, 0xe2, 0x9a, 0x5b, 0xfc, 0x6c, 0x80,
+	0x75, 0x1c, 0xa6, 0x19, 0x0b, 0x12, 0x8f, 0xfe, 0x03, 0xb1, 0xbb, 0xd0, 0x98, 0x73, 0xff, 0x03,
+	0xc9, 0xb4, 0xd4, 0xbb, 0xd5, 0x52, 0x0f, 0x25, 0x06, 0x6b, 0xac, 0xf3, 0xd5, 0x80, 0x86, 0x2a,
+	0xa1, 0x07, 0xd0, 0xf1, 0x39, 0xe5, 0x91, 0x97, 0x85, 0x97, 0x57, 0x65, 0xdc, 0x2e, 0xeb, 0x4a,
+	0x4a, 0x17, 0xda, 0x3c, 0x8e, 0x49, 0x32, 0x9b, 0x33, 0xbe, 0xbc, 0xd0, 0x5a, 0x40, 0x96, 0x0e,
+	0x45, 0xe5, 0x8a, 0x03, 0x6a, 0x7f, 0xe8, 0x80, 0x6f, 0x06, 0xb4, 0xf2, 0x32, 0xda, 0x83, 0x7a,
+	0x24, 0x1c, 0x6c, 0x1b, 0x72, 0xa8, 0x6e, 0x75, 0x97, 0xc2, 0xe4, 0x58, 0xa1, 0xab, 0xdd, 0x81,
+	0x9e, 0x80, 0x55, 0x24, 0x44, 0xcb, 0xda, 0x74, 0x55, 0x86, 0xdc, 0x3c, 0x43, 0xee, 0x24, 0x47,
+	0xe0, 0x12, 0xec, 0xfc, 0x58, 0x83, 0xc6, 0x48, 0x26, 0xf2, 0x6f, 0x15, 0x3d, 0x82, 0x7a, 0x20,
+	0x32, 0xa5, 0x03, 0x71, 0xa7, 0x9a, 0x26, 0x63, 0x87, 0x15, 0x12, 0x3d, 0x86, 0xa6, 0xaf, 0x72,
+	0xa6, 0xc5, 0x6e, 0x55, 0x93, 0x74, 0x18, 0x71, 0x8e, 0x16, 0xc4, 0x54, 0x85, 0xc0, 0x36, 0x6f,
+	0x22, 0xea, 0xa4, 0xe0, 0x1c, 0x2d, 0x88, 0x5c, 0x99, 0xd6, 0xae, 0xdf, 0x44, 0xd4, 0xce, 0xc6,
+	0x39, 0x1a, 0x3d, 0x07, 0x6b, 0x91, 0x7b, 0xd9, 0x6e, 0x4a, 0xea, 0x35, 0x17, 0x53, 0x58, 0x1e,
+	0x97, 0x0c, 0xe1, 0xfe, 0xe2, 0xae, 0x67, 0x34, 0xb5, 0x1b, 0x3d, 0x63, 0xbb, 0x86, 0xdb, 0x45,
+	0x6d, 0x94, 0x3a, 0xdf, 0x0d, 0x58, 0x57, 0xbf, 0xc0, 0x4b, 0x8f, 0x86, 0xd1, 0xaa, 0xf2, 0x39,
+	0x43, 0x60, 0x2e, 0x48, 0x14, 0xeb, 0xd7, 0x4c, 0xae, 0xd1, 0x2e, 0x98, 0x42, 0xa3, 0xbc, 0xc2,
+	0x5b, 0x3b, 0xbd, 0x6a, 0x55, 0xaa, 0xf3, 0x64, 0x15, 0x13, 0x2c, 0xd1, 0x22, 0x4d, 0xea, 0x05,
+	0xb6, 0xcd, 0x9b, 0xd2, 0xa4, 0x78, 0x58, 0x63, 0x1f, 0x8e, 0x00, 0xca, 0x4e, 0xa8, 0x0d, 0xcd,
+	0xa3, 0xd3, 0xe9, 0xc9, 0x64, 0x80, 0x3b, 0xff, 0x21, 0x0b, 0xea, 0xc3, 0x83, 0xe9, 0x70, 0xd0,
+	0x31, 0x44, 0x7d, 0x3c, 0x1d, 0x8d, 0x0e, 0xf0, 0x79, 0x67, 0x4d, 0x6c, 0xa6, 0x27, 0x93, 0xf3,
+	0xb3, 0xc1, 0x8b, 0x4e, 0x0d, 0xfd, 0x0f, 0xd6, 0xf1, 0xab, 0xf1, 0xe4, 0x74, 0x88, 0x0f, 0x46,
+	0x1d, 0xf3, 0x10, 0x43, 0xe5, 0xbb, 0xff, 0x76, 0x3f, 0x08, 0xb3, 0x05, 0x9f, 0xbb, 0x3e, 0xa3,
+	0xbf, 0xff, 0x73, 0xcc, 0x28, 0xbb, 0x20, 0x51, 0x3f, 0x60, 0x4f, 0x43, 0x36, 0x2b, 0x4f, 0x67,
+	0xea, 0xf4, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2e, 0x33, 0xa8, 0xbc, 0x6e, 0x06, 0x00, 0x00,
+}
diff --git a/metrics.proto b/io/prometheus/client/metrics.proto
similarity index 76%
rename from metrics.proto
rename to io/prometheus/client/metrics.proto
index 0b84af9..c9546f1 100644
--- a/metrics.proto
+++ b/io/prometheus/client/metrics.proto
@@ -15,6 +15,9 @@ syntax = "proto2";
 
 package io.prometheus.client;
 option java_package = "io.prometheus.client";
+option go_package = "github.com/prometheus/client_model/go;io_prometheus_client";
+
+import "google/protobuf/timestamp.proto";
 
 message LabelPair {
   optional string name  = 1;
@@ -34,7 +37,8 @@ message Gauge {
 }
 
 message Counter {
-  optional double value = 1;
+  optional double   value    = 1;
+  optional Exemplar exemplar = 2;
 }
 
 message Quantile {
@@ -59,8 +63,15 @@ message Histogram {
 }
 
 message Bucket {
-  optional uint64 cumulative_count = 1; // Cumulative in increasing order.
-  optional double upper_bound = 2;      // Inclusive.
+  optional uint64   cumulative_count = 1; // Cumulative in increasing order.
+  optional double   upper_bound      = 2; // Inclusive.
+  optional Exemplar exemplar         = 3;
+}
+
+message Exemplar {
+  repeated LabelPair                 label     = 1;
+  optional double                    value     = 2;
+  optional google.protobuf.Timestamp timestamp = 3; // OpenMetrics-style.
 }
 
 message Metric {
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index 4d34c90..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>io.prometheus.client</groupId>
-    <artifactId>model</artifactId>
-    <version>0.0.3-SNAPSHOT</version>
-
-    <parent>
-        <groupId>org.sonatype.oss</groupId>
-        <artifactId>oss-parent</artifactId>
-        <version>7</version>
-    </parent>
-
-    <name>Prometheus Client Data Model</name>
-    <url>http://github.com/prometheus/client_model</url>
-    <description>
-      Prometheus Client Data Model: Generated Protocol Buffer Assets
-    </description>
-
-    <licenses>
-        <license>
-            <name>The Apache Software License, Version 2.0</name>
-            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-            <distribution>repo</distribution>
-        </license>
-    </licenses>
-
-    <scm>
-        <connection>scm:git:git@github.com:prometheus/client_model.git</connection>
-        <developerConnection>scm:git:git@github.com:prometheus/client_model.git</developerConnection>
-        <url>git@github.com:prometheus/client_model.git</url>
-    </scm>
-
-    <developers>
-        <developer>
-            <id>mtp</id>
-            <name>Matt T. Proud</name>
-            <email>matt.proud@gmail.com</email>
-        </developer>
-    </developers>
-
-    <dependencies>
-      <dependency>
-        <groupId>com.google.protobuf</groupId>
-        <artifactId>protobuf-java</artifactId>
-        <version>2.5.0</version>
-      </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-javadoc-plugin</artifactId>
-                <version>2.8</version>
-                <configuration>
-                    <encoding>UTF-8</encoding>
-                    <docencoding>UTF-8</docencoding>
-                    <linksource>true</linksource>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>generate-javadoc-site-report</id>
-                        <phase>site</phase>
-                        <goals>
-                            <goal>javadoc</goal>
-                        </goals>
-                    </execution>
-                    <execution>
-                      <id>attach-javadocs</id>
-                      <goals>
-                        <goal>jar</goal>
-                      </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.6</source>
-                    <target>1.6</target>
-                </configuration>
-                <version>3.1</version>
-            </plugin>
-            <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-source-plugin</artifactId>
-              <version>2.2.1</version>
-              <executions>
-                <execution>
-                  <id>attach-sources</id>
-                  <goals>
-                    <goal>jar</goal>
-                  </goals>
-                </execution>
-              </executions>
-            </plugin>
-        </plugins>
-    </build>
-    <profiles>
-        <profile>
-            <id>release-sign-artifacts</id>
-            <activation>
-                <property>
-                    <name>performRelease</name>
-                    <value>true</value>
-                </property>
-            </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-gpg-plugin</artifactId>
-                        <version>1.4</version>
-                        <executions>
-                            <execution>
-                                <id>sign-artifacts</id>
-                                <phase>verify</phase>
-                                <goals>
-                                    <goal>sign</goal>
-                                </goals>
-                            </execution>
-                        </executions>
-                    </plugin>
-                </plugins>
-            </build>
-        </profile>
-    </profiles>
-</project>
diff --git a/python/prometheus/__init__.py b/python/prometheus/__init__.py
deleted file mode 100644
index 617c0ce..0000000
--- a/python/prometheus/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
- # Copyright 2013 Prometheus Team
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
-
- # http://www.apache.org/licenses/LICENSE-2.0
-
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
diff --git a/python/prometheus/client/__init__.py b/python/prometheus/client/__init__.py
deleted file mode 100644
index 617c0ce..0000000
--- a/python/prometheus/client/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
- # Copyright 2013 Prometheus Team
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
-
- # http://www.apache.org/licenses/LICENSE-2.0
-
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
diff --git a/python/prometheus/client/model/__init__.py b/python/prometheus/client/model/__init__.py
deleted file mode 100644
index d40327c..0000000
--- a/python/prometheus/client/model/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
- # Copyright 2013 Prometheus Team
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
-
- # http://www.apache.org/licenses/LICENSE-2.0
-
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
-
-__all__ = ['metrics_pb2']
diff --git a/python/prometheus/client/model/metrics_pb2.py b/python/prometheus/client/model/metrics_pb2.py
deleted file mode 100644
index 8c239ac..0000000
--- a/python/prometheus/client/model/metrics_pb2.py
+++ /dev/null
@@ -1,575 +0,0 @@
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: metrics.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-from google.protobuf import descriptor_pb2
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='metrics.proto',
-  package='io.prometheus.client',
-  serialized_pb=_b('\n\rmetrics.proto\x12\x14io.prometheus.client\"(\n\tLabelPair\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x16\n\x05Gauge\x12\r\n\x05value\x18\x01 \x01(\x01\"\x18\n\x07\x43ounter\x12\r\n\x05value\x18\x01 \x01(\x01\"+\n\x08Quantile\x12\x10\n\x08quantile\x18\x01 \x01(\x01\x12\r\n\x05value\x18\x02 \x01(\x01\"e\n\x07Summary\x12\x14\n\x0csample_count\x18\x01 \x01(\x04\x12\x12\n\nsample_sum\x18\x02 \x01(\x01\x12\x30\n\x08quantile\x18\x03 \x03(\x0b\x32\x1e.io.prometheus.client.Quantile\"\x18\n\x07Untyped\x12\r\n\x05value\x18\x01 \x01(\x01\"c\n\tHistogram\x12\x14\n\x0csample_count\x18\x01 \x01(\x04\x12\x12\n\nsample_sum\x18\x02 \x01(\x01\x12,\n\x06\x62ucket\x18\x03 \x03(\x0b\x32\x1c.io.prometheus.client.Bucket\"7\n\x06\x42ucket\x12\x18\n\x10\x63umulative_count\x18\x01 \x01(\x04\x12\x13\n\x0bupper_bound\x18\x02 \x01(\x01\"\xbe\x02\n\x06Metric\x12.\n\x05label\x18\x01 \x03(\x0b\x32\x1f.io.prometheus.client.LabelPair\x12*\n\x05gauge\x18\x02 \x01(\x0b\x32\x1b.io.prometheus.client.Gauge\x12.\n\x07\x63ounter\x18\x03 \x01(\x0b\x32\x1d.io.prometheus.client.Counter\x12.\n\x07summary\x18\x04 \x01(\x0b\x32\x1d.io.prometheus.client.Summary\x12.\n\x07untyped\x18\x05 \x01(\x0b\x32\x1d.io.prometheus.client.Untyped\x12\x32\n\thistogram\x18\x07 \x01(\x0b\x32\x1f.io.prometheus.client.Histogram\x12\x14\n\x0ctimestamp_ms\x18\x06 \x01(\x03\"\x88\x01\n\x0cMetricFamily\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04help\x18\x02 \x01(\t\x12.\n\x04type\x18\x03 \x01(\x0e\x32 .io.prometheus.client.MetricType\x12,\n\x06metric\x18\x04 \x03(\x0b\x32\x1c.io.prometheus.client.Metric*M\n\nMetricType\x12\x0b\n\x07\x43OUNTER\x10\x00\x12\t\n\x05GAUGE\x10\x01\x12\x0b\n\x07SUMMARY\x10\x02\x12\x0b\n\x07UNTYPED\x10\x03\x12\r\n\tHISTOGRAM\x10\x04\x42\x16\n\x14io.prometheus.client')
-)
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-_METRICTYPE = _descriptor.EnumDescriptor(
-  name='MetricType',
-  full_name='io.prometheus.client.MetricType',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='COUNTER', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='GAUGE', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='SUMMARY', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='UNTYPED', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='HISTOGRAM', index=4, number=4,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=923,
-  serialized_end=1000,
-)
-_sym_db.RegisterEnumDescriptor(_METRICTYPE)
-
-MetricType = enum_type_wrapper.EnumTypeWrapper(_METRICTYPE)
-COUNTER = 0
-GAUGE = 1
-SUMMARY = 2
-UNTYPED = 3
-HISTOGRAM = 4
-
-
-
-_LABELPAIR = _descriptor.Descriptor(
-  name='LabelPair',
-  full_name='io.prometheus.client.LabelPair',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='io.prometheus.client.LabelPair.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='io.prometheus.client.LabelPair.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=39,
-  serialized_end=79,
-)
-
-
-_GAUGE = _descriptor.Descriptor(
-  name='Gauge',
-  full_name='io.prometheus.client.Gauge',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='value', full_name='io.prometheus.client.Gauge.value', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=81,
-  serialized_end=103,
-)
-
-
-_COUNTER = _descriptor.Descriptor(
-  name='Counter',
-  full_name='io.prometheus.client.Counter',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='value', full_name='io.prometheus.client.Counter.value', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=105,
-  serialized_end=129,
-)
-
-
-_QUANTILE = _descriptor.Descriptor(
-  name='Quantile',
-  full_name='io.prometheus.client.Quantile',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='quantile', full_name='io.prometheus.client.Quantile.quantile', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='io.prometheus.client.Quantile.value', index=1,
-      number=2, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=131,
-  serialized_end=174,
-)
-
-
-_SUMMARY = _descriptor.Descriptor(
-  name='Summary',
-  full_name='io.prometheus.client.Summary',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='sample_count', full_name='io.prometheus.client.Summary.sample_count', index=0,
-      number=1, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='sample_sum', full_name='io.prometheus.client.Summary.sample_sum', index=1,
-      number=2, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='quantile', full_name='io.prometheus.client.Summary.quantile', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=176,
-  serialized_end=277,
-)
-
-
-_UNTYPED = _descriptor.Descriptor(
-  name='Untyped',
-  full_name='io.prometheus.client.Untyped',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='value', full_name='io.prometheus.client.Untyped.value', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=279,
-  serialized_end=303,
-)
-
-
-_HISTOGRAM = _descriptor.Descriptor(
-  name='Histogram',
-  full_name='io.prometheus.client.Histogram',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='sample_count', full_name='io.prometheus.client.Histogram.sample_count', index=0,
-      number=1, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='sample_sum', full_name='io.prometheus.client.Histogram.sample_sum', index=1,
-      number=2, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='bucket', full_name='io.prometheus.client.Histogram.bucket', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=305,
-  serialized_end=404,
-)
-
-
-_BUCKET = _descriptor.Descriptor(
-  name='Bucket',
-  full_name='io.prometheus.client.Bucket',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='cumulative_count', full_name='io.prometheus.client.Bucket.cumulative_count', index=0,
-      number=1, type=4, cpp_type=4, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='upper_bound', full_name='io.prometheus.client.Bucket.upper_bound', index=1,
-      number=2, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=406,
-  serialized_end=461,
-)
-
-
-_METRIC = _descriptor.Descriptor(
-  name='Metric',
-  full_name='io.prometheus.client.Metric',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='label', full_name='io.prometheus.client.Metric.label', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='gauge', full_name='io.prometheus.client.Metric.gauge', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='counter', full_name='io.prometheus.client.Metric.counter', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='summary', full_name='io.prometheus.client.Metric.summary', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='untyped', full_name='io.prometheus.client.Metric.untyped', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='histogram', full_name='io.prometheus.client.Metric.histogram', index=5,
-      number=7, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='timestamp_ms', full_name='io.prometheus.client.Metric.timestamp_ms', index=6,
-      number=6, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=464,
-  serialized_end=782,
-)
-
-
-_METRICFAMILY = _descriptor.Descriptor(
-  name='MetricFamily',
-  full_name='io.prometheus.client.MetricFamily',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='io.prometheus.client.MetricFamily.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='help', full_name='io.prometheus.client.MetricFamily.help', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='type', full_name='io.prometheus.client.MetricFamily.type', index=2,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='metric', full_name='io.prometheus.client.MetricFamily.metric', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=785,
-  serialized_end=921,
-)
-
-_SUMMARY.fields_by_name['quantile'].message_type = _QUANTILE
-_HISTOGRAM.fields_by_name['bucket'].message_type = _BUCKET
-_METRIC.fields_by_name['label'].message_type = _LABELPAIR
-_METRIC.fields_by_name['gauge'].message_type = _GAUGE
-_METRIC.fields_by_name['counter'].message_type = _COUNTER
-_METRIC.fields_by_name['summary'].message_type = _SUMMARY
-_METRIC.fields_by_name['untyped'].message_type = _UNTYPED
-_METRIC.fields_by_name['histogram'].message_type = _HISTOGRAM
-_METRICFAMILY.fields_by_name['type'].enum_type = _METRICTYPE
-_METRICFAMILY.fields_by_name['metric'].message_type = _METRIC
-DESCRIPTOR.message_types_by_name['LabelPair'] = _LABELPAIR
-DESCRIPTOR.message_types_by_name['Gauge'] = _GAUGE
-DESCRIPTOR.message_types_by_name['Counter'] = _COUNTER
-DESCRIPTOR.message_types_by_name['Quantile'] = _QUANTILE
-DESCRIPTOR.message_types_by_name['Summary'] = _SUMMARY
-DESCRIPTOR.message_types_by_name['Untyped'] = _UNTYPED
-DESCRIPTOR.message_types_by_name['Histogram'] = _HISTOGRAM
-DESCRIPTOR.message_types_by_name['Bucket'] = _BUCKET
-DESCRIPTOR.message_types_by_name['Metric'] = _METRIC
-DESCRIPTOR.message_types_by_name['MetricFamily'] = _METRICFAMILY
-DESCRIPTOR.enum_types_by_name['MetricType'] = _METRICTYPE
-
-LabelPair = _reflection.GeneratedProtocolMessageType('LabelPair', (_message.Message,), dict(
-  DESCRIPTOR = _LABELPAIR,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair)
-  ))
-_sym_db.RegisterMessage(LabelPair)
-
-Gauge = _reflection.GeneratedProtocolMessageType('Gauge', (_message.Message,), dict(
-  DESCRIPTOR = _GAUGE,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge)
-  ))
-_sym_db.RegisterMessage(Gauge)
-
-Counter = _reflection.GeneratedProtocolMessageType('Counter', (_message.Message,), dict(
-  DESCRIPTOR = _COUNTER,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.Counter)
-  ))
-_sym_db.RegisterMessage(Counter)
-
-Quantile = _reflection.GeneratedProtocolMessageType('Quantile', (_message.Message,), dict(
-  DESCRIPTOR = _QUANTILE,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile)
-  ))
-_sym_db.RegisterMessage(Quantile)
-
-Summary = _reflection.GeneratedProtocolMessageType('Summary', (_message.Message,), dict(
-  DESCRIPTOR = _SUMMARY,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.Summary)
-  ))
-_sym_db.RegisterMessage(Summary)
-
-Untyped = _reflection.GeneratedProtocolMessageType('Untyped', (_message.Message,), dict(
-  DESCRIPTOR = _UNTYPED,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped)
-  ))
-_sym_db.RegisterMessage(Untyped)
-
-Histogram = _reflection.GeneratedProtocolMessageType('Histogram', (_message.Message,), dict(
-  DESCRIPTOR = _HISTOGRAM,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
-  ))
-_sym_db.RegisterMessage(Histogram)
-
-Bucket = _reflection.GeneratedProtocolMessageType('Bucket', (_message.Message,), dict(
-  DESCRIPTOR = _BUCKET,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
-  ))
-_sym_db.RegisterMessage(Bucket)
-
-Metric = _reflection.GeneratedProtocolMessageType('Metric', (_message.Message,), dict(
-  DESCRIPTOR = _METRIC,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
-  ))
-_sym_db.RegisterMessage(Metric)
-
-MetricFamily = _reflection.GeneratedProtocolMessageType('MetricFamily', (_message.Message,), dict(
-  DESCRIPTOR = _METRICFAMILY,
-  __module__ = 'metrics_pb2'
-  # @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
-  ))
-_sym_db.RegisterMessage(MetricFamily)
-
-
-DESCRIPTOR.has_options = True
-DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\024io.prometheus.client'))
-# @@protoc_insertion_point(module_scope)
diff --git a/ruby/.gitignore b/ruby/.gitignore
deleted file mode 100644
index 8442a47..0000000
--- a/ruby/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-*.gem
-.bundle
-Gemfile.lock
-pkg
-vendor/bundle
diff --git a/ruby/Gemfile b/ruby/Gemfile
deleted file mode 100644
index 1ff638c..0000000
--- a/ruby/Gemfile
+++ /dev/null
@@ -1,4 +0,0 @@
-source 'https://rubygems.org'
-
-# Specify your gem's dependencies in prometheus-client-model.gemspec
-gemspec
diff --git a/ruby/LICENSE b/ruby/LICENSE
deleted file mode 100644
index 11069ed..0000000
--- a/ruby/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
-                              Apache License
-                        Version 2.0, January 2004
-                     http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-   "License" shall mean the terms and conditions for use, reproduction,
-   and distribution as defined by Sections 1 through 9 of this document.
-
-   "Licensor" shall mean the copyright owner or entity authorized by
-   the copyright owner that is granting the License.
-
-   "Legal Entity" shall mean the union of the acting entity and all
-   other entities that control, are controlled by, or are under common
-   control with that entity. For the purposes of this definition,
-   "control" means (i) the power, direct or indirect, to cause the
-   direction or management of such entity, whether by contract or
-   otherwise, or (ii) ownership of fifty percent (50%) or more of the
-   outstanding shares, or (iii) beneficial ownership of such entity.
-
-   "You" (or "Your") shall mean an individual or Legal Entity
-   exercising permissions granted by this License.
-
-   "Source" form shall mean the preferred form for making modifications,
-   including but not limited to software source code, documentation
-   source, and configuration files.
-
-   "Object" form shall mean any form resulting from mechanical
-   transformation or translation of a Source form, including but
-   not limited to compiled object code, generated documentation,
-   and conversions to other media types.
-
-   "Work" shall mean the work of authorship, whether in Source or
-   Object form, made available under the License, as indicated by a
-   copyright notice that is included in or attached to the work
-   (an example is provided in the Appendix below).
-
-   "Derivative Works" shall mean any work, whether in Source or Object
-   form, that is based on (or derived from) the Work and for which the
-   editorial revisions, annotations, elaborations, or other modifications
-   represent, as a whole, an original work of authorship. For the purposes
-   of this License, Derivative Works shall not include works that remain
-   separable from, or merely link (or bind by name) to the interfaces of,
-   the Work and Derivative Works thereof.
-
-   "Contribution" shall mean any work of authorship, including
-   the original version of the Work and any modifications or additions
-   to that Work or Derivative Works thereof, that is intentionally
-   submitted to Licensor for inclusion in the Work by the copyright owner
-   or by an individual or Legal Entity authorized to submit on behalf of
-   the copyright owner. For the purposes of this definition, "submitted"
-   means any form of electronic, verbal, or written communication sent
-   to the Licensor or its representatives, including but not limited to
-   communication on electronic mailing lists, source code control systems,
-   and issue tracking systems that are managed by, or on behalf of, the
-   Licensor for the purpose of discussing and improving the Work, but
-   excluding communication that is conspicuously marked or otherwise
-   designated in writing by the copyright owner as "Not a Contribution."
-
-   "Contributor" shall mean Licensor and any individual or Legal Entity
-   on behalf of whom a Contribution has been received by Licensor and
-   subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   copyright license to reproduce, prepare Derivative Works of,
-   publicly display, publicly perform, sublicense, and distribute the
-   Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-   this License, each Contributor hereby grants to You a perpetual,
-   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-   (except as stated in this section) patent license to make, have made,
-   use, offer to sell, sell, import, and otherwise transfer the Work,
-   where such license applies only to those patent claims licensable
-   by such Contributor that are necessarily infringed by their
-   Contribution(s) alone or by combination of their Contribution(s)
-   with the Work to which such Contribution(s) was submitted. If You
-   institute patent litigation against any entity (including a
-   cross-claim or counterclaim in a lawsuit) alleging that the Work
-   or a Contribution incorporated within the Work constitutes direct
-   or contributory patent infringement, then any patent licenses
-   granted to You under this License for that Work shall terminate
-   as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-   Work or Derivative Works thereof in any medium, with or without
-   modifications, and in Source or Object form, provided that You
-   meet the following conditions:
-
-   (a) You must give any other recipients of the Work or
-       Derivative Works a copy of this License; and
-
-   (b) You must cause any modified files to carry prominent notices
-       stating that You changed the files; and
-
-   (c) You must retain, in the Source form of any Derivative Works
-       that You distribute, all copyright, patent, trademark, and
-       attribution notices from the Source form of the Work,
-       excluding those notices that do not pertain to any part of
-       the Derivative Works; and
-
-   (d) If the Work includes a "NOTICE" text file as part of its
-       distribution, then any Derivative Works that You distribute must
-       include a readable copy of the attribution notices contained
-       within such NOTICE file, excluding those notices that do not
-       pertain to any part of the Derivative Works, in at least one
-       of the following places: within a NOTICE text file distributed
-       as part of the Derivative Works; within the Source form or
-       documentation, if provided along with the Derivative Works; or,
-       within a display generated by the Derivative Works, if and
-       wherever such third-party notices normally appear. The contents
-       of the NOTICE file are for informational purposes only and
-       do not modify the License. You may add Your own attribution
-       notices within Derivative Works that You distribute, alongside
-       or as an addendum to the NOTICE text from the Work, provided
-       that such additional attribution notices cannot be construed
-       as modifying the License.
-
-   You may add Your own copyright statement to Your modifications and
-   may provide additional or different license terms and conditions
-   for use, reproduction, or distribution of Your modifications, or
-   for any such Derivative Works as a whole, provided Your use,
-   reproduction, and distribution of the Work otherwise complies with
-   the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-   any Contribution intentionally submitted for inclusion in the Work
-   by You to the Licensor shall be under the terms and conditions of
-   this License, without any additional terms or conditions.
-   Notwithstanding the above, nothing herein shall supersede or modify
-   the terms of any separate license agreement you may have executed
-   with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-   names, trademarks, service marks, or product names of the Licensor,
-   except as required for reasonable and customary use in describing the
-   origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
-   agreed to in writing, Licensor provides the Work (and each
-   Contributor provides its Contributions) on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-   implied, including, without limitation, any warranties or conditions
-   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-   PARTICULAR PURPOSE. You are solely responsible for determining the
-   appropriateness of using or redistributing the Work and assume any
-   risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-   whether in tort (including negligence), contract, or otherwise,
-   unless required by applicable law (such as deliberate and grossly
-   negligent acts) or agreed to in writing, shall any Contributor be
-   liable to You for damages, including any direct, indirect, special,
-   incidental, or consequential damages of any character arising as a
-   result of this License or out of the use or inability to use the
-   Work (including but not limited to damages for loss of goodwill,
-   work stoppage, computer failure or malfunction, or any and all
-   other commercial damages or losses), even if such Contributor
-   has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
-   the Work or Derivative Works thereof, You may choose to offer,
-   and charge a fee for, acceptance of support, warranty, indemnity,
-   or other liability obligations and/or rights consistent with this
-   License. However, in accepting such obligations, You may act only
-   on Your own behalf and on Your sole responsibility, not on behalf
-   of any other Contributor, and only if You agree to indemnify,
-   defend, and hold each Contributor harmless for any liability
-   incurred by, or claims asserted against, such Contributor by reason
-   of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-APPENDIX: How to apply the Apache License to your work.
-
-   To apply the Apache License to your work, attach the following
-   boilerplate notice, with the fields enclosed by brackets "[]"
-   replaced with your own identifying information. (Don't include
-   the brackets!)  The text should be enclosed in the appropriate
-   comment syntax for the file format. We also recommend that a
-   file or class name and description of purpose be included on the
-   same "printed page" as the copyright notice for easier
-   identification within third-party archives.
-
-Copyright [yyyy] [name of copyright owner]
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/ruby/Makefile b/ruby/Makefile
deleted file mode 100644
index 09d544b..0000000
--- a/ruby/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-VENDOR_BUNDLE = vendor/bundle
-
-build: $(VENDOR_BUNDLE)/.bundled
-	BEEFCAKE_NAMESPACE=Prometheus::Client protoc --beefcake_out lib/prometheus/client/model -I .. ../metrics.proto
-
-$(VENDOR_BUNDLE):
-	mkdir -p $@
-
-$(VENDOR_BUNDLE)/.bundled: $(VENDOR_BUNDLE) Gemfile
-	bundle install --quiet --path $<
-	@touch $@
-
-clean:
-	-rm -f lib/prometheus/client/model/metrics.pb.rb
-	-rm -rf $(VENDOR_BUNDLE)
-
-.PHONY: build clean
diff --git a/ruby/README.md b/ruby/README.md
deleted file mode 100644
index c45fcc7..0000000
--- a/ruby/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Prometheus Ruby client model
-
-Data model artifacts for the [Prometheus Ruby client][1].
-
-## Installation
-
-    gem install prometheus-client-model
-
-## Usage
-
-Build the artifacts from the protobuf specification:
-
-    make build
-
-While this Gem's main purpose is to define the Prometheus data types for the
-[client][1], it's possible to use it without the client to decode a stream of
-delimited protobuf messages:
-
-```ruby
-require 'open-uri'
-require 'prometheus/client/model'
-
-CONTENT_TYPE = 'application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited'
-
-stream = open('http://localhost:9090/metrics', 'Accept' => CONTENT_TYPE).read
-while family = Prometheus::Client::MetricFamily.read_delimited(stream)
-  puts family
-end
-```
-
-[1]: https://github.com/prometheus/client_ruby
diff --git a/ruby/Rakefile b/ruby/Rakefile
deleted file mode 100644
index 2995527..0000000
--- a/ruby/Rakefile
+++ /dev/null
@@ -1 +0,0 @@
-require "bundler/gem_tasks"
diff --git a/ruby/lib/prometheus/client/model.rb b/ruby/lib/prometheus/client/model.rb
deleted file mode 100644
index b5303bf..0000000
--- a/ruby/lib/prometheus/client/model.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-require 'prometheus/client/model/metrics.pb'
-require 'prometheus/client/model/version'
diff --git a/ruby/lib/prometheus/client/model/metrics.pb.rb b/ruby/lib/prometheus/client/model/metrics.pb.rb
deleted file mode 100644
index a72114b..0000000
--- a/ruby/lib/prometheus/client/model/metrics.pb.rb
+++ /dev/null
@@ -1,111 +0,0 @@
-## Generated from metrics.proto for io.prometheus.client
-require "beefcake"
-
-module Prometheus
-  module Client
-
-    module MetricType
-      COUNTER = 0
-      GAUGE = 1
-      SUMMARY = 2
-      UNTYPED = 3
-      HISTOGRAM = 4
-    end
-
-    class LabelPair
-      include Beefcake::Message
-    end
-
-    class Gauge
-      include Beefcake::Message
-    end
-
-    class Counter
-      include Beefcake::Message
-    end
-
-    class Quantile
-      include Beefcake::Message
-    end
-
-    class Summary
-      include Beefcake::Message
-    end
-
-    class Untyped
-      include Beefcake::Message
-    end
-
-    class Histogram
-      include Beefcake::Message
-    end
-
-    class Bucket
-      include Beefcake::Message
-    end
-
-    class Metric
-      include Beefcake::Message
-    end
-
-    class MetricFamily
-      include Beefcake::Message
-    end
-
-    class LabelPair
-      optional :name, :string, 1
-      optional :value, :string, 2
-    end
-
-    class Gauge
-      optional :value, :double, 1
-    end
-
-    class Counter
-      optional :value, :double, 1
-    end
-
-    class Quantile
-      optional :quantile, :double, 1
-      optional :value, :double, 2
-    end
-
-    class Summary
-      optional :sample_count, :uint64, 1
-      optional :sample_sum, :double, 2
-      repeated :quantile, Quantile, 3
-    end
-
-    class Untyped
-      optional :value, :double, 1
-    end
-
-    class Histogram
-      optional :sample_count, :uint64, 1
-      optional :sample_sum, :double, 2
-      repeated :bucket, Bucket, 3
-    end
-
-    class Bucket
-      optional :cumulative_count, :uint64, 1
-      optional :upper_bound, :double, 2
-    end
-
-    class Metric
-      repeated :label, LabelPair, 1
-      optional :gauge, Gauge, 2
-      optional :counter, Counter, 3
-      optional :summary, Summary, 4
-      optional :untyped, Untyped, 5
-      optional :histogram, Histogram, 7
-      optional :timestamp_ms, :int64, 6
-    end
-
-    class MetricFamily
-      optional :name, :string, 1
-      optional :help, :string, 2
-      optional :type, MetricType, 3
-      repeated :metric, Metric, 4
-    end
-  end
-end
diff --git a/ruby/lib/prometheus/client/model/version.rb b/ruby/lib/prometheus/client/model/version.rb
deleted file mode 100644
index 00b5e86..0000000
--- a/ruby/lib/prometheus/client/model/version.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-module Prometheus
-  module Client
-    module Model
-      VERSION = '0.1.0'
-    end
-  end
-end
diff --git a/ruby/prometheus-client-model.gemspec b/ruby/prometheus-client-model.gemspec
deleted file mode 100644
index 438ba12..0000000
--- a/ruby/prometheus-client-model.gemspec
+++ /dev/null
@@ -1,22 +0,0 @@
-# coding: utf-8
-lib = File.expand_path('../lib', __FILE__)
-$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
-require 'prometheus/client/model/version'
-
-Gem::Specification.new do |spec|
-  spec.name          = 'prometheus-client-model'
-  spec.version       = Prometheus::Client::Model::VERSION
-  spec.authors       = ['Tobias Schmidt']
-  spec.email         = ['tobidt@gmail.com']
-  spec.summary       = 'Data model artifacts for the Prometheus Ruby client'
-  spec.homepage      = 'https://github.com/prometheus/client_model/tree/master/ruby'
-  spec.license       = 'Apache 2.0'
-
-  spec.files         = %w[README.md LICENSE] + Dir.glob('{lib/**/*}')
-  spec.require_paths = ['lib']
-
-  spec.add_dependency 'beefcake', '>= 0.4.0'
-
-  spec.add_development_dependency 'bundler', '~> 1.3'
-  spec.add_development_dependency 'rake'
-end
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 67b9f20..0000000
--- a/setup.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/python
-
-from setuptools import setup
-
-setup(
-    name = 'prometheus_client_model',
-    version = '0.0.1',
-    author = 'Matt T. Proud',
-    author_email = 'matt.proud@gmail.com',
-    description = 'Data model artifacts for the Prometheus client.',
-    license = 'Apache License 2.0',
-    url = 'http://github.com/prometheus/client_model',
-    packages = ['prometheus', 'prometheus/client', 'prometheus/client/model'],
-    package_dir = {'': 'python'},
-    requires = ['protobuf(==2.4.1)'],
-    platforms = 'Platform Independent',
-    classifiers = ['Development Status :: 3 - Alpha',
-                   'Intended Audience :: Developers',
-                   'Intended Audience :: System Administrators',
-                   'License :: OSI Approved :: Apache Software License',
-                   'Operating System :: OS Independent',
-                   'Topic :: Software Development :: Testing',
-                   'Topic :: System :: Monitoring'])
diff --git a/src/main/java/io/prometheus/client/Metrics.java b/src/main/java/io/prometheus/client/Metrics.java
deleted file mode 100644
index fb6218e..0000000
--- a/src/main/java/io/prometheus/client/Metrics.java
+++ /dev/null
@@ -1,7683 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: metrics.proto
-
-package io.prometheus.client;
-
-public final class Metrics {
-  private Metrics() {}
-  public static void registerAllExtensions(
-      com.google.protobuf.ExtensionRegistry registry) {
-  }
-  /**
-   * Protobuf enum {@code io.prometheus.client.MetricType}
-   */
-  public enum MetricType
-      implements com.google.protobuf.ProtocolMessageEnum {
-    /**
-     * <code>COUNTER = 0;</code>
-     */
-    COUNTER(0, 0),
-    /**
-     * <code>GAUGE = 1;</code>
-     */
-    GAUGE(1, 1),
-    /**
-     * <code>SUMMARY = 2;</code>
-     */
-    SUMMARY(2, 2),
-    /**
-     * <code>UNTYPED = 3;</code>
-     */
-    UNTYPED(3, 3),
-    /**
-     * <code>HISTOGRAM = 4;</code>
-     */
-    HISTOGRAM(4, 4),
-    ;
-
-    /**
-     * <code>COUNTER = 0;</code>
-     */
-    public static final int COUNTER_VALUE = 0;
-    /**
-     * <code>GAUGE = 1;</code>
-     */
-    public static final int GAUGE_VALUE = 1;
-    /**
-     * <code>SUMMARY = 2;</code>
-     */
-    public static final int SUMMARY_VALUE = 2;
-    /**
-     * <code>UNTYPED = 3;</code>
-     */
-    public static final int UNTYPED_VALUE = 3;
-    /**
-     * <code>HISTOGRAM = 4;</code>
-     */
-    public static final int HISTOGRAM_VALUE = 4;
-
-
-    public final int getNumber() { return value; }
-
-    public static MetricType valueOf(int value) {
-      switch (value) {
-        case 0: return COUNTER;
-        case 1: return GAUGE;
-        case 2: return SUMMARY;
-        case 3: return UNTYPED;
-        case 4: return HISTOGRAM;
-        default: return null;
-      }
-    }
-
-    public static com.google.protobuf.Internal.EnumLiteMap<MetricType>
-        internalGetValueMap() {
-      return internalValueMap;
-    }
-    private static com.google.protobuf.Internal.EnumLiteMap<MetricType>
-        internalValueMap =
-          new com.google.protobuf.Internal.EnumLiteMap<MetricType>() {
-            public MetricType findValueByNumber(int number) {
-              return MetricType.valueOf(number);
-            }
-          };
-
-    public final com.google.protobuf.Descriptors.EnumValueDescriptor
-        getValueDescriptor() {
-      return getDescriptor().getValues().get(index);
-    }
-    public final com.google.protobuf.Descriptors.EnumDescriptor
-        getDescriptorForType() {
-      return getDescriptor();
-    }
-    public static final com.google.protobuf.Descriptors.EnumDescriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.getDescriptor().getEnumTypes().get(0);
-    }
-
-    private static final MetricType[] VALUES = values();
-
-    public static MetricType valueOf(
-        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
-      if (desc.getType() != getDescriptor()) {
-        throw new java.lang.IllegalArgumentException(
-          "EnumValueDescriptor is not for this type.");
-      }
-      return VALUES[desc.getIndex()];
-    }
-
-    private final int index;
-    private final int value;
-
-    private MetricType(int index, int value) {
-      this.index = index;
-      this.value = value;
-    }
-
-    // @@protoc_insertion_point(enum_scope:io.prometheus.client.MetricType)
-  }
-
-  public interface LabelPairOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.LabelPair)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    boolean hasName();
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    java.lang.String getName();
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    com.google.protobuf.ByteString
-        getNameBytes();
-
-    /**
-     * <code>optional string value = 2;</code>
-     */
-    boolean hasValue();
-    /**
-     * <code>optional string value = 2;</code>
-     */
-    java.lang.String getValue();
-    /**
-     * <code>optional string value = 2;</code>
-     */
-    com.google.protobuf.ByteString
-        getValueBytes();
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.LabelPair}
-   */
-  public static final class LabelPair extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.LabelPair)
-      LabelPairOrBuilder {
-    // Use LabelPair.newBuilder() to construct.
-    private LabelPair(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private LabelPair(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final LabelPair defaultInstance;
-    public static LabelPair getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public LabelPair getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private LabelPair(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 10: {
-              com.google.protobuf.ByteString bs = input.readBytes();
-              bitField0_ |= 0x00000001;
-              name_ = bs;
-              break;
-            }
-            case 18: {
-              com.google.protobuf.ByteString bs = input.readBytes();
-              bitField0_ |= 0x00000002;
-              value_ = bs;
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.LabelPair.class, io.prometheus.client.Metrics.LabelPair.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<LabelPair> PARSER =
-        new com.google.protobuf.AbstractParser<LabelPair>() {
-      public LabelPair parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LabelPair(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<LabelPair> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int NAME_FIELD_NUMBER = 1;
-    private java.lang.Object name_;
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    public boolean hasName() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    public java.lang.String getName() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        if (bs.isValidUtf8()) {
-          name_ = s;
-        }
-        return s;
-      }
-    }
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    public com.google.protobuf.ByteString
-        getNameBytes() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        name_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int VALUE_FIELD_NUMBER = 2;
-    private java.lang.Object value_;
-    /**
-     * <code>optional string value = 2;</code>
-     */
-    public boolean hasValue() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    /**
-     * <code>optional string value = 2;</code>
-     */
-    public java.lang.String getValue() {
-      java.lang.Object ref = value_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        if (bs.isValidUtf8()) {
-          value_ = s;
-        }
-        return s;
-      }
-    }
-    /**
-     * <code>optional string value = 2;</code>
-     */
-    public com.google.protobuf.ByteString
-        getValueBytes() {
-      java.lang.Object ref = value_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        value_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    private void initFields() {
-      name_ = "";
-      value_ = "";
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, getValueBytes());
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, getValueBytes());
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.LabelPair parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.LabelPair parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.LabelPair parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.LabelPair parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.LabelPair parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.LabelPair parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.LabelPair parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.LabelPair parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.LabelPair parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.LabelPair prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.LabelPair}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair)
-        io.prometheus.client.Metrics.LabelPairOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.LabelPair.class, io.prometheus.client.Metrics.LabelPair.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.LabelPair.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        name_ = "";
-        bitField0_ = (bitField0_ & ~0x00000001);
-        value_ = "";
-        bitField0_ = (bitField0_ & ~0x00000002);
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.LabelPair getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.LabelPair.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.LabelPair build() {
-        io.prometheus.client.Metrics.LabelPair result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.LabelPair buildPartial() {
-        io.prometheus.client.Metrics.LabelPair result = new io.prometheus.client.Metrics.LabelPair(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.name_ = name_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.value_ = value_;
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.LabelPair) {
-          return mergeFrom((io.prometheus.client.Metrics.LabelPair)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.LabelPair other) {
-        if (other == io.prometheus.client.Metrics.LabelPair.getDefaultInstance()) return this;
-        if (other.hasName()) {
-          bitField0_ |= 0x00000001;
-          name_ = other.name_;
-          onChanged();
-        }
-        if (other.hasValue()) {
-          bitField0_ |= 0x00000002;
-          value_ = other.value_;
-          onChanged();
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.LabelPair parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.LabelPair) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.lang.Object name_ = "";
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public boolean hasName() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public java.lang.String getName() {
-        java.lang.Object ref = name_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          if (bs.isValidUtf8()) {
-            name_ = s;
-          }
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public com.google.protobuf.ByteString
-          getNameBytes() {
-        java.lang.Object ref = name_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          name_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public Builder setName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        name_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public Builder clearName() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        name_ = getDefaultInstance().getName();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public Builder setNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        name_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object value_ = "";
-      /**
-       * <code>optional string value = 2;</code>
-       */
-      public boolean hasValue() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      /**
-       * <code>optional string value = 2;</code>
-       */
-      public java.lang.String getValue() {
-        java.lang.Object ref = value_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          if (bs.isValidUtf8()) {
-            value_ = s;
-          }
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>optional string value = 2;</code>
-       */
-      public com.google.protobuf.ByteString
-          getValueBytes() {
-        java.lang.Object ref = value_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          value_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>optional string value = 2;</code>
-       */
-      public Builder setValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000002;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional string value = 2;</code>
-       */
-      public Builder clearValue() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        value_ = getDefaultInstance().getValue();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional string value = 2;</code>
-       */
-      public Builder setValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000002;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.LabelPair)
-    }
-
-    static {
-      defaultInstance = new LabelPair(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair)
-  }
-
-  public interface GaugeOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.Gauge)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    boolean hasValue();
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    double getValue();
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.Gauge}
-   */
-  public static final class Gauge extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.Gauge)
-      GaugeOrBuilder {
-    // Use Gauge.newBuilder() to construct.
-    private Gauge(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private Gauge(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final Gauge defaultInstance;
-    public static Gauge getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public Gauge getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Gauge(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 9: {
-              bitField0_ |= 0x00000001;
-              value_ = input.readDouble();
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.Gauge.class, io.prometheus.client.Metrics.Gauge.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<Gauge> PARSER =
-        new com.google.protobuf.AbstractParser<Gauge>() {
-      public Gauge parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Gauge(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Gauge> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int VALUE_FIELD_NUMBER = 1;
-    private double value_;
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    public boolean hasValue() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    public double getValue() {
-      return value_;
-    }
-
-    private void initFields() {
-      value_ = 0D;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeDouble(1, value_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(1, value_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.Gauge parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Gauge parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Gauge parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Gauge parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Gauge parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Gauge parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Gauge parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Gauge parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Gauge parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.Gauge prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.Gauge}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge)
-        io.prometheus.client.Metrics.GaugeOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.Gauge.class, io.prometheus.client.Metrics.Gauge.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.Gauge.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        value_ = 0D;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.Gauge getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.Gauge.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.Gauge build() {
-        io.prometheus.client.Metrics.Gauge result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.Gauge buildPartial() {
-        io.prometheus.client.Metrics.Gauge result = new io.prometheus.client.Metrics.Gauge(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.value_ = value_;
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.Gauge) {
-          return mergeFrom((io.prometheus.client.Metrics.Gauge)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.Gauge other) {
-        if (other == io.prometheus.client.Metrics.Gauge.getDefaultInstance()) return this;
-        if (other.hasValue()) {
-          setValue(other.getValue());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.Gauge parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.Gauge) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private double value_ ;
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public boolean hasValue() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public double getValue() {
-        return value_;
-      }
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public Builder setValue(double value) {
-        bitField0_ |= 0x00000001;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public Builder clearValue() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        value_ = 0D;
-        onChanged();
-        return this;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.Gauge)
-    }
-
-    static {
-      defaultInstance = new Gauge(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge)
-  }
-
-  public interface CounterOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.Counter)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    boolean hasValue();
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    double getValue();
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.Counter}
-   */
-  public static final class Counter extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.Counter)
-      CounterOrBuilder {
-    // Use Counter.newBuilder() to construct.
-    private Counter(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private Counter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final Counter defaultInstance;
-    public static Counter getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public Counter getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Counter(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 9: {
-              bitField0_ |= 0x00000001;
-              value_ = input.readDouble();
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.Counter.class, io.prometheus.client.Metrics.Counter.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<Counter> PARSER =
-        new com.google.protobuf.AbstractParser<Counter>() {
-      public Counter parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Counter(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Counter> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int VALUE_FIELD_NUMBER = 1;
-    private double value_;
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    public boolean hasValue() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    public double getValue() {
-      return value_;
-    }
-
-    private void initFields() {
-      value_ = 0D;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeDouble(1, value_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(1, value_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.Counter parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Counter parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Counter parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Counter parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Counter parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Counter parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Counter parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Counter parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Counter parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Counter parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.Counter prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.Counter}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter)
-        io.prometheus.client.Metrics.CounterOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.Counter.class, io.prometheus.client.Metrics.Counter.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.Counter.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        value_ = 0D;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.Counter getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.Counter.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.Counter build() {
-        io.prometheus.client.Metrics.Counter result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.Counter buildPartial() {
-        io.prometheus.client.Metrics.Counter result = new io.prometheus.client.Metrics.Counter(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.value_ = value_;
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.Counter) {
-          return mergeFrom((io.prometheus.client.Metrics.Counter)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.Counter other) {
-        if (other == io.prometheus.client.Metrics.Counter.getDefaultInstance()) return this;
-        if (other.hasValue()) {
-          setValue(other.getValue());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.Counter parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.Counter) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private double value_ ;
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public boolean hasValue() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public double getValue() {
-        return value_;
-      }
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public Builder setValue(double value) {
-        bitField0_ |= 0x00000001;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public Builder clearValue() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        value_ = 0D;
-        onChanged();
-        return this;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.Counter)
-    }
-
-    static {
-      defaultInstance = new Counter(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter)
-  }
-
-  public interface QuantileOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.Quantile)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>optional double quantile = 1;</code>
-     */
-    boolean hasQuantile();
-    /**
-     * <code>optional double quantile = 1;</code>
-     */
-    double getQuantile();
-
-    /**
-     * <code>optional double value = 2;</code>
-     */
-    boolean hasValue();
-    /**
-     * <code>optional double value = 2;</code>
-     */
-    double getValue();
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.Quantile}
-   */
-  public static final class Quantile extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.Quantile)
-      QuantileOrBuilder {
-    // Use Quantile.newBuilder() to construct.
-    private Quantile(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private Quantile(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final Quantile defaultInstance;
-    public static Quantile getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public Quantile getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Quantile(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 9: {
-              bitField0_ |= 0x00000001;
-              quantile_ = input.readDouble();
-              break;
-            }
-            case 17: {
-              bitField0_ |= 0x00000002;
-              value_ = input.readDouble();
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.Quantile.class, io.prometheus.client.Metrics.Quantile.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<Quantile> PARSER =
-        new com.google.protobuf.AbstractParser<Quantile>() {
-      public Quantile parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Quantile(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Quantile> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int QUANTILE_FIELD_NUMBER = 1;
-    private double quantile_;
-    /**
-     * <code>optional double quantile = 1;</code>
-     */
-    public boolean hasQuantile() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional double quantile = 1;</code>
-     */
-    public double getQuantile() {
-      return quantile_;
-    }
-
-    public static final int VALUE_FIELD_NUMBER = 2;
-    private double value_;
-    /**
-     * <code>optional double value = 2;</code>
-     */
-    public boolean hasValue() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    /**
-     * <code>optional double value = 2;</code>
-     */
-    public double getValue() {
-      return value_;
-    }
-
-    private void initFields() {
-      quantile_ = 0D;
-      value_ = 0D;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeDouble(1, quantile_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeDouble(2, value_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(1, quantile_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(2, value_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.Quantile parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Quantile parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Quantile parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Quantile parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Quantile parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Quantile parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Quantile parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Quantile parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Quantile parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.Quantile prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.Quantile}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile)
-        io.prometheus.client.Metrics.QuantileOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.Quantile.class, io.prometheus.client.Metrics.Quantile.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.Quantile.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        quantile_ = 0D;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        value_ = 0D;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.Quantile getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.Quantile.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.Quantile build() {
-        io.prometheus.client.Metrics.Quantile result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.Quantile buildPartial() {
-        io.prometheus.client.Metrics.Quantile result = new io.prometheus.client.Metrics.Quantile(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.quantile_ = quantile_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.value_ = value_;
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.Quantile) {
-          return mergeFrom((io.prometheus.client.Metrics.Quantile)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.Quantile other) {
-        if (other == io.prometheus.client.Metrics.Quantile.getDefaultInstance()) return this;
-        if (other.hasQuantile()) {
-          setQuantile(other.getQuantile());
-        }
-        if (other.hasValue()) {
-          setValue(other.getValue());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.Quantile parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.Quantile) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private double quantile_ ;
-      /**
-       * <code>optional double quantile = 1;</code>
-       */
-      public boolean hasQuantile() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional double quantile = 1;</code>
-       */
-      public double getQuantile() {
-        return quantile_;
-      }
-      /**
-       * <code>optional double quantile = 1;</code>
-       */
-      public Builder setQuantile(double value) {
-        bitField0_ |= 0x00000001;
-        quantile_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional double quantile = 1;</code>
-       */
-      public Builder clearQuantile() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        quantile_ = 0D;
-        onChanged();
-        return this;
-      }
-
-      private double value_ ;
-      /**
-       * <code>optional double value = 2;</code>
-       */
-      public boolean hasValue() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      /**
-       * <code>optional double value = 2;</code>
-       */
-      public double getValue() {
-        return value_;
-      }
-      /**
-       * <code>optional double value = 2;</code>
-       */
-      public Builder setValue(double value) {
-        bitField0_ |= 0x00000002;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional double value = 2;</code>
-       */
-      public Builder clearValue() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        value_ = 0D;
-        onChanged();
-        return this;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.Quantile)
-    }
-
-    static {
-      defaultInstance = new Quantile(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile)
-  }
-
-  public interface SummaryOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.Summary)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>optional uint64 sample_count = 1;</code>
-     */
-    boolean hasSampleCount();
-    /**
-     * <code>optional uint64 sample_count = 1;</code>
-     */
-    long getSampleCount();
-
-    /**
-     * <code>optional double sample_sum = 2;</code>
-     */
-    boolean hasSampleSum();
-    /**
-     * <code>optional double sample_sum = 2;</code>
-     */
-    double getSampleSum();
-
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    java.util.List<io.prometheus.client.Metrics.Quantile> 
-        getQuantileList();
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    io.prometheus.client.Metrics.Quantile getQuantile(int index);
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    int getQuantileCount();
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    java.util.List<? extends io.prometheus.client.Metrics.QuantileOrBuilder> 
-        getQuantileOrBuilderList();
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    io.prometheus.client.Metrics.QuantileOrBuilder getQuantileOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.Summary}
-   */
-  public static final class Summary extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.Summary)
-      SummaryOrBuilder {
-    // Use Summary.newBuilder() to construct.
-    private Summary(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private Summary(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final Summary defaultInstance;
-    public static Summary getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public Summary getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Summary(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 8: {
-              bitField0_ |= 0x00000001;
-              sampleCount_ = input.readUInt64();
-              break;
-            }
-            case 17: {
-              bitField0_ |= 0x00000002;
-              sampleSum_ = input.readDouble();
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
-                quantile_ = new java.util.ArrayList<io.prometheus.client.Metrics.Quantile>();
-                mutable_bitField0_ |= 0x00000004;
-              }
-              quantile_.add(input.readMessage(io.prometheus.client.Metrics.Quantile.PARSER, extensionRegistry));
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
-          quantile_ = java.util.Collections.unmodifiableList(quantile_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.Summary.class, io.prometheus.client.Metrics.Summary.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<Summary> PARSER =
-        new com.google.protobuf.AbstractParser<Summary>() {
-      public Summary parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Summary(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Summary> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int SAMPLE_COUNT_FIELD_NUMBER = 1;
-    private long sampleCount_;
-    /**
-     * <code>optional uint64 sample_count = 1;</code>
-     */
-    public boolean hasSampleCount() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional uint64 sample_count = 1;</code>
-     */
-    public long getSampleCount() {
-      return sampleCount_;
-    }
-
-    public static final int SAMPLE_SUM_FIELD_NUMBER = 2;
-    private double sampleSum_;
-    /**
-     * <code>optional double sample_sum = 2;</code>
-     */
-    public boolean hasSampleSum() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    /**
-     * <code>optional double sample_sum = 2;</code>
-     */
-    public double getSampleSum() {
-      return sampleSum_;
-    }
-
-    public static final int QUANTILE_FIELD_NUMBER = 3;
-    private java.util.List<io.prometheus.client.Metrics.Quantile> quantile_;
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    public java.util.List<io.prometheus.client.Metrics.Quantile> getQuantileList() {
-      return quantile_;
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    public java.util.List<? extends io.prometheus.client.Metrics.QuantileOrBuilder> 
-        getQuantileOrBuilderList() {
-      return quantile_;
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    public int getQuantileCount() {
-      return quantile_.size();
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    public io.prometheus.client.Metrics.Quantile getQuantile(int index) {
-      return quantile_.get(index);
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-     */
-    public io.prometheus.client.Metrics.QuantileOrBuilder getQuantileOrBuilder(
-        int index) {
-      return quantile_.get(index);
-    }
-
-    private void initFields() {
-      sampleCount_ = 0L;
-      sampleSum_ = 0D;
-      quantile_ = java.util.Collections.emptyList();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeUInt64(1, sampleCount_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeDouble(2, sampleSum_);
-      }
-      for (int i = 0; i < quantile_.size(); i++) {
-        output.writeMessage(3, quantile_.get(i));
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt64Size(1, sampleCount_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(2, sampleSum_);
-      }
-      for (int i = 0; i < quantile_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, quantile_.get(i));
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.Summary parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Summary parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Summary parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Summary parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Summary parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Summary parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Summary parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Summary parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Summary parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Summary parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.Summary prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.Summary}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary)
-        io.prometheus.client.Metrics.SummaryOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.Summary.class, io.prometheus.client.Metrics.Summary.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.Summary.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getQuantileFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        sampleCount_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        sampleSum_ = 0D;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        if (quantileBuilder_ == null) {
-          quantile_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-        } else {
-          quantileBuilder_.clear();
-        }
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.Summary getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.Summary.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.Summary build() {
-        io.prometheus.client.Metrics.Summary result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.Summary buildPartial() {
-        io.prometheus.client.Metrics.Summary result = new io.prometheus.client.Metrics.Summary(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.sampleCount_ = sampleCount_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.sampleSum_ = sampleSum_;
-        if (quantileBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) == 0x00000004)) {
-            quantile_ = java.util.Collections.unmodifiableList(quantile_);
-            bitField0_ = (bitField0_ & ~0x00000004);
-          }
-          result.quantile_ = quantile_;
-        } else {
-          result.quantile_ = quantileBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.Summary) {
-          return mergeFrom((io.prometheus.client.Metrics.Summary)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.Summary other) {
-        if (other == io.prometheus.client.Metrics.Summary.getDefaultInstance()) return this;
-        if (other.hasSampleCount()) {
-          setSampleCount(other.getSampleCount());
-        }
-        if (other.hasSampleSum()) {
-          setSampleSum(other.getSampleSum());
-        }
-        if (quantileBuilder_ == null) {
-          if (!other.quantile_.isEmpty()) {
-            if (quantile_.isEmpty()) {
-              quantile_ = other.quantile_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-            } else {
-              ensureQuantileIsMutable();
-              quantile_.addAll(other.quantile_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.quantile_.isEmpty()) {
-            if (quantileBuilder_.isEmpty()) {
-              quantileBuilder_.dispose();
-              quantileBuilder_ = null;
-              quantile_ = other.quantile_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-              quantileBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getQuantileFieldBuilder() : null;
-            } else {
-              quantileBuilder_.addAllMessages(other.quantile_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.Summary parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.Summary) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private long sampleCount_ ;
-      /**
-       * <code>optional uint64 sample_count = 1;</code>
-       */
-      public boolean hasSampleCount() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional uint64 sample_count = 1;</code>
-       */
-      public long getSampleCount() {
-        return sampleCount_;
-      }
-      /**
-       * <code>optional uint64 sample_count = 1;</code>
-       */
-      public Builder setSampleCount(long value) {
-        bitField0_ |= 0x00000001;
-        sampleCount_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional uint64 sample_count = 1;</code>
-       */
-      public Builder clearSampleCount() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        sampleCount_ = 0L;
-        onChanged();
-        return this;
-      }
-
-      private double sampleSum_ ;
-      /**
-       * <code>optional double sample_sum = 2;</code>
-       */
-      public boolean hasSampleSum() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      /**
-       * <code>optional double sample_sum = 2;</code>
-       */
-      public double getSampleSum() {
-        return sampleSum_;
-      }
-      /**
-       * <code>optional double sample_sum = 2;</code>
-       */
-      public Builder setSampleSum(double value) {
-        bitField0_ |= 0x00000002;
-        sampleSum_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional double sample_sum = 2;</code>
-       */
-      public Builder clearSampleSum() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        sampleSum_ = 0D;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<io.prometheus.client.Metrics.Quantile> quantile_ =
-        java.util.Collections.emptyList();
-      private void ensureQuantileIsMutable() {
-        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
-          quantile_ = new java.util.ArrayList<io.prometheus.client.Metrics.Quantile>(quantile_);
-          bitField0_ |= 0x00000004;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilder<
-          io.prometheus.client.Metrics.Quantile, io.prometheus.client.Metrics.Quantile.Builder, io.prometheus.client.Metrics.QuantileOrBuilder> quantileBuilder_;
-
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public java.util.List<io.prometheus.client.Metrics.Quantile> getQuantileList() {
-        if (quantileBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(quantile_);
-        } else {
-          return quantileBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public int getQuantileCount() {
-        if (quantileBuilder_ == null) {
-          return quantile_.size();
-        } else {
-          return quantileBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public io.prometheus.client.Metrics.Quantile getQuantile(int index) {
-        if (quantileBuilder_ == null) {
-          return quantile_.get(index);
-        } else {
-          return quantileBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public Builder setQuantile(
-          int index, io.prometheus.client.Metrics.Quantile value) {
-        if (quantileBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureQuantileIsMutable();
-          quantile_.set(index, value);
-          onChanged();
-        } else {
-          quantileBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public Builder setQuantile(
-          int index, io.prometheus.client.Metrics.Quantile.Builder builderForValue) {
-        if (quantileBuilder_ == null) {
-          ensureQuantileIsMutable();
-          quantile_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          quantileBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public Builder addQuantile(io.prometheus.client.Metrics.Quantile value) {
-        if (quantileBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureQuantileIsMutable();
-          quantile_.add(value);
-          onChanged();
-        } else {
-          quantileBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public Builder addQuantile(
-          int index, io.prometheus.client.Metrics.Quantile value) {
-        if (quantileBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureQuantileIsMutable();
-          quantile_.add(index, value);
-          onChanged();
-        } else {
-          quantileBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public Builder addQuantile(
-          io.prometheus.client.Metrics.Quantile.Builder builderForValue) {
-        if (quantileBuilder_ == null) {
-          ensureQuantileIsMutable();
-          quantile_.add(builderForValue.build());
-          onChanged();
-        } else {
-          quantileBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public Builder addQuantile(
-          int index, io.prometheus.client.Metrics.Quantile.Builder builderForValue) {
-        if (quantileBuilder_ == null) {
-          ensureQuantileIsMutable();
-          quantile_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          quantileBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public Builder addAllQuantile(
-          java.lang.Iterable<? extends io.prometheus.client.Metrics.Quantile> values) {
-        if (quantileBuilder_ == null) {
-          ensureQuantileIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, quantile_);
-          onChanged();
-        } else {
-          quantileBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public Builder clearQuantile() {
-        if (quantileBuilder_ == null) {
-          quantile_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-          onChanged();
-        } else {
-          quantileBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public Builder removeQuantile(int index) {
-        if (quantileBuilder_ == null) {
-          ensureQuantileIsMutable();
-          quantile_.remove(index);
-          onChanged();
-        } else {
-          quantileBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public io.prometheus.client.Metrics.Quantile.Builder getQuantileBuilder(
-          int index) {
-        return getQuantileFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public io.prometheus.client.Metrics.QuantileOrBuilder getQuantileOrBuilder(
-          int index) {
-        if (quantileBuilder_ == null) {
-          return quantile_.get(index);  } else {
-          return quantileBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public java.util.List<? extends io.prometheus.client.Metrics.QuantileOrBuilder> 
-           getQuantileOrBuilderList() {
-        if (quantileBuilder_ != null) {
-          return quantileBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(quantile_);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public io.prometheus.client.Metrics.Quantile.Builder addQuantileBuilder() {
-        return getQuantileFieldBuilder().addBuilder(
-            io.prometheus.client.Metrics.Quantile.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public io.prometheus.client.Metrics.Quantile.Builder addQuantileBuilder(
-          int index) {
-        return getQuantileFieldBuilder().addBuilder(
-            index, io.prometheus.client.Metrics.Quantile.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Quantile quantile = 3;</code>
-       */
-      public java.util.List<io.prometheus.client.Metrics.Quantile.Builder> 
-           getQuantileBuilderList() {
-        return getQuantileFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilder<
-          io.prometheus.client.Metrics.Quantile, io.prometheus.client.Metrics.Quantile.Builder, io.prometheus.client.Metrics.QuantileOrBuilder> 
-          getQuantileFieldBuilder() {
-        if (quantileBuilder_ == null) {
-          quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
-              io.prometheus.client.Metrics.Quantile, io.prometheus.client.Metrics.Quantile.Builder, io.prometheus.client.Metrics.QuantileOrBuilder>(
-                  quantile_,
-                  ((bitField0_ & 0x00000004) == 0x00000004),
-                  getParentForChildren(),
-                  isClean());
-          quantile_ = null;
-        }
-        return quantileBuilder_;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.Summary)
-    }
-
-    static {
-      defaultInstance = new Summary(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary)
-  }
-
-  public interface UntypedOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.Untyped)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    boolean hasValue();
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    double getValue();
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.Untyped}
-   */
-  public static final class Untyped extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.Untyped)
-      UntypedOrBuilder {
-    // Use Untyped.newBuilder() to construct.
-    private Untyped(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private Untyped(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final Untyped defaultInstance;
-    public static Untyped getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public Untyped getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Untyped(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 9: {
-              bitField0_ |= 0x00000001;
-              value_ = input.readDouble();
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.Untyped.class, io.prometheus.client.Metrics.Untyped.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<Untyped> PARSER =
-        new com.google.protobuf.AbstractParser<Untyped>() {
-      public Untyped parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Untyped(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Untyped> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int VALUE_FIELD_NUMBER = 1;
-    private double value_;
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    public boolean hasValue() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional double value = 1;</code>
-     */
-    public double getValue() {
-      return value_;
-    }
-
-    private void initFields() {
-      value_ = 0D;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeDouble(1, value_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(1, value_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.Untyped parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Untyped parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Untyped parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Untyped parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Untyped parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Untyped parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Untyped parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Untyped parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Untyped parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.Untyped prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.Untyped}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped)
-        io.prometheus.client.Metrics.UntypedOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.Untyped.class, io.prometheus.client.Metrics.Untyped.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.Untyped.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        value_ = 0D;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.Untyped getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.Untyped.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.Untyped build() {
-        io.prometheus.client.Metrics.Untyped result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.Untyped buildPartial() {
-        io.prometheus.client.Metrics.Untyped result = new io.prometheus.client.Metrics.Untyped(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.value_ = value_;
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.Untyped) {
-          return mergeFrom((io.prometheus.client.Metrics.Untyped)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.Untyped other) {
-        if (other == io.prometheus.client.Metrics.Untyped.getDefaultInstance()) return this;
-        if (other.hasValue()) {
-          setValue(other.getValue());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.Untyped parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.Untyped) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private double value_ ;
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public boolean hasValue() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public double getValue() {
-        return value_;
-      }
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public Builder setValue(double value) {
-        bitField0_ |= 0x00000001;
-        value_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional double value = 1;</code>
-       */
-      public Builder clearValue() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        value_ = 0D;
-        onChanged();
-        return this;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.Untyped)
-    }
-
-    static {
-      defaultInstance = new Untyped(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped)
-  }
-
-  public interface HistogramOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.Histogram)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>optional uint64 sample_count = 1;</code>
-     */
-    boolean hasSampleCount();
-    /**
-     * <code>optional uint64 sample_count = 1;</code>
-     */
-    long getSampleCount();
-
-    /**
-     * <code>optional double sample_sum = 2;</code>
-     */
-    boolean hasSampleSum();
-    /**
-     * <code>optional double sample_sum = 2;</code>
-     */
-    double getSampleSum();
-
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    java.util.List<io.prometheus.client.Metrics.Bucket> 
-        getBucketList();
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    io.prometheus.client.Metrics.Bucket getBucket(int index);
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    int getBucketCount();
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    java.util.List<? extends io.prometheus.client.Metrics.BucketOrBuilder> 
-        getBucketOrBuilderList();
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    io.prometheus.client.Metrics.BucketOrBuilder getBucketOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.Histogram}
-   */
-  public static final class Histogram extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.Histogram)
-      HistogramOrBuilder {
-    // Use Histogram.newBuilder() to construct.
-    private Histogram(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private Histogram(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final Histogram defaultInstance;
-    public static Histogram getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public Histogram getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Histogram(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 8: {
-              bitField0_ |= 0x00000001;
-              sampleCount_ = input.readUInt64();
-              break;
-            }
-            case 17: {
-              bitField0_ |= 0x00000002;
-              sampleSum_ = input.readDouble();
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
-                bucket_ = new java.util.ArrayList<io.prometheus.client.Metrics.Bucket>();
-                mutable_bitField0_ |= 0x00000004;
-              }
-              bucket_.add(input.readMessage(io.prometheus.client.Metrics.Bucket.PARSER, extensionRegistry));
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
-          bucket_ = java.util.Collections.unmodifiableList(bucket_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.Histogram.class, io.prometheus.client.Metrics.Histogram.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<Histogram> PARSER =
-        new com.google.protobuf.AbstractParser<Histogram>() {
-      public Histogram parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Histogram(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Histogram> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int SAMPLE_COUNT_FIELD_NUMBER = 1;
-    private long sampleCount_;
-    /**
-     * <code>optional uint64 sample_count = 1;</code>
-     */
-    public boolean hasSampleCount() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional uint64 sample_count = 1;</code>
-     */
-    public long getSampleCount() {
-      return sampleCount_;
-    }
-
-    public static final int SAMPLE_SUM_FIELD_NUMBER = 2;
-    private double sampleSum_;
-    /**
-     * <code>optional double sample_sum = 2;</code>
-     */
-    public boolean hasSampleSum() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    /**
-     * <code>optional double sample_sum = 2;</code>
-     */
-    public double getSampleSum() {
-      return sampleSum_;
-    }
-
-    public static final int BUCKET_FIELD_NUMBER = 3;
-    private java.util.List<io.prometheus.client.Metrics.Bucket> bucket_;
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    public java.util.List<io.prometheus.client.Metrics.Bucket> getBucketList() {
-      return bucket_;
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    public java.util.List<? extends io.prometheus.client.Metrics.BucketOrBuilder> 
-        getBucketOrBuilderList() {
-      return bucket_;
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    public int getBucketCount() {
-      return bucket_.size();
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    public io.prometheus.client.Metrics.Bucket getBucket(int index) {
-      return bucket_.get(index);
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-     *
-     * <pre>
-     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-     * </pre>
-     */
-    public io.prometheus.client.Metrics.BucketOrBuilder getBucketOrBuilder(
-        int index) {
-      return bucket_.get(index);
-    }
-
-    private void initFields() {
-      sampleCount_ = 0L;
-      sampleSum_ = 0D;
-      bucket_ = java.util.Collections.emptyList();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeUInt64(1, sampleCount_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeDouble(2, sampleSum_);
-      }
-      for (int i = 0; i < bucket_.size(); i++) {
-        output.writeMessage(3, bucket_.get(i));
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt64Size(1, sampleCount_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(2, sampleSum_);
-      }
-      for (int i = 0; i < bucket_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, bucket_.get(i));
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.Histogram parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Histogram parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Histogram parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Histogram parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Histogram parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Histogram parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Histogram parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Histogram parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Histogram parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.Histogram prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.Histogram}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram)
-        io.prometheus.client.Metrics.HistogramOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.Histogram.class, io.prometheus.client.Metrics.Histogram.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.Histogram.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getBucketFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        sampleCount_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        sampleSum_ = 0D;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        if (bucketBuilder_ == null) {
-          bucket_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-        } else {
-          bucketBuilder_.clear();
-        }
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.Histogram getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.Histogram.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.Histogram build() {
-        io.prometheus.client.Metrics.Histogram result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.Histogram buildPartial() {
-        io.prometheus.client.Metrics.Histogram result = new io.prometheus.client.Metrics.Histogram(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.sampleCount_ = sampleCount_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.sampleSum_ = sampleSum_;
-        if (bucketBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) == 0x00000004)) {
-            bucket_ = java.util.Collections.unmodifiableList(bucket_);
-            bitField0_ = (bitField0_ & ~0x00000004);
-          }
-          result.bucket_ = bucket_;
-        } else {
-          result.bucket_ = bucketBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.Histogram) {
-          return mergeFrom((io.prometheus.client.Metrics.Histogram)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.Histogram other) {
-        if (other == io.prometheus.client.Metrics.Histogram.getDefaultInstance()) return this;
-        if (other.hasSampleCount()) {
-          setSampleCount(other.getSampleCount());
-        }
-        if (other.hasSampleSum()) {
-          setSampleSum(other.getSampleSum());
-        }
-        if (bucketBuilder_ == null) {
-          if (!other.bucket_.isEmpty()) {
-            if (bucket_.isEmpty()) {
-              bucket_ = other.bucket_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-            } else {
-              ensureBucketIsMutable();
-              bucket_.addAll(other.bucket_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.bucket_.isEmpty()) {
-            if (bucketBuilder_.isEmpty()) {
-              bucketBuilder_.dispose();
-              bucketBuilder_ = null;
-              bucket_ = other.bucket_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-              bucketBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getBucketFieldBuilder() : null;
-            } else {
-              bucketBuilder_.addAllMessages(other.bucket_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.Histogram parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.Histogram) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private long sampleCount_ ;
-      /**
-       * <code>optional uint64 sample_count = 1;</code>
-       */
-      public boolean hasSampleCount() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional uint64 sample_count = 1;</code>
-       */
-      public long getSampleCount() {
-        return sampleCount_;
-      }
-      /**
-       * <code>optional uint64 sample_count = 1;</code>
-       */
-      public Builder setSampleCount(long value) {
-        bitField0_ |= 0x00000001;
-        sampleCount_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional uint64 sample_count = 1;</code>
-       */
-      public Builder clearSampleCount() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        sampleCount_ = 0L;
-        onChanged();
-        return this;
-      }
-
-      private double sampleSum_ ;
-      /**
-       * <code>optional double sample_sum = 2;</code>
-       */
-      public boolean hasSampleSum() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      /**
-       * <code>optional double sample_sum = 2;</code>
-       */
-      public double getSampleSum() {
-        return sampleSum_;
-      }
-      /**
-       * <code>optional double sample_sum = 2;</code>
-       */
-      public Builder setSampleSum(double value) {
-        bitField0_ |= 0x00000002;
-        sampleSum_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional double sample_sum = 2;</code>
-       */
-      public Builder clearSampleSum() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        sampleSum_ = 0D;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<io.prometheus.client.Metrics.Bucket> bucket_ =
-        java.util.Collections.emptyList();
-      private void ensureBucketIsMutable() {
-        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
-          bucket_ = new java.util.ArrayList<io.prometheus.client.Metrics.Bucket>(bucket_);
-          bitField0_ |= 0x00000004;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilder<
-          io.prometheus.client.Metrics.Bucket, io.prometheus.client.Metrics.Bucket.Builder, io.prometheus.client.Metrics.BucketOrBuilder> bucketBuilder_;
-
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public java.util.List<io.prometheus.client.Metrics.Bucket> getBucketList() {
-        if (bucketBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(bucket_);
-        } else {
-          return bucketBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public int getBucketCount() {
-        if (bucketBuilder_ == null) {
-          return bucket_.size();
-        } else {
-          return bucketBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public io.prometheus.client.Metrics.Bucket getBucket(int index) {
-        if (bucketBuilder_ == null) {
-          return bucket_.get(index);
-        } else {
-          return bucketBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public Builder setBucket(
-          int index, io.prometheus.client.Metrics.Bucket value) {
-        if (bucketBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureBucketIsMutable();
-          bucket_.set(index, value);
-          onChanged();
-        } else {
-          bucketBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public Builder setBucket(
-          int index, io.prometheus.client.Metrics.Bucket.Builder builderForValue) {
-        if (bucketBuilder_ == null) {
-          ensureBucketIsMutable();
-          bucket_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          bucketBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public Builder addBucket(io.prometheus.client.Metrics.Bucket value) {
-        if (bucketBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureBucketIsMutable();
-          bucket_.add(value);
-          onChanged();
-        } else {
-          bucketBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public Builder addBucket(
-          int index, io.prometheus.client.Metrics.Bucket value) {
-        if (bucketBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureBucketIsMutable();
-          bucket_.add(index, value);
-          onChanged();
-        } else {
-          bucketBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public Builder addBucket(
-          io.prometheus.client.Metrics.Bucket.Builder builderForValue) {
-        if (bucketBuilder_ == null) {
-          ensureBucketIsMutable();
-          bucket_.add(builderForValue.build());
-          onChanged();
-        } else {
-          bucketBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public Builder addBucket(
-          int index, io.prometheus.client.Metrics.Bucket.Builder builderForValue) {
-        if (bucketBuilder_ == null) {
-          ensureBucketIsMutable();
-          bucket_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          bucketBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public Builder addAllBucket(
-          java.lang.Iterable<? extends io.prometheus.client.Metrics.Bucket> values) {
-        if (bucketBuilder_ == null) {
-          ensureBucketIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, bucket_);
-          onChanged();
-        } else {
-          bucketBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public Builder clearBucket() {
-        if (bucketBuilder_ == null) {
-          bucket_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-          onChanged();
-        } else {
-          bucketBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public Builder removeBucket(int index) {
-        if (bucketBuilder_ == null) {
-          ensureBucketIsMutable();
-          bucket_.remove(index);
-          onChanged();
-        } else {
-          bucketBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public io.prometheus.client.Metrics.Bucket.Builder getBucketBuilder(
-          int index) {
-        return getBucketFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public io.prometheus.client.Metrics.BucketOrBuilder getBucketOrBuilder(
-          int index) {
-        if (bucketBuilder_ == null) {
-          return bucket_.get(index);  } else {
-          return bucketBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public java.util.List<? extends io.prometheus.client.Metrics.BucketOrBuilder> 
-           getBucketOrBuilderList() {
-        if (bucketBuilder_ != null) {
-          return bucketBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(bucket_);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public io.prometheus.client.Metrics.Bucket.Builder addBucketBuilder() {
-        return getBucketFieldBuilder().addBuilder(
-            io.prometheus.client.Metrics.Bucket.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public io.prometheus.client.Metrics.Bucket.Builder addBucketBuilder(
-          int index) {
-        return getBucketFieldBuilder().addBuilder(
-            index, io.prometheus.client.Metrics.Bucket.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Bucket bucket = 3;</code>
-       *
-       * <pre>
-       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
-       * </pre>
-       */
-      public java.util.List<io.prometheus.client.Metrics.Bucket.Builder> 
-           getBucketBuilderList() {
-        return getBucketFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilder<
-          io.prometheus.client.Metrics.Bucket, io.prometheus.client.Metrics.Bucket.Builder, io.prometheus.client.Metrics.BucketOrBuilder> 
-          getBucketFieldBuilder() {
-        if (bucketBuilder_ == null) {
-          bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
-              io.prometheus.client.Metrics.Bucket, io.prometheus.client.Metrics.Bucket.Builder, io.prometheus.client.Metrics.BucketOrBuilder>(
-                  bucket_,
-                  ((bitField0_ & 0x00000004) == 0x00000004),
-                  getParentForChildren(),
-                  isClean());
-          bucket_ = null;
-        }
-        return bucketBuilder_;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.Histogram)
-    }
-
-    static {
-      defaultInstance = new Histogram(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram)
-  }
-
-  public interface BucketOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.Bucket)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>optional uint64 cumulative_count = 1;</code>
-     *
-     * <pre>
-     * Cumulative in increasing order.
-     * </pre>
-     */
-    boolean hasCumulativeCount();
-    /**
-     * <code>optional uint64 cumulative_count = 1;</code>
-     *
-     * <pre>
-     * Cumulative in increasing order.
-     * </pre>
-     */
-    long getCumulativeCount();
-
-    /**
-     * <code>optional double upper_bound = 2;</code>
-     *
-     * <pre>
-     * Inclusive.
-     * </pre>
-     */
-    boolean hasUpperBound();
-    /**
-     * <code>optional double upper_bound = 2;</code>
-     *
-     * <pre>
-     * Inclusive.
-     * </pre>
-     */
-    double getUpperBound();
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.Bucket}
-   */
-  public static final class Bucket extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.Bucket)
-      BucketOrBuilder {
-    // Use Bucket.newBuilder() to construct.
-    private Bucket(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private Bucket(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final Bucket defaultInstance;
-    public static Bucket getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public Bucket getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Bucket(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 8: {
-              bitField0_ |= 0x00000001;
-              cumulativeCount_ = input.readUInt64();
-              break;
-            }
-            case 17: {
-              bitField0_ |= 0x00000002;
-              upperBound_ = input.readDouble();
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.Bucket.class, io.prometheus.client.Metrics.Bucket.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<Bucket> PARSER =
-        new com.google.protobuf.AbstractParser<Bucket>() {
-      public Bucket parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Bucket(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Bucket> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int CUMULATIVE_COUNT_FIELD_NUMBER = 1;
-    private long cumulativeCount_;
-    /**
-     * <code>optional uint64 cumulative_count = 1;</code>
-     *
-     * <pre>
-     * Cumulative in increasing order.
-     * </pre>
-     */
-    public boolean hasCumulativeCount() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional uint64 cumulative_count = 1;</code>
-     *
-     * <pre>
-     * Cumulative in increasing order.
-     * </pre>
-     */
-    public long getCumulativeCount() {
-      return cumulativeCount_;
-    }
-
-    public static final int UPPER_BOUND_FIELD_NUMBER = 2;
-    private double upperBound_;
-    /**
-     * <code>optional double upper_bound = 2;</code>
-     *
-     * <pre>
-     * Inclusive.
-     * </pre>
-     */
-    public boolean hasUpperBound() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    /**
-     * <code>optional double upper_bound = 2;</code>
-     *
-     * <pre>
-     * Inclusive.
-     * </pre>
-     */
-    public double getUpperBound() {
-      return upperBound_;
-    }
-
-    private void initFields() {
-      cumulativeCount_ = 0L;
-      upperBound_ = 0D;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeUInt64(1, cumulativeCount_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeDouble(2, upperBound_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeUInt64Size(1, cumulativeCount_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeDoubleSize(2, upperBound_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.Bucket parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Bucket parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Bucket parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Bucket parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Bucket parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Bucket parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Bucket parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Bucket parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Bucket parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.Bucket prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.Bucket}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket)
-        io.prometheus.client.Metrics.BucketOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.Bucket.class, io.prometheus.client.Metrics.Bucket.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.Bucket.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        cumulativeCount_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000001);
-        upperBound_ = 0D;
-        bitField0_ = (bitField0_ & ~0x00000002);
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.Bucket getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.Bucket.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.Bucket build() {
-        io.prometheus.client.Metrics.Bucket result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.Bucket buildPartial() {
-        io.prometheus.client.Metrics.Bucket result = new io.prometheus.client.Metrics.Bucket(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.cumulativeCount_ = cumulativeCount_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.upperBound_ = upperBound_;
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.Bucket) {
-          return mergeFrom((io.prometheus.client.Metrics.Bucket)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.Bucket other) {
-        if (other == io.prometheus.client.Metrics.Bucket.getDefaultInstance()) return this;
-        if (other.hasCumulativeCount()) {
-          setCumulativeCount(other.getCumulativeCount());
-        }
-        if (other.hasUpperBound()) {
-          setUpperBound(other.getUpperBound());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.Bucket parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.Bucket) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private long cumulativeCount_ ;
-      /**
-       * <code>optional uint64 cumulative_count = 1;</code>
-       *
-       * <pre>
-       * Cumulative in increasing order.
-       * </pre>
-       */
-      public boolean hasCumulativeCount() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional uint64 cumulative_count = 1;</code>
-       *
-       * <pre>
-       * Cumulative in increasing order.
-       * </pre>
-       */
-      public long getCumulativeCount() {
-        return cumulativeCount_;
-      }
-      /**
-       * <code>optional uint64 cumulative_count = 1;</code>
-       *
-       * <pre>
-       * Cumulative in increasing order.
-       * </pre>
-       */
-      public Builder setCumulativeCount(long value) {
-        bitField0_ |= 0x00000001;
-        cumulativeCount_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional uint64 cumulative_count = 1;</code>
-       *
-       * <pre>
-       * Cumulative in increasing order.
-       * </pre>
-       */
-      public Builder clearCumulativeCount() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        cumulativeCount_ = 0L;
-        onChanged();
-        return this;
-      }
-
-      private double upperBound_ ;
-      /**
-       * <code>optional double upper_bound = 2;</code>
-       *
-       * <pre>
-       * Inclusive.
-       * </pre>
-       */
-      public boolean hasUpperBound() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      /**
-       * <code>optional double upper_bound = 2;</code>
-       *
-       * <pre>
-       * Inclusive.
-       * </pre>
-       */
-      public double getUpperBound() {
-        return upperBound_;
-      }
-      /**
-       * <code>optional double upper_bound = 2;</code>
-       *
-       * <pre>
-       * Inclusive.
-       * </pre>
-       */
-      public Builder setUpperBound(double value) {
-        bitField0_ |= 0x00000002;
-        upperBound_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional double upper_bound = 2;</code>
-       *
-       * <pre>
-       * Inclusive.
-       * </pre>
-       */
-      public Builder clearUpperBound() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        upperBound_ = 0D;
-        onChanged();
-        return this;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.Bucket)
-    }
-
-    static {
-      defaultInstance = new Bucket(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket)
-  }
-
-  public interface MetricOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.Metric)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    java.util.List<io.prometheus.client.Metrics.LabelPair> 
-        getLabelList();
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    io.prometheus.client.Metrics.LabelPair getLabel(int index);
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    int getLabelCount();
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    java.util.List<? extends io.prometheus.client.Metrics.LabelPairOrBuilder> 
-        getLabelOrBuilderList();
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    io.prometheus.client.Metrics.LabelPairOrBuilder getLabelOrBuilder(
-        int index);
-
-    /**
-     * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-     */
-    boolean hasGauge();
-    /**
-     * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-     */
-    io.prometheus.client.Metrics.Gauge getGauge();
-    /**
-     * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-     */
-    io.prometheus.client.Metrics.GaugeOrBuilder getGaugeOrBuilder();
-
-    /**
-     * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-     */
-    boolean hasCounter();
-    /**
-     * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-     */
-    io.prometheus.client.Metrics.Counter getCounter();
-    /**
-     * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-     */
-    io.prometheus.client.Metrics.CounterOrBuilder getCounterOrBuilder();
-
-    /**
-     * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-     */
-    boolean hasSummary();
-    /**
-     * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-     */
-    io.prometheus.client.Metrics.Summary getSummary();
-    /**
-     * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-     */
-    io.prometheus.client.Metrics.SummaryOrBuilder getSummaryOrBuilder();
-
-    /**
-     * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-     */
-    boolean hasUntyped();
-    /**
-     * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-     */
-    io.prometheus.client.Metrics.Untyped getUntyped();
-    /**
-     * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-     */
-    io.prometheus.client.Metrics.UntypedOrBuilder getUntypedOrBuilder();
-
-    /**
-     * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-     */
-    boolean hasHistogram();
-    /**
-     * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-     */
-    io.prometheus.client.Metrics.Histogram getHistogram();
-    /**
-     * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-     */
-    io.prometheus.client.Metrics.HistogramOrBuilder getHistogramOrBuilder();
-
-    /**
-     * <code>optional int64 timestamp_ms = 6;</code>
-     */
-    boolean hasTimestampMs();
-    /**
-     * <code>optional int64 timestamp_ms = 6;</code>
-     */
-    long getTimestampMs();
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.Metric}
-   */
-  public static final class Metric extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.Metric)
-      MetricOrBuilder {
-    // Use Metric.newBuilder() to construct.
-    private Metric(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private Metric(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final Metric defaultInstance;
-    public static Metric getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public Metric getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Metric(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
-                label_ = new java.util.ArrayList<io.prometheus.client.Metrics.LabelPair>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              label_.add(input.readMessage(io.prometheus.client.Metrics.LabelPair.PARSER, extensionRegistry));
-              break;
-            }
-            case 18: {
-              io.prometheus.client.Metrics.Gauge.Builder subBuilder = null;
-              if (((bitField0_ & 0x00000001) == 0x00000001)) {
-                subBuilder = gauge_.toBuilder();
-              }
-              gauge_ = input.readMessage(io.prometheus.client.Metrics.Gauge.PARSER, extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(gauge_);
-                gauge_ = subBuilder.buildPartial();
-              }
-              bitField0_ |= 0x00000001;
-              break;
-            }
-            case 26: {
-              io.prometheus.client.Metrics.Counter.Builder subBuilder = null;
-              if (((bitField0_ & 0x00000002) == 0x00000002)) {
-                subBuilder = counter_.toBuilder();
-              }
-              counter_ = input.readMessage(io.prometheus.client.Metrics.Counter.PARSER, extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(counter_);
-                counter_ = subBuilder.buildPartial();
-              }
-              bitField0_ |= 0x00000002;
-              break;
-            }
-            case 34: {
-              io.prometheus.client.Metrics.Summary.Builder subBuilder = null;
-              if (((bitField0_ & 0x00000004) == 0x00000004)) {
-                subBuilder = summary_.toBuilder();
-              }
-              summary_ = input.readMessage(io.prometheus.client.Metrics.Summary.PARSER, extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(summary_);
-                summary_ = subBuilder.buildPartial();
-              }
-              bitField0_ |= 0x00000004;
-              break;
-            }
-            case 42: {
-              io.prometheus.client.Metrics.Untyped.Builder subBuilder = null;
-              if (((bitField0_ & 0x00000008) == 0x00000008)) {
-                subBuilder = untyped_.toBuilder();
-              }
-              untyped_ = input.readMessage(io.prometheus.client.Metrics.Untyped.PARSER, extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(untyped_);
-                untyped_ = subBuilder.buildPartial();
-              }
-              bitField0_ |= 0x00000008;
-              break;
-            }
-            case 48: {
-              bitField0_ |= 0x00000020;
-              timestampMs_ = input.readInt64();
-              break;
-            }
-            case 58: {
-              io.prometheus.client.Metrics.Histogram.Builder subBuilder = null;
-              if (((bitField0_ & 0x00000010) == 0x00000010)) {
-                subBuilder = histogram_.toBuilder();
-              }
-              histogram_ = input.readMessage(io.prometheus.client.Metrics.Histogram.PARSER, extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(histogram_);
-                histogram_ = subBuilder.buildPartial();
-              }
-              bitField0_ |= 0x00000010;
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
-          label_ = java.util.Collections.unmodifiableList(label_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.Metric.class, io.prometheus.client.Metrics.Metric.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<Metric> PARSER =
-        new com.google.protobuf.AbstractParser<Metric>() {
-      public Metric parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Metric(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<Metric> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int LABEL_FIELD_NUMBER = 1;
-    private java.util.List<io.prometheus.client.Metrics.LabelPair> label_;
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    public java.util.List<io.prometheus.client.Metrics.LabelPair> getLabelList() {
-      return label_;
-    }
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    public java.util.List<? extends io.prometheus.client.Metrics.LabelPairOrBuilder> 
-        getLabelOrBuilderList() {
-      return label_;
-    }
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    public int getLabelCount() {
-      return label_.size();
-    }
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    public io.prometheus.client.Metrics.LabelPair getLabel(int index) {
-      return label_.get(index);
-    }
-    /**
-     * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-     */
-    public io.prometheus.client.Metrics.LabelPairOrBuilder getLabelOrBuilder(
-        int index) {
-      return label_.get(index);
-    }
-
-    public static final int GAUGE_FIELD_NUMBER = 2;
-    private io.prometheus.client.Metrics.Gauge gauge_;
-    /**
-     * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-     */
-    public boolean hasGauge() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-     */
-    public io.prometheus.client.Metrics.Gauge getGauge() {
-      return gauge_;
-    }
-    /**
-     * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-     */
-    public io.prometheus.client.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
-      return gauge_;
-    }
-
-    public static final int COUNTER_FIELD_NUMBER = 3;
-    private io.prometheus.client.Metrics.Counter counter_;
-    /**
-     * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-     */
-    public boolean hasCounter() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    /**
-     * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-     */
-    public io.prometheus.client.Metrics.Counter getCounter() {
-      return counter_;
-    }
-    /**
-     * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-     */
-    public io.prometheus.client.Metrics.CounterOrBuilder getCounterOrBuilder() {
-      return counter_;
-    }
-
-    public static final int SUMMARY_FIELD_NUMBER = 4;
-    private io.prometheus.client.Metrics.Summary summary_;
-    /**
-     * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-     */
-    public boolean hasSummary() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    /**
-     * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-     */
-    public io.prometheus.client.Metrics.Summary getSummary() {
-      return summary_;
-    }
-    /**
-     * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-     */
-    public io.prometheus.client.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
-      return summary_;
-    }
-
-    public static final int UNTYPED_FIELD_NUMBER = 5;
-    private io.prometheus.client.Metrics.Untyped untyped_;
-    /**
-     * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-     */
-    public boolean hasUntyped() {
-      return ((bitField0_ & 0x00000008) == 0x00000008);
-    }
-    /**
-     * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-     */
-    public io.prometheus.client.Metrics.Untyped getUntyped() {
-      return untyped_;
-    }
-    /**
-     * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-     */
-    public io.prometheus.client.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
-      return untyped_;
-    }
-
-    public static final int HISTOGRAM_FIELD_NUMBER = 7;
-    private io.prometheus.client.Metrics.Histogram histogram_;
-    /**
-     * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-     */
-    public boolean hasHistogram() {
-      return ((bitField0_ & 0x00000010) == 0x00000010);
-    }
-    /**
-     * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-     */
-    public io.prometheus.client.Metrics.Histogram getHistogram() {
-      return histogram_;
-    }
-    /**
-     * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-     */
-    public io.prometheus.client.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
-      return histogram_;
-    }
-
-    public static final int TIMESTAMP_MS_FIELD_NUMBER = 6;
-    private long timestampMs_;
-    /**
-     * <code>optional int64 timestamp_ms = 6;</code>
-     */
-    public boolean hasTimestampMs() {
-      return ((bitField0_ & 0x00000020) == 0x00000020);
-    }
-    /**
-     * <code>optional int64 timestamp_ms = 6;</code>
-     */
-    public long getTimestampMs() {
-      return timestampMs_;
-    }
-
-    private void initFields() {
-      label_ = java.util.Collections.emptyList();
-      gauge_ = io.prometheus.client.Metrics.Gauge.getDefaultInstance();
-      counter_ = io.prometheus.client.Metrics.Counter.getDefaultInstance();
-      summary_ = io.prometheus.client.Metrics.Summary.getDefaultInstance();
-      untyped_ = io.prometheus.client.Metrics.Untyped.getDefaultInstance();
-      histogram_ = io.prometheus.client.Metrics.Histogram.getDefaultInstance();
-      timestampMs_ = 0L;
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      for (int i = 0; i < label_.size(); i++) {
-        output.writeMessage(1, label_.get(i));
-      }
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeMessage(2, gauge_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeMessage(3, counter_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeMessage(4, summary_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        output.writeMessage(5, untyped_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        output.writeInt64(6, timestampMs_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        output.writeMessage(7, histogram_);
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      for (int i = 0; i < label_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, label_.get(i));
-      }
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, gauge_);
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, counter_);
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, summary_);
-      }
-      if (((bitField0_ & 0x00000008) == 0x00000008)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, untyped_);
-      }
-      if (((bitField0_ & 0x00000020) == 0x00000020)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(6, timestampMs_);
-      }
-      if (((bitField0_ & 0x00000010) == 0x00000010)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(7, histogram_);
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.Metric parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Metric parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Metric parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.Metric parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Metric parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Metric parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Metric parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Metric parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.Metric parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.Metric parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.Metric prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.Metric}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric)
-        io.prometheus.client.Metrics.MetricOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.Metric.class, io.prometheus.client.Metrics.Metric.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.Metric.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getLabelFieldBuilder();
-          getGaugeFieldBuilder();
-          getCounterFieldBuilder();
-          getSummaryFieldBuilder();
-          getUntypedFieldBuilder();
-          getHistogramFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        if (labelBuilder_ == null) {
-          label_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          labelBuilder_.clear();
-        }
-        if (gaugeBuilder_ == null) {
-          gauge_ = io.prometheus.client.Metrics.Gauge.getDefaultInstance();
-        } else {
-          gaugeBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000002);
-        if (counterBuilder_ == null) {
-          counter_ = io.prometheus.client.Metrics.Counter.getDefaultInstance();
-        } else {
-          counterBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000004);
-        if (summaryBuilder_ == null) {
-          summary_ = io.prometheus.client.Metrics.Summary.getDefaultInstance();
-        } else {
-          summaryBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000008);
-        if (untypedBuilder_ == null) {
-          untyped_ = io.prometheus.client.Metrics.Untyped.getDefaultInstance();
-        } else {
-          untypedBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000010);
-        if (histogramBuilder_ == null) {
-          histogram_ = io.prometheus.client.Metrics.Histogram.getDefaultInstance();
-        } else {
-          histogramBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000020);
-        timestampMs_ = 0L;
-        bitField0_ = (bitField0_ & ~0x00000040);
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.Metric getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.Metric.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.Metric build() {
-        io.prometheus.client.Metrics.Metric result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.Metric buildPartial() {
-        io.prometheus.client.Metrics.Metric result = new io.prometheus.client.Metrics.Metric(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (labelBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) == 0x00000001)) {
-            label_ = java.util.Collections.unmodifiableList(label_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.label_ = label_;
-        } else {
-          result.label_ = labelBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        if (gaugeBuilder_ == null) {
-          result.gauge_ = gauge_;
-        } else {
-          result.gauge_ = gaugeBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        if (counterBuilder_ == null) {
-          result.counter_ = counter_;
-        } else {
-          result.counter_ = counterBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        if (summaryBuilder_ == null) {
-          result.summary_ = summary_;
-        } else {
-          result.summary_ = summaryBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
-          to_bitField0_ |= 0x00000008;
-        }
-        if (untypedBuilder_ == null) {
-          result.untyped_ = untyped_;
-        } else {
-          result.untyped_ = untypedBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
-          to_bitField0_ |= 0x00000010;
-        }
-        if (histogramBuilder_ == null) {
-          result.histogram_ = histogram_;
-        } else {
-          result.histogram_ = histogramBuilder_.build();
-        }
-        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
-          to_bitField0_ |= 0x00000020;
-        }
-        result.timestampMs_ = timestampMs_;
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.Metric) {
-          return mergeFrom((io.prometheus.client.Metrics.Metric)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.Metric other) {
-        if (other == io.prometheus.client.Metrics.Metric.getDefaultInstance()) return this;
-        if (labelBuilder_ == null) {
-          if (!other.label_.isEmpty()) {
-            if (label_.isEmpty()) {
-              label_ = other.label_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureLabelIsMutable();
-              label_.addAll(other.label_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.label_.isEmpty()) {
-            if (labelBuilder_.isEmpty()) {
-              labelBuilder_.dispose();
-              labelBuilder_ = null;
-              label_ = other.label_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              labelBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getLabelFieldBuilder() : null;
-            } else {
-              labelBuilder_.addAllMessages(other.label_);
-            }
-          }
-        }
-        if (other.hasGauge()) {
-          mergeGauge(other.getGauge());
-        }
-        if (other.hasCounter()) {
-          mergeCounter(other.getCounter());
-        }
-        if (other.hasSummary()) {
-          mergeSummary(other.getSummary());
-        }
-        if (other.hasUntyped()) {
-          mergeUntyped(other.getUntyped());
-        }
-        if (other.hasHistogram()) {
-          mergeHistogram(other.getHistogram());
-        }
-        if (other.hasTimestampMs()) {
-          setTimestampMs(other.getTimestampMs());
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.Metric parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.Metric) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.util.List<io.prometheus.client.Metrics.LabelPair> label_ =
-        java.util.Collections.emptyList();
-      private void ensureLabelIsMutable() {
-        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
-          label_ = new java.util.ArrayList<io.prometheus.client.Metrics.LabelPair>(label_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilder<
-          io.prometheus.client.Metrics.LabelPair, io.prometheus.client.Metrics.LabelPair.Builder, io.prometheus.client.Metrics.LabelPairOrBuilder> labelBuilder_;
-
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public java.util.List<io.prometheus.client.Metrics.LabelPair> getLabelList() {
-        if (labelBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(label_);
-        } else {
-          return labelBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public int getLabelCount() {
-        if (labelBuilder_ == null) {
-          return label_.size();
-        } else {
-          return labelBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public io.prometheus.client.Metrics.LabelPair getLabel(int index) {
-        if (labelBuilder_ == null) {
-          return label_.get(index);
-        } else {
-          return labelBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public Builder setLabel(
-          int index, io.prometheus.client.Metrics.LabelPair value) {
-        if (labelBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLabelIsMutable();
-          label_.set(index, value);
-          onChanged();
-        } else {
-          labelBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public Builder setLabel(
-          int index, io.prometheus.client.Metrics.LabelPair.Builder builderForValue) {
-        if (labelBuilder_ == null) {
-          ensureLabelIsMutable();
-          label_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          labelBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public Builder addLabel(io.prometheus.client.Metrics.LabelPair value) {
-        if (labelBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLabelIsMutable();
-          label_.add(value);
-          onChanged();
-        } else {
-          labelBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public Builder addLabel(
-          int index, io.prometheus.client.Metrics.LabelPair value) {
-        if (labelBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLabelIsMutable();
-          label_.add(index, value);
-          onChanged();
-        } else {
-          labelBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public Builder addLabel(
-          io.prometheus.client.Metrics.LabelPair.Builder builderForValue) {
-        if (labelBuilder_ == null) {
-          ensureLabelIsMutable();
-          label_.add(builderForValue.build());
-          onChanged();
-        } else {
-          labelBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public Builder addLabel(
-          int index, io.prometheus.client.Metrics.LabelPair.Builder builderForValue) {
-        if (labelBuilder_ == null) {
-          ensureLabelIsMutable();
-          label_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          labelBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public Builder addAllLabel(
-          java.lang.Iterable<? extends io.prometheus.client.Metrics.LabelPair> values) {
-        if (labelBuilder_ == null) {
-          ensureLabelIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, label_);
-          onChanged();
-        } else {
-          labelBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public Builder clearLabel() {
-        if (labelBuilder_ == null) {
-          label_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          labelBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public Builder removeLabel(int index) {
-        if (labelBuilder_ == null) {
-          ensureLabelIsMutable();
-          label_.remove(index);
-          onChanged();
-        } else {
-          labelBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public io.prometheus.client.Metrics.LabelPair.Builder getLabelBuilder(
-          int index) {
-        return getLabelFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public io.prometheus.client.Metrics.LabelPairOrBuilder getLabelOrBuilder(
-          int index) {
-        if (labelBuilder_ == null) {
-          return label_.get(index);  } else {
-          return labelBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public java.util.List<? extends io.prometheus.client.Metrics.LabelPairOrBuilder> 
-           getLabelOrBuilderList() {
-        if (labelBuilder_ != null) {
-          return labelBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(label_);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public io.prometheus.client.Metrics.LabelPair.Builder addLabelBuilder() {
-        return getLabelFieldBuilder().addBuilder(
-            io.prometheus.client.Metrics.LabelPair.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public io.prometheus.client.Metrics.LabelPair.Builder addLabelBuilder(
-          int index) {
-        return getLabelFieldBuilder().addBuilder(
-            index, io.prometheus.client.Metrics.LabelPair.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .io.prometheus.client.LabelPair label = 1;</code>
-       */
-      public java.util.List<io.prometheus.client.Metrics.LabelPair.Builder> 
-           getLabelBuilderList() {
-        return getLabelFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilder<
-          io.prometheus.client.Metrics.LabelPair, io.prometheus.client.Metrics.LabelPair.Builder, io.prometheus.client.Metrics.LabelPairOrBuilder> 
-          getLabelFieldBuilder() {
-        if (labelBuilder_ == null) {
-          labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
-              io.prometheus.client.Metrics.LabelPair, io.prometheus.client.Metrics.LabelPair.Builder, io.prometheus.client.Metrics.LabelPairOrBuilder>(
-                  label_,
-                  ((bitField0_ & 0x00000001) == 0x00000001),
-                  getParentForChildren(),
-                  isClean());
-          label_ = null;
-        }
-        return labelBuilder_;
-      }
-
-      private io.prometheus.client.Metrics.Gauge gauge_ = io.prometheus.client.Metrics.Gauge.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Gauge, io.prometheus.client.Metrics.Gauge.Builder, io.prometheus.client.Metrics.GaugeOrBuilder> gaugeBuilder_;
-      /**
-       * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-       */
-      public boolean hasGauge() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      /**
-       * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-       */
-      public io.prometheus.client.Metrics.Gauge getGauge() {
-        if (gaugeBuilder_ == null) {
-          return gauge_;
-        } else {
-          return gaugeBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-       */
-      public Builder setGauge(io.prometheus.client.Metrics.Gauge value) {
-        if (gaugeBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          gauge_ = value;
-          onChanged();
-        } else {
-          gaugeBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-       */
-      public Builder setGauge(
-          io.prometheus.client.Metrics.Gauge.Builder builderForValue) {
-        if (gaugeBuilder_ == null) {
-          gauge_ = builderForValue.build();
-          onChanged();
-        } else {
-          gaugeBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-       */
-      public Builder mergeGauge(io.prometheus.client.Metrics.Gauge value) {
-        if (gaugeBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) == 0x00000002) &&
-              gauge_ != io.prometheus.client.Metrics.Gauge.getDefaultInstance()) {
-            gauge_ =
-              io.prometheus.client.Metrics.Gauge.newBuilder(gauge_).mergeFrom(value).buildPartial();
-          } else {
-            gauge_ = value;
-          }
-          onChanged();
-        } else {
-          gaugeBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000002;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-       */
-      public Builder clearGauge() {
-        if (gaugeBuilder_ == null) {
-          gauge_ = io.prometheus.client.Metrics.Gauge.getDefaultInstance();
-          onChanged();
-        } else {
-          gaugeBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000002);
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-       */
-      public io.prometheus.client.Metrics.Gauge.Builder getGaugeBuilder() {
-        bitField0_ |= 0x00000002;
-        onChanged();
-        return getGaugeFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-       */
-      public io.prometheus.client.Metrics.GaugeOrBuilder getGaugeOrBuilder() {
-        if (gaugeBuilder_ != null) {
-          return gaugeBuilder_.getMessageOrBuilder();
-        } else {
-          return gauge_;
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Gauge gauge = 2;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Gauge, io.prometheus.client.Metrics.Gauge.Builder, io.prometheus.client.Metrics.GaugeOrBuilder> 
-          getGaugeFieldBuilder() {
-        if (gaugeBuilder_ == null) {
-          gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              io.prometheus.client.Metrics.Gauge, io.prometheus.client.Metrics.Gauge.Builder, io.prometheus.client.Metrics.GaugeOrBuilder>(
-                  getGauge(),
-                  getParentForChildren(),
-                  isClean());
-          gauge_ = null;
-        }
-        return gaugeBuilder_;
-      }
-
-      private io.prometheus.client.Metrics.Counter counter_ = io.prometheus.client.Metrics.Counter.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Counter, io.prometheus.client.Metrics.Counter.Builder, io.prometheus.client.Metrics.CounterOrBuilder> counterBuilder_;
-      /**
-       * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-       */
-      public boolean hasCounter() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
-      }
-      /**
-       * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-       */
-      public io.prometheus.client.Metrics.Counter getCounter() {
-        if (counterBuilder_ == null) {
-          return counter_;
-        } else {
-          return counterBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-       */
-      public Builder setCounter(io.prometheus.client.Metrics.Counter value) {
-        if (counterBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          counter_ = value;
-          onChanged();
-        } else {
-          counterBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000004;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-       */
-      public Builder setCounter(
-          io.prometheus.client.Metrics.Counter.Builder builderForValue) {
-        if (counterBuilder_ == null) {
-          counter_ = builderForValue.build();
-          onChanged();
-        } else {
-          counterBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000004;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-       */
-      public Builder mergeCounter(io.prometheus.client.Metrics.Counter value) {
-        if (counterBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) == 0x00000004) &&
-              counter_ != io.prometheus.client.Metrics.Counter.getDefaultInstance()) {
-            counter_ =
-              io.prometheus.client.Metrics.Counter.newBuilder(counter_).mergeFrom(value).buildPartial();
-          } else {
-            counter_ = value;
-          }
-          onChanged();
-        } else {
-          counterBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000004;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-       */
-      public Builder clearCounter() {
-        if (counterBuilder_ == null) {
-          counter_ = io.prometheus.client.Metrics.Counter.getDefaultInstance();
-          onChanged();
-        } else {
-          counterBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000004);
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-       */
-      public io.prometheus.client.Metrics.Counter.Builder getCounterBuilder() {
-        bitField0_ |= 0x00000004;
-        onChanged();
-        return getCounterFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-       */
-      public io.prometheus.client.Metrics.CounterOrBuilder getCounterOrBuilder() {
-        if (counterBuilder_ != null) {
-          return counterBuilder_.getMessageOrBuilder();
-        } else {
-          return counter_;
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Counter counter = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Counter, io.prometheus.client.Metrics.Counter.Builder, io.prometheus.client.Metrics.CounterOrBuilder> 
-          getCounterFieldBuilder() {
-        if (counterBuilder_ == null) {
-          counterBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              io.prometheus.client.Metrics.Counter, io.prometheus.client.Metrics.Counter.Builder, io.prometheus.client.Metrics.CounterOrBuilder>(
-                  getCounter(),
-                  getParentForChildren(),
-                  isClean());
-          counter_ = null;
-        }
-        return counterBuilder_;
-      }
-
-      private io.prometheus.client.Metrics.Summary summary_ = io.prometheus.client.Metrics.Summary.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Summary, io.prometheus.client.Metrics.Summary.Builder, io.prometheus.client.Metrics.SummaryOrBuilder> summaryBuilder_;
-      /**
-       * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-       */
-      public boolean hasSummary() {
-        return ((bitField0_ & 0x00000008) == 0x00000008);
-      }
-      /**
-       * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-       */
-      public io.prometheus.client.Metrics.Summary getSummary() {
-        if (summaryBuilder_ == null) {
-          return summary_;
-        } else {
-          return summaryBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-       */
-      public Builder setSummary(io.prometheus.client.Metrics.Summary value) {
-        if (summaryBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          summary_ = value;
-          onChanged();
-        } else {
-          summaryBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000008;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-       */
-      public Builder setSummary(
-          io.prometheus.client.Metrics.Summary.Builder builderForValue) {
-        if (summaryBuilder_ == null) {
-          summary_ = builderForValue.build();
-          onChanged();
-        } else {
-          summaryBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000008;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-       */
-      public Builder mergeSummary(io.prometheus.client.Metrics.Summary value) {
-        if (summaryBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) == 0x00000008) &&
-              summary_ != io.prometheus.client.Metrics.Summary.getDefaultInstance()) {
-            summary_ =
-              io.prometheus.client.Metrics.Summary.newBuilder(summary_).mergeFrom(value).buildPartial();
-          } else {
-            summary_ = value;
-          }
-          onChanged();
-        } else {
-          summaryBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000008;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-       */
-      public Builder clearSummary() {
-        if (summaryBuilder_ == null) {
-          summary_ = io.prometheus.client.Metrics.Summary.getDefaultInstance();
-          onChanged();
-        } else {
-          summaryBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000008);
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-       */
-      public io.prometheus.client.Metrics.Summary.Builder getSummaryBuilder() {
-        bitField0_ |= 0x00000008;
-        onChanged();
-        return getSummaryFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-       */
-      public io.prometheus.client.Metrics.SummaryOrBuilder getSummaryOrBuilder() {
-        if (summaryBuilder_ != null) {
-          return summaryBuilder_.getMessageOrBuilder();
-        } else {
-          return summary_;
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Summary summary = 4;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Summary, io.prometheus.client.Metrics.Summary.Builder, io.prometheus.client.Metrics.SummaryOrBuilder> 
-          getSummaryFieldBuilder() {
-        if (summaryBuilder_ == null) {
-          summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              io.prometheus.client.Metrics.Summary, io.prometheus.client.Metrics.Summary.Builder, io.prometheus.client.Metrics.SummaryOrBuilder>(
-                  getSummary(),
-                  getParentForChildren(),
-                  isClean());
-          summary_ = null;
-        }
-        return summaryBuilder_;
-      }
-
-      private io.prometheus.client.Metrics.Untyped untyped_ = io.prometheus.client.Metrics.Untyped.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Untyped, io.prometheus.client.Metrics.Untyped.Builder, io.prometheus.client.Metrics.UntypedOrBuilder> untypedBuilder_;
-      /**
-       * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-       */
-      public boolean hasUntyped() {
-        return ((bitField0_ & 0x00000010) == 0x00000010);
-      }
-      /**
-       * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-       */
-      public io.prometheus.client.Metrics.Untyped getUntyped() {
-        if (untypedBuilder_ == null) {
-          return untyped_;
-        } else {
-          return untypedBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-       */
-      public Builder setUntyped(io.prometheus.client.Metrics.Untyped value) {
-        if (untypedBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          untyped_ = value;
-          onChanged();
-        } else {
-          untypedBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000010;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-       */
-      public Builder setUntyped(
-          io.prometheus.client.Metrics.Untyped.Builder builderForValue) {
-        if (untypedBuilder_ == null) {
-          untyped_ = builderForValue.build();
-          onChanged();
-        } else {
-          untypedBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000010;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-       */
-      public Builder mergeUntyped(io.prometheus.client.Metrics.Untyped value) {
-        if (untypedBuilder_ == null) {
-          if (((bitField0_ & 0x00000010) == 0x00000010) &&
-              untyped_ != io.prometheus.client.Metrics.Untyped.getDefaultInstance()) {
-            untyped_ =
-              io.prometheus.client.Metrics.Untyped.newBuilder(untyped_).mergeFrom(value).buildPartial();
-          } else {
-            untyped_ = value;
-          }
-          onChanged();
-        } else {
-          untypedBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000010;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-       */
-      public Builder clearUntyped() {
-        if (untypedBuilder_ == null) {
-          untyped_ = io.prometheus.client.Metrics.Untyped.getDefaultInstance();
-          onChanged();
-        } else {
-          untypedBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000010);
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-       */
-      public io.prometheus.client.Metrics.Untyped.Builder getUntypedBuilder() {
-        bitField0_ |= 0x00000010;
-        onChanged();
-        return getUntypedFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-       */
-      public io.prometheus.client.Metrics.UntypedOrBuilder getUntypedOrBuilder() {
-        if (untypedBuilder_ != null) {
-          return untypedBuilder_.getMessageOrBuilder();
-        } else {
-          return untyped_;
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Untyped untyped = 5;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Untyped, io.prometheus.client.Metrics.Untyped.Builder, io.prometheus.client.Metrics.UntypedOrBuilder> 
-          getUntypedFieldBuilder() {
-        if (untypedBuilder_ == null) {
-          untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              io.prometheus.client.Metrics.Untyped, io.prometheus.client.Metrics.Untyped.Builder, io.prometheus.client.Metrics.UntypedOrBuilder>(
-                  getUntyped(),
-                  getParentForChildren(),
-                  isClean());
-          untyped_ = null;
-        }
-        return untypedBuilder_;
-      }
-
-      private io.prometheus.client.Metrics.Histogram histogram_ = io.prometheus.client.Metrics.Histogram.getDefaultInstance();
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Histogram, io.prometheus.client.Metrics.Histogram.Builder, io.prometheus.client.Metrics.HistogramOrBuilder> histogramBuilder_;
-      /**
-       * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-       */
-      public boolean hasHistogram() {
-        return ((bitField0_ & 0x00000020) == 0x00000020);
-      }
-      /**
-       * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-       */
-      public io.prometheus.client.Metrics.Histogram getHistogram() {
-        if (histogramBuilder_ == null) {
-          return histogram_;
-        } else {
-          return histogramBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-       */
-      public Builder setHistogram(io.prometheus.client.Metrics.Histogram value) {
-        if (histogramBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          histogram_ = value;
-          onChanged();
-        } else {
-          histogramBuilder_.setMessage(value);
-        }
-        bitField0_ |= 0x00000020;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-       */
-      public Builder setHistogram(
-          io.prometheus.client.Metrics.Histogram.Builder builderForValue) {
-        if (histogramBuilder_ == null) {
-          histogram_ = builderForValue.build();
-          onChanged();
-        } else {
-          histogramBuilder_.setMessage(builderForValue.build());
-        }
-        bitField0_ |= 0x00000020;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-       */
-      public Builder mergeHistogram(io.prometheus.client.Metrics.Histogram value) {
-        if (histogramBuilder_ == null) {
-          if (((bitField0_ & 0x00000020) == 0x00000020) &&
-              histogram_ != io.prometheus.client.Metrics.Histogram.getDefaultInstance()) {
-            histogram_ =
-              io.prometheus.client.Metrics.Histogram.newBuilder(histogram_).mergeFrom(value).buildPartial();
-          } else {
-            histogram_ = value;
-          }
-          onChanged();
-        } else {
-          histogramBuilder_.mergeFrom(value);
-        }
-        bitField0_ |= 0x00000020;
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-       */
-      public Builder clearHistogram() {
-        if (histogramBuilder_ == null) {
-          histogram_ = io.prometheus.client.Metrics.Histogram.getDefaultInstance();
-          onChanged();
-        } else {
-          histogramBuilder_.clear();
-        }
-        bitField0_ = (bitField0_ & ~0x00000020);
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-       */
-      public io.prometheus.client.Metrics.Histogram.Builder getHistogramBuilder() {
-        bitField0_ |= 0x00000020;
-        onChanged();
-        return getHistogramFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-       */
-      public io.prometheus.client.Metrics.HistogramOrBuilder getHistogramOrBuilder() {
-        if (histogramBuilder_ != null) {
-          return histogramBuilder_.getMessageOrBuilder();
-        } else {
-          return histogram_;
-        }
-      }
-      /**
-       * <code>optional .io.prometheus.client.Histogram histogram = 7;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilder<
-          io.prometheus.client.Metrics.Histogram, io.prometheus.client.Metrics.Histogram.Builder, io.prometheus.client.Metrics.HistogramOrBuilder> 
-          getHistogramFieldBuilder() {
-        if (histogramBuilder_ == null) {
-          histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder<
-              io.prometheus.client.Metrics.Histogram, io.prometheus.client.Metrics.Histogram.Builder, io.prometheus.client.Metrics.HistogramOrBuilder>(
-                  getHistogram(),
-                  getParentForChildren(),
-                  isClean());
-          histogram_ = null;
-        }
-        return histogramBuilder_;
-      }
-
-      private long timestampMs_ ;
-      /**
-       * <code>optional int64 timestamp_ms = 6;</code>
-       */
-      public boolean hasTimestampMs() {
-        return ((bitField0_ & 0x00000040) == 0x00000040);
-      }
-      /**
-       * <code>optional int64 timestamp_ms = 6;</code>
-       */
-      public long getTimestampMs() {
-        return timestampMs_;
-      }
-      /**
-       * <code>optional int64 timestamp_ms = 6;</code>
-       */
-      public Builder setTimestampMs(long value) {
-        bitField0_ |= 0x00000040;
-        timestampMs_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional int64 timestamp_ms = 6;</code>
-       */
-      public Builder clearTimestampMs() {
-        bitField0_ = (bitField0_ & ~0x00000040);
-        timestampMs_ = 0L;
-        onChanged();
-        return this;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.Metric)
-    }
-
-    static {
-      defaultInstance = new Metric(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric)
-  }
-
-  public interface MetricFamilyOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:io.prometheus.client.MetricFamily)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    boolean hasName();
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    java.lang.String getName();
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    com.google.protobuf.ByteString
-        getNameBytes();
-
-    /**
-     * <code>optional string help = 2;</code>
-     */
-    boolean hasHelp();
-    /**
-     * <code>optional string help = 2;</code>
-     */
-    java.lang.String getHelp();
-    /**
-     * <code>optional string help = 2;</code>
-     */
-    com.google.protobuf.ByteString
-        getHelpBytes();
-
-    /**
-     * <code>optional .io.prometheus.client.MetricType type = 3;</code>
-     */
-    boolean hasType();
-    /**
-     * <code>optional .io.prometheus.client.MetricType type = 3;</code>
-     */
-    io.prometheus.client.Metrics.MetricType getType();
-
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    java.util.List<io.prometheus.client.Metrics.Metric> 
-        getMetricList();
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    io.prometheus.client.Metrics.Metric getMetric(int index);
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    int getMetricCount();
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    java.util.List<? extends io.prometheus.client.Metrics.MetricOrBuilder> 
-        getMetricOrBuilderList();
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    io.prometheus.client.Metrics.MetricOrBuilder getMetricOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code io.prometheus.client.MetricFamily}
-   */
-  public static final class MetricFamily extends
-      com.google.protobuf.GeneratedMessage implements
-      // @@protoc_insertion_point(message_implements:io.prometheus.client.MetricFamily)
-      MetricFamilyOrBuilder {
-    // Use MetricFamily.newBuilder() to construct.
-    private MetricFamily(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
-      super(builder);
-      this.unknownFields = builder.getUnknownFields();
-    }
-    private MetricFamily(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }
-
-    private static final MetricFamily defaultInstance;
-    public static MetricFamily getDefaultInstance() {
-      return defaultInstance;
-    }
-
-    public MetricFamily getDefaultInstanceForType() {
-      return defaultInstance;
-    }
-
-    private final com.google.protobuf.UnknownFieldSet unknownFields;
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-        getUnknownFields() {
-      return this.unknownFields;
-    }
-    private MetricFamily(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      initFields();
-      int mutable_bitField0_ = 0;
-      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
-          com.google.protobuf.UnknownFieldSet.newBuilder();
-      try {
-        boolean done = false;
-        while (!done) {
-          int tag = input.readTag();
-          switch (tag) {
-            case 0:
-              done = true;
-              break;
-            default: {
-              if (!parseUnknownField(input, unknownFields,
-                                     extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-            case 10: {
-              com.google.protobuf.ByteString bs = input.readBytes();
-              bitField0_ |= 0x00000001;
-              name_ = bs;
-              break;
-            }
-            case 18: {
-              com.google.protobuf.ByteString bs = input.readBytes();
-              bitField0_ |= 0x00000002;
-              help_ = bs;
-              break;
-            }
-            case 24: {
-              int rawValue = input.readEnum();
-              io.prometheus.client.Metrics.MetricType value = io.prometheus.client.Metrics.MetricType.valueOf(rawValue);
-              if (value == null) {
-                unknownFields.mergeVarintField(3, rawValue);
-              } else {
-                bitField0_ |= 0x00000004;
-                type_ = value;
-              }
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
-                metric_ = new java.util.ArrayList<io.prometheus.client.Metrics.Metric>();
-                mutable_bitField0_ |= 0x00000008;
-              }
-              metric_.add(input.readMessage(io.prometheus.client.Metrics.Metric.PARSER, extensionRegistry));
-              break;
-            }
-          }
-        }
-      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw e.setUnfinishedMessage(this);
-      } catch (java.io.IOException e) {
-        throw new com.google.protobuf.InvalidProtocolBufferException(
-            e.getMessage()).setUnfinishedMessage(this);
-      } finally {
-        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
-          metric_ = java.util.Collections.unmodifiableList(metric_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
-    }
-
-    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              io.prometheus.client.Metrics.MetricFamily.class, io.prometheus.client.Metrics.MetricFamily.Builder.class);
-    }
-
-    public static com.google.protobuf.Parser<MetricFamily> PARSER =
-        new com.google.protobuf.AbstractParser<MetricFamily>() {
-      public MetricFamily parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new MetricFamily(input, extensionRegistry);
-      }
-    };
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<MetricFamily> getParserForType() {
-      return PARSER;
-    }
-
-    private int bitField0_;
-    public static final int NAME_FIELD_NUMBER = 1;
-    private java.lang.Object name_;
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    public boolean hasName() {
-      return ((bitField0_ & 0x00000001) == 0x00000001);
-    }
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    public java.lang.String getName() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        if (bs.isValidUtf8()) {
-          name_ = s;
-        }
-        return s;
-      }
-    }
-    /**
-     * <code>optional string name = 1;</code>
-     */
-    public com.google.protobuf.ByteString
-        getNameBytes() {
-      java.lang.Object ref = name_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        name_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int HELP_FIELD_NUMBER = 2;
-    private java.lang.Object help_;
-    /**
-     * <code>optional string help = 2;</code>
-     */
-    public boolean hasHelp() {
-      return ((bitField0_ & 0x00000002) == 0x00000002);
-    }
-    /**
-     * <code>optional string help = 2;</code>
-     */
-    public java.lang.String getHelp() {
-      java.lang.Object ref = help_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        if (bs.isValidUtf8()) {
-          help_ = s;
-        }
-        return s;
-      }
-    }
-    /**
-     * <code>optional string help = 2;</code>
-     */
-    public com.google.protobuf.ByteString
-        getHelpBytes() {
-      java.lang.Object ref = help_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        help_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int TYPE_FIELD_NUMBER = 3;
-    private io.prometheus.client.Metrics.MetricType type_;
-    /**
-     * <code>optional .io.prometheus.client.MetricType type = 3;</code>
-     */
-    public boolean hasType() {
-      return ((bitField0_ & 0x00000004) == 0x00000004);
-    }
-    /**
-     * <code>optional .io.prometheus.client.MetricType type = 3;</code>
-     */
-    public io.prometheus.client.Metrics.MetricType getType() {
-      return type_;
-    }
-
-    public static final int METRIC_FIELD_NUMBER = 4;
-    private java.util.List<io.prometheus.client.Metrics.Metric> metric_;
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    public java.util.List<io.prometheus.client.Metrics.Metric> getMetricList() {
-      return metric_;
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    public java.util.List<? extends io.prometheus.client.Metrics.MetricOrBuilder> 
-        getMetricOrBuilderList() {
-      return metric_;
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    public int getMetricCount() {
-      return metric_.size();
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    public io.prometheus.client.Metrics.Metric getMetric(int index) {
-      return metric_.get(index);
-    }
-    /**
-     * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-     */
-    public io.prometheus.client.Metrics.MetricOrBuilder getMetricOrBuilder(
-        int index) {
-      return metric_.get(index);
-    }
-
-    private void initFields() {
-      name_ = "";
-      help_ = "";
-      type_ = io.prometheus.client.Metrics.MetricType.COUNTER;
-      metric_ = java.util.Collections.emptyList();
-    }
-    private byte memoizedIsInitialized = -1;
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
-
-      memoizedIsInitialized = 1;
-      return true;
-    }
-
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      getSerializedSize();
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        output.writeBytes(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        output.writeBytes(2, getHelpBytes());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        output.writeEnum(3, type_.getNumber());
-      }
-      for (int i = 0; i < metric_.size(); i++) {
-        output.writeMessage(4, metric_.get(i));
-      }
-      getUnknownFields().writeTo(output);
-    }
-
-    private int memoizedSerializedSize = -1;
-    public int getSerializedSize() {
-      int size = memoizedSerializedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (((bitField0_ & 0x00000001) == 0x00000001)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(1, getNameBytes());
-      }
-      if (((bitField0_ & 0x00000002) == 0x00000002)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeBytesSize(2, getHelpBytes());
-      }
-      if (((bitField0_ & 0x00000004) == 0x00000004)) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(3, type_.getNumber());
-      }
-      for (int i = 0; i < metric_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, metric_.get(i));
-      }
-      size += getUnknownFields().getSerializedSize();
-      memoizedSerializedSize = size;
-      return size;
-    }
-
-    private static final long serialVersionUID = 0L;
-    @java.lang.Override
-    protected java.lang.Object writeReplace()
-        throws java.io.ObjectStreamException {
-      return super.writeReplace();
-    }
-
-    public static io.prometheus.client.Metrics.MetricFamily parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.MetricFamily parseFrom(
-        com.google.protobuf.ByteString data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.MetricFamily parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static io.prometheus.client.Metrics.MetricFamily parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.MetricFamily parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.MetricFamily parseFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
-    }
-    public static io.prometheus.client.Metrics.MetricFamily parseDelimitedFrom(
-        java.io.InputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
-    }
-    public static io.prometheus.client.Metrics.MetricFamily parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input);
-    }
-    public static io.prometheus.client.Metrics.MetricFamily parseFrom(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
-    }
-
-    public static Builder newBuilder() { return Builder.create(); }
-    public Builder newBuilderForType() { return newBuilder(); }
-    public static Builder newBuilder(io.prometheus.client.Metrics.MetricFamily prototype) {
-      return newBuilder().mergeFrom(prototype);
-    }
-    public Builder toBuilder() { return newBuilder(this); }
-
-    @java.lang.Override
-    protected Builder newBuilderForType(
-        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-      Builder builder = new Builder(parent);
-      return builder;
-    }
-    /**
-     * Protobuf type {@code io.prometheus.client.MetricFamily}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily)
-        io.prometheus.client.Metrics.MetricFamilyOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
-      }
-
-      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                io.prometheus.client.Metrics.MetricFamily.class, io.prometheus.client.Metrics.MetricFamily.Builder.class);
-      }
-
-      // Construct using io.prometheus.client.Metrics.MetricFamily.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
-          getMetricFieldBuilder();
-        }
-      }
-      private static Builder create() {
-        return new Builder();
-      }
-
-      public Builder clear() {
-        super.clear();
-        name_ = "";
-        bitField0_ = (bitField0_ & ~0x00000001);
-        help_ = "";
-        bitField0_ = (bitField0_ & ~0x00000002);
-        type_ = io.prometheus.client.Metrics.MetricType.COUNTER;
-        bitField0_ = (bitField0_ & ~0x00000004);
-        if (metricBuilder_ == null) {
-          metric_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
-        } else {
-          metricBuilder_.clear();
-        }
-        return this;
-      }
-
-      public Builder clone() {
-        return create().mergeFrom(buildPartial());
-      }
-
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor;
-      }
-
-      public io.prometheus.client.Metrics.MetricFamily getDefaultInstanceForType() {
-        return io.prometheus.client.Metrics.MetricFamily.getDefaultInstance();
-      }
-
-      public io.prometheus.client.Metrics.MetricFamily build() {
-        io.prometheus.client.Metrics.MetricFamily result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      public io.prometheus.client.Metrics.MetricFamily buildPartial() {
-        io.prometheus.client.Metrics.MetricFamily result = new io.prometheus.client.Metrics.MetricFamily(this);
-        int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
-        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
-          to_bitField0_ |= 0x00000001;
-        }
-        result.name_ = name_;
-        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
-          to_bitField0_ |= 0x00000002;
-        }
-        result.help_ = help_;
-        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
-          to_bitField0_ |= 0x00000004;
-        }
-        result.type_ = type_;
-        if (metricBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) == 0x00000008)) {
-            metric_ = java.util.Collections.unmodifiableList(metric_);
-            bitField0_ = (bitField0_ & ~0x00000008);
-          }
-          result.metric_ = metric_;
-        } else {
-          result.metric_ = metricBuilder_.build();
-        }
-        result.bitField0_ = to_bitField0_;
-        onBuilt();
-        return result;
-      }
-
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof io.prometheus.client.Metrics.MetricFamily) {
-          return mergeFrom((io.prometheus.client.Metrics.MetricFamily)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(io.prometheus.client.Metrics.MetricFamily other) {
-        if (other == io.prometheus.client.Metrics.MetricFamily.getDefaultInstance()) return this;
-        if (other.hasName()) {
-          bitField0_ |= 0x00000001;
-          name_ = other.name_;
-          onChanged();
-        }
-        if (other.hasHelp()) {
-          bitField0_ |= 0x00000002;
-          help_ = other.help_;
-          onChanged();
-        }
-        if (other.hasType()) {
-          setType(other.getType());
-        }
-        if (metricBuilder_ == null) {
-          if (!other.metric_.isEmpty()) {
-            if (metric_.isEmpty()) {
-              metric_ = other.metric_;
-              bitField0_ = (bitField0_ & ~0x00000008);
-            } else {
-              ensureMetricIsMutable();
-              metric_.addAll(other.metric_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.metric_.isEmpty()) {
-            if (metricBuilder_.isEmpty()) {
-              metricBuilder_.dispose();
-              metricBuilder_ = null;
-              metric_ = other.metric_;
-              bitField0_ = (bitField0_ & ~0x00000008);
-              metricBuilder_ = 
-                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
-                   getMetricFieldBuilder() : null;
-            } else {
-              metricBuilder_.addAllMessages(other.metric_);
-            }
-          }
-        }
-        this.mergeUnknownFields(other.getUnknownFields());
-        return this;
-      }
-
-      public final boolean isInitialized() {
-        return true;
-      }
-
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        io.prometheus.client.Metrics.MetricFamily parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (io.prometheus.client.Metrics.MetricFamily) e.getUnfinishedMessage();
-          throw e;
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.lang.Object name_ = "";
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public boolean hasName() {
-        return ((bitField0_ & 0x00000001) == 0x00000001);
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public java.lang.String getName() {
-        java.lang.Object ref = name_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          if (bs.isValidUtf8()) {
-            name_ = s;
-          }
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public com.google.protobuf.ByteString
-          getNameBytes() {
-        java.lang.Object ref = name_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          name_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public Builder setName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        name_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public Builder clearName() {
-        bitField0_ = (bitField0_ & ~0x00000001);
-        name_ = getDefaultInstance().getName();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional string name = 1;</code>
-       */
-      public Builder setNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000001;
-        name_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object help_ = "";
-      /**
-       * <code>optional string help = 2;</code>
-       */
-      public boolean hasHelp() {
-        return ((bitField0_ & 0x00000002) == 0x00000002);
-      }
-      /**
-       * <code>optional string help = 2;</code>
-       */
-      public java.lang.String getHelp() {
-        java.lang.Object ref = help_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          if (bs.isValidUtf8()) {
-            help_ = s;
-          }
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>optional string help = 2;</code>
-       */
-      public com.google.protobuf.ByteString
-          getHelpBytes() {
-        java.lang.Object ref = help_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          help_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>optional string help = 2;</code>
-       */
-      public Builder setHelp(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000002;
-        help_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional string help = 2;</code>
-       */
-      public Builder clearHelp() {
-        bitField0_ = (bitField0_ & ~0x00000002);
-        help_ = getDefaultInstance().getHelp();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional string help = 2;</code>
-       */
-      public Builder setHelpBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  bitField0_ |= 0x00000002;
-        help_ = value;
-        onChanged();
-        return this;
-      }
-
-      private io.prometheus.client.Metrics.MetricType type_ = io.prometheus.client.Metrics.MetricType.COUNTER;
-      /**
-       * <code>optional .io.prometheus.client.MetricType type = 3;</code>
-       */
-      public boolean hasType() {
-        return ((bitField0_ & 0x00000004) == 0x00000004);
-      }
-      /**
-       * <code>optional .io.prometheus.client.MetricType type = 3;</code>
-       */
-      public io.prometheus.client.Metrics.MetricType getType() {
-        return type_;
-      }
-      /**
-       * <code>optional .io.prometheus.client.MetricType type = 3;</code>
-       */
-      public Builder setType(io.prometheus.client.Metrics.MetricType value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        bitField0_ |= 0x00000004;
-        type_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>optional .io.prometheus.client.MetricType type = 3;</code>
-       */
-      public Builder clearType() {
-        bitField0_ = (bitField0_ & ~0x00000004);
-        type_ = io.prometheus.client.Metrics.MetricType.COUNTER;
-        onChanged();
-        return this;
-      }
-
-      private java.util.List<io.prometheus.client.Metrics.Metric> metric_ =
-        java.util.Collections.emptyList();
-      private void ensureMetricIsMutable() {
-        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
-          metric_ = new java.util.ArrayList<io.prometheus.client.Metrics.Metric>(metric_);
-          bitField0_ |= 0x00000008;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilder<
-          io.prometheus.client.Metrics.Metric, io.prometheus.client.Metrics.Metric.Builder, io.prometheus.client.Metrics.MetricOrBuilder> metricBuilder_;
-
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public java.util.List<io.prometheus.client.Metrics.Metric> getMetricList() {
-        if (metricBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(metric_);
-        } else {
-          return metricBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public int getMetricCount() {
-        if (metricBuilder_ == null) {
-          return metric_.size();
-        } else {
-          return metricBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public io.prometheus.client.Metrics.Metric getMetric(int index) {
-        if (metricBuilder_ == null) {
-          return metric_.get(index);
-        } else {
-          return metricBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public Builder setMetric(
-          int index, io.prometheus.client.Metrics.Metric value) {
-        if (metricBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureMetricIsMutable();
-          metric_.set(index, value);
-          onChanged();
-        } else {
-          metricBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public Builder setMetric(
-          int index, io.prometheus.client.Metrics.Metric.Builder builderForValue) {
-        if (metricBuilder_ == null) {
-          ensureMetricIsMutable();
-          metric_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          metricBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public Builder addMetric(io.prometheus.client.Metrics.Metric value) {
-        if (metricBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureMetricIsMutable();
-          metric_.add(value);
-          onChanged();
-        } else {
-          metricBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public Builder addMetric(
-          int index, io.prometheus.client.Metrics.Metric value) {
-        if (metricBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureMetricIsMutable();
-          metric_.add(index, value);
-          onChanged();
-        } else {
-          metricBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public Builder addMetric(
-          io.prometheus.client.Metrics.Metric.Builder builderForValue) {
-        if (metricBuilder_ == null) {
-          ensureMetricIsMutable();
-          metric_.add(builderForValue.build());
-          onChanged();
-        } else {
-          metricBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public Builder addMetric(
-          int index, io.prometheus.client.Metrics.Metric.Builder builderForValue) {
-        if (metricBuilder_ == null) {
-          ensureMetricIsMutable();
-          metric_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          metricBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public Builder addAllMetric(
-          java.lang.Iterable<? extends io.prometheus.client.Metrics.Metric> values) {
-        if (metricBuilder_ == null) {
-          ensureMetricIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, metric_);
-          onChanged();
-        } else {
-          metricBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public Builder clearMetric() {
-        if (metricBuilder_ == null) {
-          metric_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
-          onChanged();
-        } else {
-          metricBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public Builder removeMetric(int index) {
-        if (metricBuilder_ == null) {
-          ensureMetricIsMutable();
-          metric_.remove(index);
-          onChanged();
-        } else {
-          metricBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public io.prometheus.client.Metrics.Metric.Builder getMetricBuilder(
-          int index) {
-        return getMetricFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public io.prometheus.client.Metrics.MetricOrBuilder getMetricOrBuilder(
-          int index) {
-        if (metricBuilder_ == null) {
-          return metric_.get(index);  } else {
-          return metricBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public java.util.List<? extends io.prometheus.client.Metrics.MetricOrBuilder> 
-           getMetricOrBuilderList() {
-        if (metricBuilder_ != null) {
-          return metricBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(metric_);
-        }
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public io.prometheus.client.Metrics.Metric.Builder addMetricBuilder() {
-        return getMetricFieldBuilder().addBuilder(
-            io.prometheus.client.Metrics.Metric.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public io.prometheus.client.Metrics.Metric.Builder addMetricBuilder(
-          int index) {
-        return getMetricFieldBuilder().addBuilder(
-            index, io.prometheus.client.Metrics.Metric.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .io.prometheus.client.Metric metric = 4;</code>
-       */
-      public java.util.List<io.prometheus.client.Metrics.Metric.Builder> 
-           getMetricBuilderList() {
-        return getMetricFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilder<
-          io.prometheus.client.Metrics.Metric, io.prometheus.client.Metrics.Metric.Builder, io.prometheus.client.Metrics.MetricOrBuilder> 
-          getMetricFieldBuilder() {
-        if (metricBuilder_ == null) {
-          metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
-              io.prometheus.client.Metrics.Metric, io.prometheus.client.Metrics.Metric.Builder, io.prometheus.client.Metrics.MetricOrBuilder>(
-                  metric_,
-                  ((bitField0_ & 0x00000008) == 0x00000008),
-                  getParentForChildren(),
-                  isClean());
-          metric_ = null;
-        }
-        return metricBuilder_;
-      }
-
-      // @@protoc_insertion_point(builder_scope:io.prometheus.client.MetricFamily)
-    }
-
-    static {
-      defaultInstance = new MetricFamily(true);
-      defaultInstance.initFields();
-    }
-
-    // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily)
-  }
-
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_LabelPair_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_LabelPair_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_Gauge_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_Gauge_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_Counter_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_Counter_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_Quantile_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_Quantile_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_Summary_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_Summary_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_Untyped_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_Untyped_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_Histogram_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_Histogram_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_Bucket_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_Bucket_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_Metric_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_Metric_fieldAccessorTable;
-  private static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_io_prometheus_client_MetricFamily_descriptor;
-  private static
-    com.google.protobuf.GeneratedMessage.FieldAccessorTable
-      internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable;
-
-  public static com.google.protobuf.Descriptors.FileDescriptor
-      getDescriptor() {
-    return descriptor;
-  }
-  private static com.google.protobuf.Descriptors.FileDescriptor
-      descriptor;
-  static {
-    java.lang.String[] descriptorData = {
-      "\n\rmetrics.proto\022\024io.prometheus.client\"(\n" +
-      "\tLabelPair\022\014\n\004name\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"" +
-      "\026\n\005Gauge\022\r\n\005value\030\001 \001(\001\"\030\n\007Counter\022\r\n\005va" +
-      "lue\030\001 \001(\001\"+\n\010Quantile\022\020\n\010quantile\030\001 \001(\001\022" +
-      "\r\n\005value\030\002 \001(\001\"e\n\007Summary\022\024\n\014sample_coun" +
-      "t\030\001 \001(\004\022\022\n\nsample_sum\030\002 \001(\001\0220\n\010quantile\030" +
-      "\003 \003(\0132\036.io.prometheus.client.Quantile\"\030\n" +
-      "\007Untyped\022\r\n\005value\030\001 \001(\001\"c\n\tHistogram\022\024\n\014" +
-      "sample_count\030\001 \001(\004\022\022\n\nsample_sum\030\002 \001(\001\022," +
-      "\n\006bucket\030\003 \003(\0132\034.io.prometheus.client.Bu",
-      "cket\"7\n\006Bucket\022\030\n\020cumulative_count\030\001 \001(\004" +
-      "\022\023\n\013upper_bound\030\002 \001(\001\"\276\002\n\006Metric\022.\n\005labe" +
-      "l\030\001 \003(\0132\037.io.prometheus.client.LabelPair" +
-      "\022*\n\005gauge\030\002 \001(\0132\033.io.prometheus.client.G" +
-      "auge\022.\n\007counter\030\003 \001(\0132\035.io.prometheus.cl" +
-      "ient.Counter\022.\n\007summary\030\004 \001(\0132\035.io.prome" +
-      "theus.client.Summary\022.\n\007untyped\030\005 \001(\0132\035." +
-      "io.prometheus.client.Untyped\0222\n\thistogra" +
-      "m\030\007 \001(\0132\037.io.prometheus.client.Histogram" +
-      "\022\024\n\014timestamp_ms\030\006 \001(\003\"\210\001\n\014MetricFamily\022",
-      "\014\n\004name\030\001 \001(\t\022\014\n\004help\030\002 \001(\t\022.\n\004type\030\003 \001(" +
-      "\0162 .io.prometheus.client.MetricType\022,\n\006m" +
-      "etric\030\004 \003(\0132\034.io.prometheus.client.Metri" +
-      "c*M\n\nMetricType\022\013\n\007COUNTER\020\000\022\t\n\005GAUGE\020\001\022" +
-      "\013\n\007SUMMARY\020\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004" +
-      "B\026\n\024io.prometheus.client"
-    };
-    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
-        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
-          public com.google.protobuf.ExtensionRegistry assignDescriptors(
-              com.google.protobuf.Descriptors.FileDescriptor root) {
-            descriptor = root;
-            return null;
-          }
-        };
-    com.google.protobuf.Descriptors.FileDescriptor
-      .internalBuildGeneratedFileFrom(descriptorData,
-        new com.google.protobuf.Descriptors.FileDescriptor[] {
-        }, assigner);
-    internal_static_io_prometheus_client_LabelPair_descriptor =
-      getDescriptor().getMessageTypes().get(0);
-    internal_static_io_prometheus_client_LabelPair_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_LabelPair_descriptor,
-        new java.lang.String[] { "Name", "Value", });
-    internal_static_io_prometheus_client_Gauge_descriptor =
-      getDescriptor().getMessageTypes().get(1);
-    internal_static_io_prometheus_client_Gauge_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_Gauge_descriptor,
-        new java.lang.String[] { "Value", });
-    internal_static_io_prometheus_client_Counter_descriptor =
-      getDescriptor().getMessageTypes().get(2);
-    internal_static_io_prometheus_client_Counter_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_Counter_descriptor,
-        new java.lang.String[] { "Value", });
-    internal_static_io_prometheus_client_Quantile_descriptor =
-      getDescriptor().getMessageTypes().get(3);
-    internal_static_io_prometheus_client_Quantile_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_Quantile_descriptor,
-        new java.lang.String[] { "Quantile", "Value", });
-    internal_static_io_prometheus_client_Summary_descriptor =
-      getDescriptor().getMessageTypes().get(4);
-    internal_static_io_prometheus_client_Summary_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_Summary_descriptor,
-        new java.lang.String[] { "SampleCount", "SampleSum", "Quantile", });
-    internal_static_io_prometheus_client_Untyped_descriptor =
-      getDescriptor().getMessageTypes().get(5);
-    internal_static_io_prometheus_client_Untyped_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_Untyped_descriptor,
-        new java.lang.String[] { "Value", });
-    internal_static_io_prometheus_client_Histogram_descriptor =
-      getDescriptor().getMessageTypes().get(6);
-    internal_static_io_prometheus_client_Histogram_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_Histogram_descriptor,
-        new java.lang.String[] { "SampleCount", "SampleSum", "Bucket", });
-    internal_static_io_prometheus_client_Bucket_descriptor =
-      getDescriptor().getMessageTypes().get(7);
-    internal_static_io_prometheus_client_Bucket_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_Bucket_descriptor,
-        new java.lang.String[] { "CumulativeCount", "UpperBound", });
-    internal_static_io_prometheus_client_Metric_descriptor =
-      getDescriptor().getMessageTypes().get(8);
-    internal_static_io_prometheus_client_Metric_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_Metric_descriptor,
-        new java.lang.String[] { "Label", "Gauge", "Counter", "Summary", "Untyped", "Histogram", "TimestampMs", });
-    internal_static_io_prometheus_client_MetricFamily_descriptor =
-      getDescriptor().getMessageTypes().get(9);
-    internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable = new
-      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
-        internal_static_io_prometheus_client_MetricFamily_descriptor,
-        new java.lang.String[] { "Name", "Help", "Type", "Metric", });
-  }
-
-  // @@protoc_insertion_point(outer_class_scope)
-}

More details

Full run details