// This file was generated by Cobalt's Config parser based on the configuration
// YAML in the cobalt_config repository. Edit the YAML there to make changes.
package package
const CustomerName string = "the_customer";
const CustomerId uint32 = 10;
const ProjectName string = "the_project";
const ProjectId uint32 = 5;

// Linear bucket constants for linear buckets
const LinearBucketsIntBucketsFloor int64 = 0;
const LinearBucketsIntBucketsNumBuckets uint32 = 140;
const LinearBucketsIntBucketsStepSize uint32 = 5;

// Exponential bucket constants for exponential buckets report
const ExponentialBucketsReportIntBucketsFloor int64 = 0;
const ExponentialBucketsReportIntBucketsNumBuckets uint32 = 3;
const ExponentialBucketsReportIntBucketsInitialStep uint32 = 2;
const ExponentialBucketsReportIntBucketsStepMultiplier uint32 = 2;

// Metric ID Constants
// the_metric_name
const TheMetricNameMetricId uint32 = 100;
// the_other_metric_name
const TheOtherMetricNameMetricId uint32 = 200;
// event groups
const EventGroupsMetricId uint32 = 300;
// linear buckets
const LinearBucketsMetricId uint32 = 400;
// exponential buckets
const ExponentialBucketsMetricId uint32 = 500;
// metric
const MetricMetricId uint32 = 600;
// second metric
const SecondMetricMetricId uint32 = 601;

// Enum for the_other_metric_name (Metric Dimension 0)
type TheOtherMetricNameMetricDimension0 uint32
const (
_ TheOtherMetricNameMetricDimension0 = iota
  AnEvent = 0
  AnotherEvent = 1
  AThirdEvent = 2
)

// Alias for event groups (Metric Dimension The First Group) which has the same event codes
type EventGroupsMetricDimensionTheFirstGroup = TheOtherMetricNameMetricDimension0

// Enum for the_project (Metric Dimension A second group)
type TheProjectMetricDimensionASecondGroup uint32
const (
_ TheProjectMetricDimensionASecondGroup = iota
  This = 1
  Is = 2
  Another = 3
  Test = 4
)
// Alias for event groups (Metric Dimension A second group) which has the same event codes
type EventGroupsMetricDimensionASecondGroup = TheProjectMetricDimensionASecondGroup

// Enum for the_project (Metric Dimension 2)
type TheProjectMetricDimension2 uint32
const (
_ TheProjectMetricDimension2 = iota
  ThisMetric = 0
  HasNo = 2
  Name = 4
)
// Alias for event groups (Metric Dimension 2) which has the same event codes
type EventGroupsMetricDimension2 = TheProjectMetricDimension2

// Enum for the_project (Metric Dimension First)
type TheProjectMetricDimensionFirst uint32
const (
_ TheProjectMetricDimensionFirst = iota
  A = 1
  Set = 2
  OfEvent = 3
  Codes = 4
)
// Alias for metric (Metric Dimension First) which has the same event codes
type MetricMetricDimensionFirst = TheProjectMetricDimensionFirst

// Alias for second metric (Metric Dimension First) which has the same event codes
type SecondMetricMetricDimensionFirst = TheProjectMetricDimensionFirst

// Enum for the_project (Metric Dimension Second)
type TheProjectMetricDimensionSecond uint32
const (
_ TheProjectMetricDimensionSecond = iota
  Some = 0
  More = 4
  Event = 8
  Codes = 16
)
// Alias for metric (Metric Dimension Second) which has the same event codes
type MetricMetricDimensionSecond = TheProjectMetricDimensionSecond

// Alias for second metric (Metric Dimension Second) which has the same event codes
type SecondMetricMetricDimensionSecond = TheProjectMetricDimensionSecond

// The base64 encoding of the bytes of a serialized CobaltRegistry proto message.
const Config string = "KosGCgx0aGVfY3VzdG9tZXIQChr4BQoLdGhlX3Byb2plY3QQBRpCCg90aGVfbWV0cmljX25hbWUQChgFIGRiEQoKdGhlX3JlcG9ydBAKGI9OYhYKEHRoZV9vdGhlcl9yZXBvcnQQFBgDGmwKFXRoZV9vdGhlcl9tZXRyaWNfbmFtZRAKGAUgyAEoAVABYhAKCnRoZV9yZXBvcnQQChgHggE1EgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYyAEa5wEKDGV2ZW50IGdyb3VwcxAKGAUgrAIoAVABYhAKCnRoZV9yZXBvcnQQHhgHggFFCg9UaGUgRmlyc3QgR3JvdXASCwgAEgdBbkV2ZW50EhAIARIMQW5vdGhlckV2ZW50EhEIAhINQSB0aGlyZCBldmVudBgCggE5Cg5BIHNlY29uZCBncm91cBIICAESBFRoaXMSBggCEgJJcxILCAMSB2Fub3RoZXISCAgEEgRUZXN0ggE1Eg4IABIKVGhpc01ldHJpYxIJCAISBUhhc05vEggIBBIETmFtZSoOCgVIYXNObxIFQWxpYXMaIAoObGluZWFyIGJ1Y2tldHMQChgFIJADQgcSBRCMARgFGjIKE2V4cG9uZW50aWFsIGJ1Y2tldHMQChgFIPQDYhQKBnJlcG9ydBAoUggKBhADGAIgAhp2CgZtZXRyaWMQChgFINgEggEvCgVGaXJzdBIFCAESAUESBwgCEgNTZXQSCwgDEgdPZkV2ZW50EgkIBBIFQ29kZXOCATIKBlNlY29uZBIICAASBFNvbWUSCAgEEgRNb3JlEgkICBIFRXZlbnQSCQgQEgVDb2Rlcxp9Cg1zZWNvbmQgbWV0cmljEAoYBSDZBIIBLwoFRmlyc3QSBQgBEgFBEgcIAhIDU2V0EgsIAxIHT2ZFdmVudBIJCAQSBUNvZGVzggEyCgZTZWNvbmQSCAgAEgRTb21lEggIBBIETW9yZRIJCAgSBUV2ZW50EgkIEBIFQ29kZXM=";
